Skip to content

Commit 627e685

Browse files
committed
Remove react from Asks
1 parent 6aac2a7 commit 627e685

File tree

3 files changed

+51
-30
lines changed

3 files changed

+51
-30
lines changed

app/backend/pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@
5858
<dependency>
5959
<groupId>com.fasterxml.jackson.core</groupId>
6060
<artifactId>jackson-databind</artifactId>
61+
<scope>compile</scope>
6162
</dependency>
6263
<dependency>
6364
<groupId>com.fasterxml.jackson.core</groupId>
6465
<artifactId>jackson-core</artifactId>
66+
<scope>compile</scope>
6567
</dependency>
6668

6769
<dependency>

app/backend/src/main/java/com/microsoft/openai/samples/rag/ask/approaches/PlainJavaAskApproach.java

Lines changed: 47 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package com.microsoft.openai.samples.rag.ask.approaches;
22

3+
import com.azure.ai.openai.models.ChatChoice;
34
import com.azure.ai.openai.models.ChatCompletions;
5+
import com.azure.core.util.IterableStream;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
47
import com.microsoft.openai.samples.rag.approaches.ContentSource;
58
import com.microsoft.openai.samples.rag.approaches.RAGApproach;
69
import com.microsoft.openai.samples.rag.approaches.RAGOptions;
710
import com.microsoft.openai.samples.rag.approaches.RAGResponse;
811
import com.microsoft.openai.samples.rag.common.ChatGPTUtils;
12+
import com.microsoft.openai.samples.rag.controller.ChatResponse;
913
import com.microsoft.openai.samples.rag.proxy.OpenAIProxy;
1014
import com.microsoft.openai.samples.rag.retrieval.FactsRetrieverProvider;
1115
import com.microsoft.openai.samples.rag.retrieval.Retriever;
1216
import org.slf4j.Logger;
1317
import org.slf4j.LoggerFactory;
1418
import org.springframework.stereotype.Component;
15-
import reactor.core.publisher.Flux;
1619

20+
import java.io.IOException;
1721
import java.io.OutputStream;
1822
import java.util.List;
1923

@@ -28,10 +32,12 @@ public class PlainJavaAskApproach implements RAGApproach<String, RAGResponse> {
2832
private static final Logger LOGGER = LoggerFactory.getLogger(PlainJavaAskApproach.class);
2933
private final OpenAIProxy openAIProxy;
3034
private final FactsRetrieverProvider factsRetrieverProvider;
35+
private final ObjectMapper objectMapper;
3136

32-
public PlainJavaAskApproach(FactsRetrieverProvider factsRetrieverProvider, OpenAIProxy openAIProxy) {
37+
public PlainJavaAskApproach(FactsRetrieverProvider factsRetrieverProvider, OpenAIProxy openAIProxy, ObjectMapper objectMapper) {
3338
this.factsRetrieverProvider = factsRetrieverProvider;
3439
this.openAIProxy = openAIProxy;
40+
this.objectMapper = objectMapper;
3541
}
3642

3743
/**
@@ -78,13 +84,7 @@ public RAGResponse run(String question, RAGOptions options) {
7884
}
7985

8086
@Override
81-
public void runStreaming(String questionOrConversation, RAGOptions options, OutputStream outputStream) {
82-
throw new UnsupportedOperationException("Streaming not supported for PlainJavaAskApproach");
83-
}
84-
/*
85-
@Override
86-
public Flux<RAGResponse> runStreaming(String question, RAGOptions options) {
87-
87+
public void runStreaming(String question, RAGOptions options, OutputStream outputStream) {
8888
//Get instance of retriever based on the retrieval mode: hybryd, text, vectors.
8989
Retriever factsRetriever = factsRetrieverProvider.getFactsRetriever(options);
9090
List<ContentSource> sources = factsRetriever.retrieveFromQuestion(question, options);
@@ -105,23 +105,43 @@ public Flux<RAGResponse> runStreaming(String question, RAGOptions options) {
105105
var groundedChatMessages = answerQuestionChatTemplate.getMessages(question, sources);
106106
var chatCompletionsOptions = ChatGPTUtils.buildDefaultChatCompletionsOptions(groundedChatMessages);
107107

108-
Flux<ChatCompletions> completions = Flux.fromIterable(openAIProxy.getChatCompletionsStream(chatCompletionsOptions));
109-
return completions
110-
.flatMap(completion -> {
111-
LOGGER.info("Chat completion generated with Prompt Tokens[{}], Completions Tokens[{}], Total Tokens[{}]",
112-
completion.getUsage().getPromptTokens(),
113-
completion.getUsage().getCompletionTokens(),
114-
completion.getUsage().getTotalTokens());
115-
116-
return Flux.fromIterable(completion.getChoices())
117-
.map(choice -> new RAGResponse.Builder()
118-
.question(question)
119-
.prompt(ChatGPTUtils.formatAsChatML(groundedChatMessages))
120-
.answer(choice.getMessage().getContent())
121-
.sources(sources)
122-
.build());
123-
});
108+
IterableStream<ChatCompletions> completions = openAIProxy.getChatCompletionsStream(chatCompletionsOptions);
109+
int index = 0;
110+
for (ChatCompletions completion : completions) {
111+
112+
LOGGER.info("Chat completion generated with Prompt Tokens[{}], Completions Tokens[{}], Total Tokens[{}]",
113+
completion.getUsage().getPromptTokens(),
114+
completion.getUsage().getCompletionTokens(),
115+
completion.getUsage().getTotalTokens());
116+
117+
for (ChatChoice choice : completion.getChoices()) {
118+
if (choice.getDelta().getContent() == null) {
119+
continue;
120+
}
121+
122+
RAGResponse ragResponse = new RAGResponse.Builder()
123+
.question(question)
124+
.prompt(ChatGPTUtils.formatAsChatML(groundedChatMessages))
125+
.answer(choice.getMessage().getContent())
126+
.sources(sources)
127+
.build();
128+
129+
ChatResponse response;
130+
if (index == 0) {
131+
response = ChatResponse.buildChatResponse(ragResponse);
132+
} else {
133+
response = ChatResponse.buildChatDeltaResponse(index, ragResponse);
134+
}
135+
index++;
136+
137+
try {
138+
String value = objectMapper.writeValueAsString(response) + "\n";
139+
outputStream.write(value.getBytes());
140+
outputStream.flush();
141+
} catch (IOException e) {
142+
throw new RuntimeException(e);
143+
}
144+
}
145+
}
124146
}
125-
126-
*/
127147
}

app/backend/src/main/java/com/microsoft/openai/samples/rag/chat/approaches/PlainJavaChatApproach.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.io.IOException;
2323
import java.io.OutputStream;
2424
import java.util.List;
25-
import java.util.concurrent.atomic.AtomicInteger;
2625

2726
/**
2827
* Simple chat-read-retrieve-read java implementation, using the Cognitive Search and OpenAI APIs directly.
@@ -94,7 +93,7 @@ public void runStreaming(
9493
var semanticSearchChat = new SemanticSearchChat(questionOrConversation, sources, options.getPromptTemplate(), false, options.isSuggestFollowupQuestions());
9594
var chatCompletionsOptions = ChatGPTUtils.buildDefaultChatCompletionsOptions(semanticSearchChat.getMessages());
9695

97-
AtomicInteger counter = new AtomicInteger(0);
96+
int index = 0;
9897

9998
IterableStream<ChatCompletions> completions = openAIProxy.getChatCompletionsStream(chatCompletionsOptions);
10099

@@ -120,13 +119,13 @@ public void runStreaming(
120119
.sources(sources)
121120
.build();
122121

123-
int index = counter.getAndIncrement();
124122
ChatResponse response;
125123
if (index == 0) {
126124
response = ChatResponse.buildChatResponse(ragResponse);
127125
} else {
128126
response = ChatResponse.buildChatDeltaResponse(index, ragResponse);
129127
}
128+
index++;
130129

131130
try {
132131
String value = objectMapper.writeValueAsString(response) + "\n";

0 commit comments

Comments
 (0)