|
@@ -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();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|