diff --git a/pom.xml b/pom.xml
index bfb1d9d..1a17aa6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,7 +58,7 @@
spring-boot-starter-data-rest
-
+
+
+
+ org.springframework.ai
+ spring-ai-azure-openai-spring-boot-starter
+
+
+
+ org.springframework.ai
+ spring-ai-azure-store
+
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
+
org.springframework.cloud
spring-cloud-starter-openfeign
@@ -87,6 +99,12 @@
1.0.0-SNAPSHOT
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
+
org.projectlombok
lombok
diff --git a/src/main/java/com/olympus/apollo/config/EmbeddingConfig.java b/src/main/java/com/olympus/apollo/config/EmbeddingConfig.java
index 75fecb4..d8a2643 100644
--- a/src/main/java/com/olympus/apollo/config/EmbeddingConfig.java
+++ b/src/main/java/com/olympus/apollo/config/EmbeddingConfig.java
@@ -1,10 +1,18 @@
package com.olympus.apollo.config;
+import com.azure.core.credential.AzureKeyCredential;
+import com.azure.search.documents.indexes.SearchIndexClient;
+import com.azure.search.documents.indexes.SearchIndexClientBuilder;
+import org.springframework.ai.azure.openai.AzureOpenAiEmbeddingModel;
import org.springframework.ai.embedding.EmbeddingModel;
-import org.springframework.ai.openai.OpenAiEmbeddingModel;
+/*import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.ai.openai.api.OpenAiApi;
-import org.springframework.ai.vectorstore.MongoDBAtlasVectorStore;
+import org.springframework.ai.vectorstore.MongoDBAtlasVectorStore;*/
+
import org.springframework.ai.vectorstore.VectorStore;
+import org.springframework.ai.vectorstore.azure.AzureVectorStore;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -12,34 +20,39 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
+import java.util.ArrayList;
+import java.util.List;
+
@Configuration
-@SpringBootConfiguration
-@EnableAutoConfiguration
public class EmbeddingConfig {
- @Value("${spring.ai.openai.api-key}")
- private String openAiKey;
- @Value("${spring.data.mongodb.database}")
- private String databaseName;
- @Value("${spring.ai.vectorstore.mongodb.collection-name:vector_store}")
- private String collectionName;
- @Value("${spring.ai.vectorstore.mongodb.indexName:vector_index}")
- private String indexName;
- @Value("${spring.data.mongodb.uri}")
- private String mongoUri;
- @Value("${spring.ai.vectorstore.mongodb.initialize-schema}")
- private Boolean initSchema;
- // Add beans here...
+
+
+ @Value("${spring.ai.vectorstore.azure.api-key}")
+ private String azureKey;
+ @Value("${spring.ai.vectorstore.azure.url}")
+ private String azureEndpoint;
+ @Value("${spring.ai.vectorstore.azure.initialize-schema}")
+ private boolean initSchema;
@Bean
- public EmbeddingModel embeddingModel() {
- return new OpenAiEmbeddingModel(new OpenAiApi(openAiKey));
+ public SearchIndexClient searchIndexClient() {
+ return new SearchIndexClientBuilder().endpoint(azureEndpoint)
+ .credential(new AzureKeyCredential(azureKey))
+ .buildClient();
}
-
@Bean
- public VectorStore mongodbVectorStore(MongoTemplate mongoTemplate, EmbeddingModel embeddingModel) {
- return new MongoDBAtlasVectorStore(mongoTemplate, embeddingModel,
- MongoDBAtlasVectorStore.MongoDBVectorStoreConfig.builder().build(), initSchema);
+ public VectorStore vectorStore(SearchIndexClient searchIndexClient, @Qualifier("azureOpenAiEmbeddingModel") EmbeddingModel embeddingModel) {
+ List fields = new ArrayList<>();
+
+ fields.add(AzureVectorStore.MetadataField.text("KsApplicationName"));
+ fields.add(AzureVectorStore.MetadataField.text("KsProjectName"));
+ fields.add(AzureVectorStore.MetadataField.text("KsDoctype"));
+ fields.add(AzureVectorStore.MetadataField.text("KsDocSource"));
+ fields.add(AzureVectorStore.MetadataField.text("KsFileSource"));
+ fields.add(AzureVectorStore.MetadataField.text("KsDocumentId"));
+
+ return new AzureVectorStore(searchIndexClient, embeddingModel,initSchema, fields);
}
}
diff --git a/src/main/java/com/olympus/apollo/controllers/KSFileController.java b/src/main/java/com/olympus/apollo/controllers/KSFileController.java
index 5d0ffb8..f677088 100644
--- a/src/main/java/com/olympus/apollo/controllers/KSFileController.java
+++ b/src/main/java/com/olympus/apollo/controllers/KSFileController.java
@@ -59,7 +59,6 @@ public class KSFileController {
Date now = new Date();
ksDocument.setIngestionDate(now);
-
KSIngestionInfo ksIngestionInfo = new KSIngestionInfo();
ksIngestionInfo.setType(fileUploadDTO.getType()); // != null ? type : "MD_DOCUMENT"
@@ -68,6 +67,7 @@ public class KSFileController {
metadata.put("KsDoctype", fileUploadDTO.getKsDocType());
metadata.put("KsDocSource", fileUploadDTO.getKsDocSource());
metadata.put("KsFileSource", file.getOriginalFilename());
+ metadata.put("KsProjectName", fileUploadDTO.getKsProjectName());
ksIngestionInfo.setMetadata(metadata);
ksIngestionInfo.setDefaultChunkSize(fileUploadDTO.getDefaultChunkSize());
@@ -75,7 +75,7 @@ public class KSFileController {
ksIngestionInfo.setMaxNumberOfChunks(fileUploadDTO.getMaxNumberOfChunks());
ksIngestionInfo.setMinChunkSizeToEmbed(fileUploadDTO.getMinChunkSizeToEmbed());
- ksIngestionInfoRepository.save(ksIngestionInfo);
+ //ksIngestionInfoRepository.save(ksIngestionInfo);
ksDocument.setIngestionInfo(ksIngestionInfo);
ksDocumentREpository.save(ksDocument);
diff --git a/src/main/java/com/olympus/apollo/controllers/TestController.java b/src/main/java/com/olympus/apollo/controllers/TestController.java
index fa1aba5..de83cc9 100644
--- a/src/main/java/com/olympus/apollo/controllers/TestController.java
+++ b/src/main/java/com/olympus/apollo/controllers/TestController.java
@@ -122,7 +122,7 @@ public class TestController {
}
@PostMapping("/revenginnerapplication")
- public ResponseEntity