mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-11-16 01:21:16 +01:00
wip - resolving dependency issues
This commit is contained in:
parent
57d35324e3
commit
7b9f83b08f
@ -52,8 +52,7 @@ dependencies {
|
|||||||
api 'org.springframework.boot:spring-boot-starter-cache'
|
api 'org.springframework.boot:spring-boot-starter-cache'
|
||||||
api 'com.github.ben-manes.caffeine:caffeine'
|
api 'com.github.ben-manes.caffeine:caffeine'
|
||||||
api 'io.swagger.core.v3:swagger-core-jakarta:2.2.38'
|
api 'io.swagger.core.v3:swagger-core-jakarta:2.2.38'
|
||||||
implementation 'org.springframework.ai:spring-ai-spring-boot-starter:1.0.1'
|
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-M6'
|
||||||
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.1'
|
|
||||||
implementation 'com.bucket4j:bucket4j_jdk17-core:8.15.0'
|
implementation 'com.bucket4j:bucket4j_jdk17-core:8.15.0'
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17
|
// https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17
|
||||||
|
|||||||
@ -146,9 +146,9 @@ public class ChatbotConversationService {
|
|||||||
if (modelSwitchVerified.compareAndSet(false, true)) {
|
if (modelSwitchVerified.compareAndSet(false, true)) {
|
||||||
ChatbotSettings settings = featureProperties.current();
|
ChatbotSettings settings = featureProperties.current();
|
||||||
OpenAiChatOptions primary =
|
OpenAiChatOptions primary =
|
||||||
OpenAiChatOptions.builder().withModel(settings.models().primary()).build();
|
OpenAiChatOptions.builder().model(settings.models().primary()).build();
|
||||||
OpenAiChatOptions fallback =
|
OpenAiChatOptions fallback =
|
||||||
OpenAiChatOptions.builder().withModel(settings.models().fallback()).build();
|
OpenAiChatOptions.builder().model(settings.models().fallback()).build();
|
||||||
log.info(
|
log.info(
|
||||||
"Verified runtime model override support ({} -> {})",
|
"Verified runtime model override support ({} -> {})",
|
||||||
primary.getModel(),
|
primary.getModel(),
|
||||||
@ -185,7 +185,7 @@ public class ChatbotConversationService {
|
|||||||
Optional.ofNullable(response)
|
Optional.ofNullable(response)
|
||||||
.map(ChatResponse::getResults)
|
.map(ChatResponse::getResults)
|
||||||
.filter(results -> !results.isEmpty())
|
.filter(results -> !results.isEmpty())
|
||||||
.map(results -> results.get(0).getOutput().getContent())
|
.map(results -> results.get(0).getOutput().getText())
|
||||||
.orElse("");
|
.orElse("");
|
||||||
return parseModelResponse(content);
|
return parseModelResponse(content);
|
||||||
}
|
}
|
||||||
@ -227,7 +227,7 @@ public class ChatbotConversationService {
|
|||||||
+ question;
|
+ question;
|
||||||
|
|
||||||
OpenAiChatOptions options =
|
OpenAiChatOptions options =
|
||||||
OpenAiChatOptions.builder().withModel(model).withTemperature(0.2).build();
|
OpenAiChatOptions.builder().model(model).temperature(0.2).build();
|
||||||
|
|
||||||
return new Prompt(
|
return new Prompt(
|
||||||
List.of(new SystemMessage(systemPrompt), new UserMessage(userPrompt)), options);
|
List.of(new SystemMessage(systemPrompt), new UserMessage(userPrompt)), options);
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.springframework.ai.embedding.EmbeddingClient;
|
import org.springframework.ai.embedding.EmbeddingModel;
|
||||||
import org.springframework.ai.embedding.EmbeddingResponse;
|
import org.springframework.ai.embedding.EmbeddingResponse;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@ -29,7 +29,7 @@ public class ChatbotIngestionService {
|
|||||||
private final ChatbotCacheService cacheService;
|
private final ChatbotCacheService cacheService;
|
||||||
private final ChatbotSessionRegistry sessionRegistry;
|
private final ChatbotSessionRegistry sessionRegistry;
|
||||||
private final ChatbotFeatureProperties featureProperties;
|
private final ChatbotFeatureProperties featureProperties;
|
||||||
private final EmbeddingClient embeddingClient;
|
private final EmbeddingModel embeddingModel;
|
||||||
|
|
||||||
public ChatbotSession ingest(ChatbotSessionCreateRequest request) {
|
public ChatbotSession ingest(ChatbotSessionCreateRequest request) {
|
||||||
ChatbotSettings settings = featureProperties.current();
|
ChatbotSettings settings = featureProperties.current();
|
||||||
@ -122,19 +122,24 @@ public class ChatbotIngestionService {
|
|||||||
if (chunkTexts.isEmpty()) {
|
if (chunkTexts.isEmpty()) {
|
||||||
throw new ChatbotException("Unable to split document text into retrievable chunks");
|
throw new ChatbotException("Unable to split document text into retrievable chunks");
|
||||||
}
|
}
|
||||||
EmbeddingResponse response = embeddingClient.embedForResponse(chunkTexts);
|
EmbeddingResponse response = embeddingModel.embedForResponse(chunkTexts);
|
||||||
if (response.getData().size() != chunkTexts.size()) {
|
if (response.getResults().size() != chunkTexts.size()) {
|
||||||
throw new ChatbotException("Mismatch between chunks and embedding results");
|
throw new ChatbotException("Mismatch between chunks and embedding results");
|
||||||
}
|
}
|
||||||
List<ChatbotTextChunk> chunks = new ArrayList<>();
|
List<ChatbotTextChunk> chunks = new ArrayList<>();
|
||||||
for (int i = 0; i < chunkTexts.size(); i++) {
|
for (int i = 0; i < chunkTexts.size(); i++) {
|
||||||
String chunkId = sessionId + ":" + i + ":" + UUID.randomUUID();
|
String chunkId = sessionId + ":" + i + ":" + UUID.randomUUID();
|
||||||
|
float[] embeddingArray = response.getResults().get(i).getOutput();
|
||||||
|
List<Double> embedding = new ArrayList<>(embeddingArray.length);
|
||||||
|
for (float value : embeddingArray) {
|
||||||
|
embedding.add((double) value);
|
||||||
|
}
|
||||||
chunks.add(
|
chunks.add(
|
||||||
ChatbotTextChunk.builder()
|
ChatbotTextChunk.builder()
|
||||||
.id(chunkId)
|
.id(chunkId)
|
||||||
.order(i)
|
.order(i)
|
||||||
.text(chunkTexts.get(i))
|
.text(chunkTexts.get(i))
|
||||||
.embedding(response.getData().get(i).getEmbedding())
|
.embedding(embedding)
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
log.debug(
|
log.debug(
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import java.util.Comparator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.springframework.ai.embedding.EmbeddingClient;
|
import org.springframework.ai.embedding.EmbeddingModel;
|
||||||
import org.springframework.ai.embedding.EmbeddingResponse;
|
import org.springframework.ai.embedding.EmbeddingResponse;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
@ -24,7 +24,7 @@ import stirling.software.proprietary.service.chatbot.exception.ChatbotException;
|
|||||||
public class ChatbotRetrievalService {
|
public class ChatbotRetrievalService {
|
||||||
|
|
||||||
private final ChatbotCacheService cacheService;
|
private final ChatbotCacheService cacheService;
|
||||||
private final EmbeddingClient embeddingClient;
|
private final EmbeddingModel embeddingModel;
|
||||||
|
|
||||||
public List<ChatbotTextChunk> retrieveTopK(
|
public List<ChatbotTextChunk> retrieveTopK(
|
||||||
String sessionId, String query, ChatbotSettings settings) {
|
String sessionId, String query, ChatbotSettings settings) {
|
||||||
@ -54,10 +54,17 @@ public class ChatbotRetrievalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<Double> computeQueryEmbedding(String query) {
|
private List<Double> computeQueryEmbedding(String query) {
|
||||||
EmbeddingResponse response = embeddingClient.embedForResponse(List.of(query));
|
EmbeddingResponse response = embeddingModel.embedForResponse(List.of(query));
|
||||||
return Optional.ofNullable(response.getData().stream().findFirst().orElse(null))
|
float[] embeddingArray =
|
||||||
.map(org.springframework.ai.embedding.Embedding::getEmbedding)
|
Optional.ofNullable(response.getResults().stream().findFirst().orElse(null))
|
||||||
.orElseThrow(() -> new ChatbotException("Failed to compute query embedding"));
|
.map(org.springframework.ai.embedding.Embedding::getOutput)
|
||||||
|
.orElseThrow(
|
||||||
|
() -> new ChatbotException("Failed to compute query embedding"));
|
||||||
|
List<Double> embedding = new ArrayList<>(embeddingArray.length);
|
||||||
|
for (float value : embeddingArray) {
|
||||||
|
embedding.add((double) value);
|
||||||
|
}
|
||||||
|
return embedding;
|
||||||
}
|
}
|
||||||
|
|
||||||
private double cosineSimilarity(List<Double> v1, List<Double> v2) {
|
private double cosineSimilarity(List<Double> v1, List<Double> v2) {
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import com.github.jk1.license.render.*
|
|||||||
|
|
||||||
ext {
|
ext {
|
||||||
springBootVersion = "3.5.6"
|
springBootVersion = "3.5.6"
|
||||||
springAiVersion = "1.0.1"
|
springAiVersion = "1.0.0-M6"
|
||||||
pdfboxVersion = "3.0.5"
|
pdfboxVersion = "3.0.5"
|
||||||
imageioVersion = "3.12.0"
|
imageioVersion = "3.12.0"
|
||||||
lombokVersion = "1.18.42"
|
lombokVersion = "1.18.42"
|
||||||
@ -54,7 +54,6 @@ springBoot {
|
|||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven { url = 'https://build.shibboleth.net/maven/releases' }
|
maven { url = 'https://build.shibboleth.net/maven/releases' }
|
||||||
maven { url = 'https://repo.spring.io/release' }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
@ -96,6 +95,7 @@ subprojects {
|
|||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven { url = 'https://repo.spring.io/release' }
|
maven { url = 'https://repo.spring.io/release' }
|
||||||
|
maven { url 'https://repo.spring.io/milestone' }
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations.configureEach {
|
configurations.configureEach {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user