Sfoglia il codice sorgente

Move LLM call to proxy

atsachlaris 1 giorno fa
parent
commit
5c9f70ac7f

+ 7 - 30
src/main/java/es/uv/saic/service/EnhancementService.java

@@ -1,67 +1,44 @@
 package es.uv.saic.service;
 package es.uv.saic.service;
 
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import es.uv.saic.extractor.ExtractionRequest;
 import es.uv.saic.extractor.ExtractionRequest;
 import es.uv.saic.extractor.docling.DoclingTableExtractor;
 import es.uv.saic.extractor.docling.DoclingTableExtractor;
 import es.uv.saic.extractor.HtmlToCsvExtractor;
 import es.uv.saic.extractor.HtmlToCsvExtractor;
+import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.SneakyThrows;
-import org.springframework.ai.chat.client.ChatClient;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
 
 
-import static es.uv.saic.service.SystemPrompt.SCORE_AND_COMMENT_ANALYSIS_PROMPT;
-
 @Service
 @Service
+@RequiredArgsConstructor
 public class EnhancementService {
 public class EnhancementService {
-    private final ChatClient chatClient;
     private final HtmlToCsvExtractor htmlToCsvExtractor;
     private final HtmlToCsvExtractor htmlToCsvExtractor;
     private final DoclingTableExtractor doclingTableExtractor;
     private final DoclingTableExtractor doclingTableExtractor;
-    private final ObjectMapper objectMapper = new ObjectMapper();
-
-    public EnhancementService(
-            ChatClient.Builder chatClientBuilder,
-            HtmlToCsvExtractor htmlToCsvExtractor,
-            DoclingTableExtractor doclingTableExtractor
-    ) {
-        this.chatClient = chatClientBuilder.build();
-        this.htmlToCsvExtractor = htmlToCsvExtractor;
-        this.doclingTableExtractor = doclingTableExtractor;
-    }
+    private final LlmProxy llmProxy;
 
 
     @SneakyThrows
     @SneakyThrows
     public String askHtml(String html) {
     public String askHtml(String html) {
         String asCsv = extractForChatEndpoint(ExtractionRequest.fromHtml(html));
         String asCsv = extractForChatEndpoint(ExtractionRequest.fromHtml(html));
 
 
-        return askLlm(asCsv);
+        return llmProxy.askLlm(asCsv);
     }
     }
 
 
     public String askFile(byte[] fileBytes, String fileName, String contentType) {
     public String askFile(byte[] fileBytes, String fileName, String contentType) {
         String asCsv = extractForFileEndpoint(ExtractionRequest.fromFile(fileBytes, fileName, contentType));
         String asCsv = extractForFileEndpoint(ExtractionRequest.fromFile(fileBytes, fileName, contentType));
 
 
-        return askLlm(asCsv);
+        return llmProxy.askLlm(asCsv);
     }
     }
 
 
-    public String extractForChatEndpoint(ExtractionRequest request) {
+    private String extractForChatEndpoint(ExtractionRequest request) {
         if (doclingTableExtractor.supports(request)) {
         if (doclingTableExtractor.supports(request)) {
             return doclingTableExtractor.extractTablesToCsv(request);
             return doclingTableExtractor.extractTablesToCsv(request);
         }
         }
         return htmlToCsvExtractor.extractTablesToCsv(request);
         return htmlToCsvExtractor.extractTablesToCsv(request);
     }
     }
 
 
-    public String extractForFileEndpoint(ExtractionRequest request) {
+    private String extractForFileEndpoint(ExtractionRequest request) {
         String htmlFallback = request.hasFile() ? new String(request.fileBytes(), StandardCharsets.UTF_8) : "";
         String htmlFallback = request.hasFile() ? new String(request.fileBytes(), StandardCharsets.UTF_8) : "";
         return extractForChatEndpoint(ExtractionRequest.fromHtml(htmlFallback));
         return extractForChatEndpoint(ExtractionRequest.fromHtml(htmlFallback));
     }
     }
 
 
-    @SneakyThrows
-    private String askLlm(String asCsv) {
-
-        return chatClient.prompt()
-                .system(SCORE_AND_COMMENT_ANALYSIS_PROMPT)
-                .user("Aquí tienes las tablas: " + objectMapper.writeValueAsString(asCsv))
-                .call()
-                .content();
-    }
-
 }
 }

+ 31 - 0
src/main/java/es/uv/saic/service/LlmProxy.java

@@ -0,0 +1,31 @@
+package es.uv.saic.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.SneakyThrows;
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.stereotype.Component;
+
+import static es.uv.saic.service.SystemPrompt.SCORE_AND_COMMENT_ANALYSIS_PROMPT;
+
+@Component
+public class LlmProxy {
+
+    private final ChatClient chatClient;
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    public LlmProxy(
+            ChatClient.Builder chatClientBuilder
+    ) {
+        this.chatClient = chatClientBuilder.build();
+    }
+
+    @SneakyThrows
+    public String askLlm(String asCsv) {
+
+        return chatClient.prompt()
+                .system(SCORE_AND_COMMENT_ANALYSIS_PROMPT)
+                .user("Aquí tienes las tablas: " + objectMapper.writeValueAsString(asCsv))
+                .call()
+                .content();
+    }
+}