LocalLlmProxy.java 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package es.uv.saic.llm;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import lombok.SneakyThrows;
  4. import org.springframework.ai.chat.client.ChatClient;
  5. import org.springframework.ai.openai.OpenAiChatOptions;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.stereotype.Component;
  8. import org.springframework.util.StringUtils;
  9. import static es.uv.saic.service.SystemPrompt.SCORE_AND_COMMENT_ANALYSIS_PROMPT;
  10. @Component
  11. public class LocalLlmProxy implements AiProxy {
  12. private final ChatClient localChatClient;
  13. private final ObjectMapper objectMapper = new ObjectMapper();
  14. public LocalLlmProxy(
  15. @Qualifier("localChatClient") ChatClient localChatClient
  16. ) {
  17. this.localChatClient = localChatClient;
  18. }
  19. @SneakyThrows
  20. public String calculateScoreAndProduceComments(String asCsv) {
  21. return calculateScoreAndProduceComments(asCsv, null);
  22. }
  23. @SneakyThrows
  24. public String calculateScoreAndProduceComments(String asCsv, String model) {
  25. ChatClient.ChatClientRequestSpec prompt = localChatClient.prompt();
  26. if (StringUtils.hasText(model)) {
  27. prompt = prompt.options(OpenAiChatOptions.builder().model(model).build());
  28. }
  29. return prompt
  30. .system(SCORE_AND_COMMENT_ANALYSIS_PROMPT)
  31. .user("Aquí tienes las tablas: " + objectMapper.writeValueAsString(asCsv))
  32. .call()
  33. .content();
  34. }
  35. }