flip done tool stuff

This commit is contained in:
dal 2025-08-15 14:48:18 -06:00
parent 940ab3f59f
commit 641765b430
No known key found for this signature in database
GPG Key ID: 16F4B0E1E9F61122
7 changed files with 47 additions and 47 deletions

View File

@ -14,7 +14,7 @@ import {
// Using keyof with the inferred type ensures we're using the actual schema keys // Using keyof with the inferred type ensures we're using the actual schema keys
const FINAL_RESPONSE_KEY = 'finalResponse' as const satisfies keyof DoneToolInput; const FINAL_RESPONSE_KEY = 'finalResponse' as const satisfies keyof DoneToolInput;
export function createDoneToolDelta(doneToolState: DoneToolState, context: DoneToolContext) { export function createDoneToolDelta(context: DoneToolContext, doneToolState: DoneToolState) {
return async function doneToolDelta( return async function doneToolDelta(
options: { inputTextDelta: string } & ToolCallOptions options: { inputTextDelta: string } & ToolCallOptions
): Promise<void> { ): Promise<void> {

View File

@ -30,7 +30,7 @@ async function processDone(toolCallId: string, messageId: string): Promise<DoneT
} }
// Factory function that creates the execute function with proper context typing // Factory function that creates the execute function with proper context typing
export function createDoneToolExecute(state: DoneToolState, context: DoneToolContext) { export function createDoneToolExecute(context: DoneToolContext, state: DoneToolState) {
return wrapTraced( return wrapTraced(
async (_input: DoneToolInput): Promise<DoneToolOutput> => { async (_input: DoneToolInput): Promise<DoneToolOutput> => {
if (!state.toolCallId) { if (!state.toolCallId) {

View File

@ -6,7 +6,7 @@ import {
createDoneToolResponseMessage, createDoneToolResponseMessage,
} from './helpers/done-tool-transform-helper'; } from './helpers/done-tool-transform-helper';
export function createDoneToolFinish(doneToolState: DoneToolState, context: DoneToolContext) { export function createDoneToolFinish(context: DoneToolContext, doneToolState: DoneToolState) {
return async function doneToolFinish( return async function doneToolFinish(
options: { input: DoneToolInput } & ToolCallOptions options: { input: DoneToolInput } & ToolCallOptions
): Promise<void> { ): Promise<void> {

View File

@ -12,7 +12,7 @@ import {
} from './helpers/done-tool-transform-helper'; } from './helpers/done-tool-transform-helper';
// Factory function that creates a type-safe callback for the specific agent context // Factory function that creates a type-safe callback for the specific agent context
export function createDoneToolStart(doneToolState: DoneToolState, context: DoneToolContext) { export function createDoneToolStart(context: DoneToolContext, doneToolState: DoneToolState) {
return async function doneToolStart(options: ToolCallOptions): Promise<void> { return async function doneToolStart(options: ToolCallOptions): Promise<void> {
doneToolState.toolCallId = options.toolCallId; doneToolState.toolCallId = options.toolCallId;

View File

@ -23,7 +23,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const options: ToolCallOptions = { const options: ToolCallOptions = {
toolCallId: 'tool-call-123', toolCallId: 'tool-call-123',
messages: [], messages: [],
@ -41,7 +41,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const messages: ModelMessage[] = [ const messages: ModelMessage[] = [
{ {
@ -97,7 +97,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const options: ToolCallOptions = { const options: ToolCallOptions = {
toolCallId: 'tool-call-456', toolCallId: 'tool-call-456',
messages: [], messages: [],
@ -119,7 +119,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, contextWithoutMessageId); const startHandler = createDoneToolStart(contextWithoutMessageId, state);
const options: ToolCallOptions = { const options: ToolCallOptions = {
toolCallId: 'tool-call-789', toolCallId: 'tool-call-789',
messages: [], messages: [],
@ -138,7 +138,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
await deltaHandler({ await deltaHandler({
inputTextDelta: '{"final_', inputTextDelta: '{"final_',
@ -164,7 +164,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
await deltaHandler({ await deltaHandler({
inputTextDelta: '{"final_response": "This is a partial response that is still being', inputTextDelta: '{"final_response": "This is a partial response that is still being',
@ -183,7 +183,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
await deltaHandler({ await deltaHandler({
inputTextDelta: '{"final_response": "Complete response message"}', inputTextDelta: '{"final_response": "Complete response message"}',
@ -202,7 +202,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const markdownContent = `## Summary const markdownContent = `## Summary
@ -227,7 +227,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
await deltaHandler({ await deltaHandler({
inputTextDelta: '{"final_response": "Line 1\\nLine 2\\n\\"Quoted text\\""}', inputTextDelta: '{"final_response": "Line 1\\nLine 2\\n\\"Quoted text\\""}',
@ -245,7 +245,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
await deltaHandler({ await deltaHandler({
inputTextDelta: '{"other_field": "value"}', inputTextDelta: '{"other_field": "value"}',
@ -264,7 +264,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
await deltaHandler({ await deltaHandler({
inputTextDelta: '{"final_response": ""}', inputTextDelta: '{"final_response": ""}',
@ -285,7 +285,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: 'Final message', finalResponse: 'Final message',
}; };
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
const input: DoneToolInput = { const input: DoneToolInput = {
finalResponse: 'This is the final response message', finalResponse: 'This is the final response message',
@ -307,7 +307,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
const input: DoneToolInput = { const input: DoneToolInput = {
finalResponse: 'Response without prior start', finalResponse: 'Response without prior start',
@ -329,7 +329,7 @@ describe('Done Tool Streaming Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
const markdownResponse = ` const markdownResponse = `
## Analysis Complete ## Analysis Complete
@ -378,8 +378,8 @@ The following items were processed:
finalResponse: undefined, finalResponse: undefined,
}; };
const handler1 = createDoneToolStart(state, validContext); const handler1 = createDoneToolStart(validContext, state);
const handler2 = createDoneToolStart(state, extendedContext); const handler2 = createDoneToolStart(extendedContext, state);
expect(handler1).toBeDefined(); expect(handler1).toBeDefined();
expect(handler2).toBeDefined(); expect(handler2).toBeDefined();
@ -392,9 +392,9 @@ The following items were processed:
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
await startHandler({ toolCallId: 'test-123', messages: [] }); await startHandler({ toolCallId: 'test-123', messages: [] });
expect(state.toolCallId).toBeTypeOf('string'); expect(state.toolCallId).toBeTypeOf('string');
@ -423,9 +423,9 @@ The following items were processed:
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
const toolCallId = 'streaming-test-123'; const toolCallId = 'streaming-test-123';
@ -471,7 +471,7 @@ The following items were processed:
finalResponse: undefined, finalResponse: undefined,
}; };
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const chunks = [ const chunks = [
'{"final_response": "', '{"final_response": "',

View File

@ -49,7 +49,7 @@ describe('Done Tool Integration Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await startHandler({ toolCallId, messages: [] }); await startHandler({ toolCallId, messages: [] });
@ -71,8 +71,8 @@ describe('Done Tool Integration Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await startHandler({ toolCallId, messages: [] }); await startHandler({ toolCallId, messages: [] });
@ -99,8 +99,8 @@ describe('Done Tool Integration Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await startHandler({ toolCallId, messages: [] }); await startHandler({ toolCallId, messages: [] });
@ -129,9 +129,9 @@ describe('Done Tool Integration Tests', () => {
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const finishHandler = createDoneToolFinish(state, mockContext); const finishHandler = createDoneToolFinish(mockContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await startHandler({ toolCallId, messages: [] }); await startHandler({ toolCallId, messages: [] });
@ -194,11 +194,11 @@ All operations completed successfully.`;
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler1 = createDoneToolStart(state1, mockContext); const startHandler1 = createDoneToolStart(mockContext, state1);
const finishHandler1 = createDoneToolFinish(state1, mockContext); const finishHandler1 = createDoneToolFinish(mockContext, state1);
const startHandler2 = createDoneToolStart(state2, mockContext); const startHandler2 = createDoneToolStart(mockContext, state2);
const finishHandler2 = createDoneToolFinish(state2, mockContext); const finishHandler2 = createDoneToolFinish(mockContext, state2);
const toolCallId1 = randomUUID(); const toolCallId1 = randomUUID();
const toolCallId2 = randomUUID(); const toolCallId2 = randomUUID();
@ -242,7 +242,7 @@ All operations completed successfully.`;
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, invalidContext); const startHandler = createDoneToolStart(invalidContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await expect(startHandler({ toolCallId, messages: [] })).resolves.not.toThrow(); await expect(startHandler({ toolCallId, messages: [] })).resolves.not.toThrow();
@ -261,7 +261,7 @@ All operations completed successfully.`;
workflowStartTime: Date.now(), workflowStartTime: Date.now(),
}; };
const deltaHandler = createDoneToolDelta(state, invalidContext); const deltaHandler = createDoneToolDelta(invalidContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await expect( await expect(
@ -284,7 +284,7 @@ All operations completed successfully.`;
finalResponse: undefined, finalResponse: undefined,
}; };
const startHandler = createDoneToolStart(state, mockContext); const startHandler = createDoneToolStart(mockContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await startHandler({ toolCallId, messages: [] }); await startHandler({ toolCallId, messages: [] });
@ -328,7 +328,7 @@ All operations completed successfully.`;
], ],
}); });
const deltaHandler = createDoneToolDelta(state, mockContext); const deltaHandler = createDoneToolDelta(mockContext, state);
const toolCallId = randomUUID(); const toolCallId = randomUUID();
await deltaHandler({ await deltaHandler({

View File

@ -53,10 +53,10 @@ export function createDoneTool(context: DoneToolContext) {
finalResponse: undefined, finalResponse: undefined,
}; };
const execute = createDoneToolExecute(state, context); const execute = createDoneToolExecute(context, state);
const onInputStart = createDoneToolStart(state, context); const onInputStart = createDoneToolStart(context, state);
const onInputDelta = createDoneToolDelta(state, context); const onInputDelta = createDoneToolDelta(context, state);
const onInputAvailable = createDoneToolFinish(state, context); const onInputAvailable = createDoneToolFinish(context, state);
return tool({ return tool({
description: description: