feat: Implement reasoning streaming and chunk handling in Csv and Json agent response handlers
This commit is contained in:
@@ -6,11 +6,13 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import de.extio.lmlib.agent.AgentContext;
|
||||
import de.extio.lmlib.client.Chunk;
|
||||
import de.extio.lmlib.client.Completion;
|
||||
import de.extio.lmlib.client.Conversation;
|
||||
|
||||
@@ -319,4 +321,51 @@ public class CsvAgentResponseHandlerTest {
|
||||
new CsvAgentResponseHandler(List.of(), "prefix_");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReasoningStreaming() {
|
||||
final CsvAgentResponseHandler handler = new CsvAgentResponseHandler(List.of("a", "b"), "stream");
|
||||
final AgentContext context = new AgentContext();
|
||||
context.setConversation(Conversation.create("test"));
|
||||
context.setStringValue("stream_reasoning", "stale");
|
||||
|
||||
handler.beforeStream(context);
|
||||
assertEquals(null, context.getStringValue("stream_reasoning"));
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk(null, "first"), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
|
||||
assertFalse(handler.handleChunk(new Chunk("1;2", null), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk(null, " second"), context));
|
||||
assertEquals("first second", context.getStringValue("stream_reasoning"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAfterChunkUpdateCallback() {
|
||||
final List<String> callbackReasoning = new ArrayList<>();
|
||||
final List<String> callbackContent = new ArrayList<>();
|
||||
final CsvAgentResponseHandler handler = new CsvAgentResponseHandler(List.of("a", "b"), "stream", ";",
|
||||
(context, chunk) -> {
|
||||
callbackReasoning.add(context.getStringValue("stream_reasoning"));
|
||||
callbackContent.add(chunk.content());
|
||||
});
|
||||
final AgentContext context = new AgentContext();
|
||||
context.setConversation(Conversation.create("test"));
|
||||
|
||||
handler.beforeStream(context);
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk(null, "first"), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
assertEquals(1, callbackReasoning.size());
|
||||
assertEquals("first", callbackReasoning.getFirst());
|
||||
assertEquals(null, callbackContent.getFirst());
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk("1;2", null), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
assertEquals(2, callbackReasoning.size());
|
||||
assertEquals("first", callbackReasoning.get(1));
|
||||
assertEquals("1;2", callbackContent.get(1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import de.extio.lmlib.agent.AgentContext;
|
||||
import de.extio.lmlib.client.Chunk;
|
||||
import de.extio.lmlib.client.Completion;
|
||||
import de.extio.lmlib.client.Conversation;
|
||||
|
||||
@@ -365,5 +367,52 @@ public class JsonAgentResponseHandlerTest {
|
||||
assertTrue(result);
|
||||
assertTrue(context.getContext().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReasoningStreaming() {
|
||||
final JsonAgentResponseHandler handler = new JsonAgentResponseHandler("stream");
|
||||
final AgentContext context = new AgentContext();
|
||||
context.setConversation(Conversation.create("test"));
|
||||
context.setStringValue("stream_reasoning", "stale");
|
||||
|
||||
handler.beforeStream(context);
|
||||
assertEquals(null, context.getStringValue("stream_reasoning"));
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk(null, "first"), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
|
||||
assertFalse(handler.handleChunk(new Chunk("{\"field\":\"value\"}", null), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk(null, " second"), context));
|
||||
assertEquals("first second", context.getStringValue("stream_reasoning"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAfterChunkUpdateCallback() {
|
||||
final List<String> callbackReasoning = new ArrayList<>();
|
||||
final List<String> callbackContent = new ArrayList<>();
|
||||
final JsonAgentResponseHandler handler = new JsonAgentResponseHandler("stream",
|
||||
(context, chunk) -> {
|
||||
callbackReasoning.add(context.getStringValue("stream_reasoning"));
|
||||
callbackContent.add(chunk.content());
|
||||
});
|
||||
final AgentContext context = new AgentContext();
|
||||
context.setConversation(Conversation.create("test"));
|
||||
|
||||
handler.beforeStream(context);
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk(null, "first"), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
assertEquals(1, callbackReasoning.size());
|
||||
assertEquals("first", callbackReasoning.getFirst());
|
||||
assertEquals(null, callbackContent.getFirst());
|
||||
|
||||
assertTrue(handler.handleChunk(new Chunk("{\"field\":\"value\"}", null), context));
|
||||
assertEquals("first", context.getStringValue("stream_reasoning"));
|
||||
assertEquals(2, callbackReasoning.size());
|
||||
assertEquals("first", callbackReasoning.get(1));
|
||||
assertEquals("{\"field\":\"value\"}", callbackContent.get(1));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user