|
|
@@ -5,25 +5,59 @@ import lombok.SneakyThrows;
|
|
|
import org.springframework.ai.chat.client.ChatClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+
|
|
|
import static es.uv.saic.service.SystemPrompt.SYSTEM_INSTRUCTIONS;
|
|
|
|
|
|
@Service
|
|
|
public class EnhancementService {
|
|
|
private final ChatClient chatClient;
|
|
|
private final HtmlToCsvExtractor htmlToCsvExtractor;
|
|
|
+ private final DoclingTableExtractor doclingTableExtractor;
|
|
|
private final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
|
public EnhancementService(
|
|
|
ChatClient.Builder chatClientBuilder,
|
|
|
- HtmlToCsvExtractor htmlToCsvExtractor
|
|
|
+ HtmlToCsvExtractor htmlToCsvExtractor,
|
|
|
+ DoclingTableExtractor doclingTableExtractor
|
|
|
) {
|
|
|
this.chatClient = chatClientBuilder.build();
|
|
|
this.htmlToCsvExtractor = htmlToCsvExtractor;
|
|
|
+ this.doclingTableExtractor = doclingTableExtractor;
|
|
|
}
|
|
|
|
|
|
@SneakyThrows
|
|
|
public String ask(String html) {
|
|
|
- String asCsv = htmlToCsvExtractor.extractTablesToCsv(html);
|
|
|
+ return askHtml(html);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ public String askHtml(String html) {
|
|
|
+ String asCsv = extractForChatEndpoint(ExtractionRequest.fromHtml(html));
|
|
|
+
|
|
|
+ return askLlm(asCsv);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String askFile(byte[] fileBytes, String fileName, String contentType) {
|
|
|
+ String asCsv = extractForFileEndpoint(ExtractionRequest.fromFile(fileBytes, fileName, contentType));
|
|
|
+
|
|
|
+ return askLlm(asCsv);
|
|
|
+ }
|
|
|
+
|
|
|
+ String extractForChatEndpoint(ExtractionRequest request) {
|
|
|
+ if (doclingTableExtractor.supports(request)) {
|
|
|
+ return doclingTableExtractor.extractTablesToCsv(request);
|
|
|
+ }
|
|
|
+ return htmlToCsvExtractor.extractTablesToCsv(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ String extractForFileEndpoint(ExtractionRequest request) {
|
|
|
+ String htmlFallback = request.hasFile() ? new String(request.fileBytes(), StandardCharsets.UTF_8) : "";
|
|
|
+ return extractForChatEndpoint(ExtractionRequest.fromHtml(htmlFallback));
|
|
|
+ }
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ private String askLlm(String asCsv) {
|
|
|
|
|
|
return chatClient.prompt()
|
|
|
.system(SYSTEM_INSTRUCTIONS)
|