diff --git a/backend/src/main/java/com/vaessl/app/ai/EmbeddingService.java b/backend/src/main/java/com/vaessl/app/ai/EmbeddingService.java index bc1dd86..c0d9533 100644 --- a/backend/src/main/java/com/vaessl/app/ai/EmbeddingService.java +++ b/backend/src/main/java/com/vaessl/app/ai/EmbeddingService.java @@ -22,37 +22,62 @@ public class EmbeddingService { } public void vectorizeData(List items, ServiceType serviceType, Long connectionId) { - - List mappedResponse = new ArrayList<>(); - + List documents = new ArrayList<>(); for (ServiceItem item : items) { - - StringBuilder data = new StringBuilder(); - - if (item.extraData() != null) { - for (Map.Entry entry : item.extraData().entrySet()) { - if (!data.isEmpty()) { - data.append(" \n"); - } - data.append(entry.getKey()); - data.append(": "); - data.append(entry.getValue()); - } - } - - Map metadata = new HashMap<>(); - metadata.put("connectionId", connectionId); - metadata.put("serviceType", serviceType.name()); - metadata.put("itemId", item.id()); - metadata.put("title", item.title()); - metadata.put("description", item.description()); - metadata.put("extraData", data.toString()); - - mappedResponse.add(new Document(connectionId + ":" + item.id(), "Title: " + item.title() - + (item.description() != null ? "\n Description: " + item.description() : "") - + (!data.isEmpty() ? "\n Extradata: " + data.toString() : ""), metadata)); + documents.add(toDocument(item, serviceType, connectionId)); } - vectorStore.add(mappedResponse); + vectorStore.add(documents); + } + + private Document toDocument(ServiceItem item, ServiceType serviceType, Long connectionId) { + String extraData = buildExtraData(item.extraData()); + Map metadata = buildMetadata(item, serviceType, connectionId, extraData); + String content = buildContent(item, extraData); + return new Document(connectionId + ":" + item.id(), content, metadata); + } + + private String buildExtraData(Map extraData) { + if (extraData == null) { + return ""; + } + StringBuilder data = new StringBuilder(); + for (Map.Entry entry : extraData.entrySet()) { + if (entry.getValue() == null || entry.getValue().toString().isEmpty()) { + continue; + } + if (!data.isEmpty()) { + data.append(" \n"); + } + data.append(entry.getKey()).append(": ").append(entry.getValue()); + } + return data.toString(); + } + + private Map buildMetadata(ServiceItem item, ServiceType serviceType, + Long connectionId, String extraData) { + Map metadata = new HashMap<>(); + metadata.put("connectionId", connectionId); + metadata.put("serviceType", serviceType.name()); + metadata.put("itemId", item.id()); + metadata.put("title", item.title()); + if (item.description() != null && !item.description().isEmpty()) { + metadata.put("description", item.description()); + } + if (!extraData.isEmpty()) { + metadata.put("extraData", extraData); + } + return metadata; + } + + private String buildContent(ServiceItem item, String extraData) { + StringBuilder content = new StringBuilder("Title: ").append(item.title()); + if (item.description() != null && !item.description().isEmpty()) { + content.append("\n Description: ").append(item.description()); + } + if (!extraData.isEmpty()) { + content.append("\n Extradata: ").append(extraData); + } + return content.toString(); } }