package es.uv.saic.llm; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.openai.OpenAiChatOptions; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import static es.uv.saic.service.SystemPrompt.SCORE_AND_COMMENT_ANALYSIS_PROMPT; @Component public class LocalLlmProxy implements AiProxy { private final ChatClient localChatClient; private final ObjectMapper objectMapper = new ObjectMapper(); public LocalLlmProxy( @Qualifier("localChatClient") ChatClient localChatClient ) { this.localChatClient = localChatClient; } @SneakyThrows public String calculateScoreAndProduceComments(String asCsv) { return calculateScoreAndProduceComments(asCsv, null); } @SneakyThrows public String calculateScoreAndProduceComments(String asCsv, String model) { ChatClient.ChatClientRequestSpec prompt = localChatClient.prompt(); if (StringUtils.hasText(model)) { prompt = prompt.options(OpenAiChatOptions.builder().model(model).build()); } return prompt .system(SCORE_AND_COMMENT_ANALYSIS_PROMPT) .user("AquĆ­ tienes las tablas: " + objectMapper.writeValueAsString(asCsv)) .call() .content(); } }