Streaming Client
This commit is contained in:
@@ -23,7 +23,7 @@ import de.extio.lmlib.client.Conversation.Turn;
|
||||
import de.extio.lmlib.client.Conversation.TurnType;
|
||||
import de.extio.lmlib.profile.ModelCategory;
|
||||
|
||||
//@Disabled("This test requires a running Llama server or an Azure subscription (setup azure key in model profile)")
|
||||
@Disabled("This test requires a running Llama server or an Azure subscription (setup azure key in model profile)")
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
|
||||
@SpringBootConfiguration
|
||||
@ComponentScan(basePackages = "de.extio.lmlib")
|
||||
@@ -45,8 +45,8 @@ public class CachedClientTest {
|
||||
|
||||
@Test
|
||||
void cacheCompletion() throws Exception {
|
||||
var completion = this.clientService.getClient(ModelCategory.MEDIUM).completion(
|
||||
ModelCategory.MEDIUM,
|
||||
var completion = this.clientService.getClient(ModelCategory.SMALL).completion(
|
||||
ModelCategory.SMALL,
|
||||
"You are a funny person",
|
||||
"Tell me a cat joke");
|
||||
LOGGER.info(completion.toString());
|
||||
@@ -55,8 +55,8 @@ public class CachedClientTest {
|
||||
final var firstResponse = completion.response();
|
||||
assertFalse(firstResponse.isBlank());
|
||||
|
||||
completion = this.clientService.getClient(ModelCategory.MEDIUM).completion(
|
||||
ModelCategory.MEDIUM,
|
||||
completion = this.clientService.getClient(ModelCategory.SMALL).completion(
|
||||
ModelCategory.SMALL,
|
||||
"You are a funny person",
|
||||
"Tell me a cat joke");
|
||||
LOGGER.info(completion.toString());
|
||||
@@ -64,8 +64,8 @@ public class CachedClientTest {
|
||||
assertEquals(0, completion.statistics().requests());
|
||||
assertEquals(firstResponse, completion.response());
|
||||
|
||||
completion = this.clientService.getClient(ModelCategory.MEDIUM).completion(
|
||||
ModelCategory.MEDIUM,
|
||||
completion = this.clientService.getClient(ModelCategory.SMALL).completion(
|
||||
ModelCategory.SMALL,
|
||||
"You are a funny person",
|
||||
"Tell me a dog joke");
|
||||
LOGGER.info(completion.toString());
|
||||
@@ -100,4 +100,31 @@ public class CachedClientTest {
|
||||
assertEquals(1, completion.statistics().requests());
|
||||
assertNotEquals(firstResponse, completion.response());
|
||||
}
|
||||
|
||||
@Test
|
||||
void cacheStream() throws Exception {
|
||||
final var conversation = Conversation.create("You are an assistant who talks extremely like a pirate", "Hi there, I would like to know the climate in the red sea.");
|
||||
|
||||
final var sb = new java.lang.StringBuilder();
|
||||
var completion = this.clientService.getClient(ModelCategory.MEDIUM).streamConversation(ModelCategory.MEDIUM, conversation, chunk -> {
|
||||
sb.append(chunk);
|
||||
System.out.print(chunk);
|
||||
});
|
||||
assertFalse(completion.statistics().cached());
|
||||
assertEquals(1, completion.statistics().requests());
|
||||
assertTrue(!sb.isEmpty());
|
||||
assertEquals(sb.toString(), completion.response());
|
||||
|
||||
System.out.println();
|
||||
LOGGER.info("### Next request");
|
||||
|
||||
final var sb2 = new java.lang.StringBuilder();
|
||||
completion = this.clientService.getClient(ModelCategory.MEDIUM).streamConversation(ModelCategory.MEDIUM, conversation, chunk -> {
|
||||
sb2.append(chunk);
|
||||
System.out.print(chunk);
|
||||
});
|
||||
assertTrue(completion.statistics().cached());
|
||||
assertEquals(sb.toString(), sb2.toString());
|
||||
assertEquals(sb2.toString(), completion.response());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.extio.lmlib.client.oai;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@@ -40,7 +41,7 @@ public class CompletionClientTest {
|
||||
|
||||
@Autowired
|
||||
private ChatCompletionClient chatCompletionclient;
|
||||
|
||||
|
||||
@Test
|
||||
void completion() throws Exception {
|
||||
final var completion = this.textCompletionClient.completion(
|
||||
@@ -50,7 +51,7 @@ public class CompletionClientTest {
|
||||
|
||||
LOGGER.info(completion.response());
|
||||
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention the color green?", completion.response(), this.textCompletionClient));
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention the color green?", completion.response(), this.chatCompletionclient));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -58,13 +59,28 @@ public class CompletionClientTest {
|
||||
final var conversation = Conversation.create("You are a helpful assistant", "I would like to paint my canvas in a solid color.");
|
||||
conversation.addTurn(new Turn(TurnType.ASSISTANT, "Which color do you want to see?"));
|
||||
conversation.addTurn(new Turn(TurnType.USER, "You choose!"));
|
||||
final var completion = this.textCompletionClient.conversation(ModelCategory.MEDIUM, conversation);
|
||||
final var completion = this.textCompletionClient.conversation(ModelCategory.SMALL, conversation);
|
||||
|
||||
LOGGER.info(completion.response());
|
||||
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention a color?", completion.response(), this.textCompletionClient));
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention a color?", completion.response(), this.chatCompletionclient));
|
||||
}
|
||||
|
||||
@Test
|
||||
void streamTextCompletion() throws Exception {
|
||||
final var conversation = Conversation.create("You are a helpful assistant", "I would like to play a role-playing game with you.");
|
||||
conversation.addTurn(new Turn(TurnType.ASSISTANT, "Which character do you choose?"));
|
||||
conversation.addTurn(new Turn(TurnType.USER, "You choose! But I need you to explain the character attributes to me."));
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final var completion = this.textCompletionClient.streamConversation(ModelCategory.SMALL, conversation, chunk -> {
|
||||
System.out.print(chunk);
|
||||
sb.append(chunk);
|
||||
});
|
||||
|
||||
assertEquals(completion.response(), sb.toString());
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention a role-playing game character?", completion.response(), this.chatCompletionclient));
|
||||
}
|
||||
|
||||
@Test
|
||||
void chatCompletion() throws Exception {
|
||||
final var conversation = Conversation.create("You are a helpful assistant", "I would like to paint my canvas in a solid color.");
|
||||
@@ -74,9 +90,24 @@ public class CompletionClientTest {
|
||||
|
||||
LOGGER.info(completion.response());
|
||||
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention a color?", completion.response(), this.textCompletionClient));
|
||||
assertTrue(Grader.assessScoreBinary("Does the text mention a color?", completion.response(), this.chatCompletionclient));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void streamChatCompletion() throws Exception {
|
||||
final var conversation = Conversation.create("You are a helpful assistant", "I would like to play a game of chess.");
|
||||
conversation.addTurn(new Turn(TurnType.ASSISTANT, "Which opening do you choose?"));
|
||||
conversation.addTurn(new Turn(TurnType.USER, "You choose! But I need you to explain the opening to me."));
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final var completion = this.chatCompletionclient.streamConversation(ModelCategory.MEDIUM, conversation, chunk -> {
|
||||
System.out.print(chunk);
|
||||
sb.append(chunk);
|
||||
});
|
||||
|
||||
assertEquals(completion.response(), sb.toString());
|
||||
assertTrue(Grader.assessScoreBinary("Does the text explain a chess opening?", completion.response(), this.chatCompletionclient));
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
void hugePrompt() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user