diff --git a/.changeset/wild-bananas-sip.md b/.changeset/wild-bananas-sip.md new file mode 100644 index 0000000000..59b744445c --- /dev/null +++ b/.changeset/wild-bananas-sip.md @@ -0,0 +1,6 @@ +--- +"@llamaindex/workflow": patch +"@llamaindex/anthropic": patch +--- + +fix: message delta visibility for anthropic diff --git a/packages/providers/anthropic/src/llm.ts b/packages/providers/anthropic/src/llm.ts index c01904c329..6b953cb58a 100644 --- a/packages/providers/anthropic/src/llm.ts +++ b/packages/providers/anthropic/src/llm.ts @@ -604,6 +604,15 @@ export class Anthropic extends ToolCallLLM< ? part.delta.signature : undefined; + if (part.type === "message_delta") { + yield { + raw: part, + delta: "", + options: {}, + }; + continue; + } + if ( part.type === "content_block_start" && part.content_block.type === "tool_use" diff --git a/packages/workflow/src/agent/agent-workflow.ts b/packages/workflow/src/agent/agent-workflow.ts index 4fe66418b6..83698767f3 100644 --- a/packages/workflow/src/agent/agent-workflow.ts +++ b/packages/workflow/src/agent/agent-workflow.ts @@ -64,6 +64,7 @@ export type AgentResultData = { message: ChatMessage; state?: AgentWorkflowState | undefined; object?: O | undefined; + raw?: unknown; }; export const stopAgentEvent = workflowEvent( { @@ -88,6 +89,7 @@ export type AgentStep = { agentName: string; response: ChatMessage; toolCalls: AgentToolCall[]; + raw: unknown; }; export const agentStepEvent = workflowEvent(); @@ -426,6 +428,7 @@ export class AgentWorkflow implements Workflow { agentName: agent.name, response: output.response, toolCalls: output.toolCalls, + raw: output.raw, }), ); @@ -436,7 +439,7 @@ export class AgentWorkflow implements Workflow { context: StatefulContext, event: WorkflowEventData, ) => { - const { agentName, response, toolCalls } = event.data; + const { agentName, response, toolCalls, raw } = event.data; const agent = this.agents.get(agentName); if (!agent) { throw new Error( @@ -453,7 +456,7 @@ export class AgentWorkflow implements Workflow { const agentOutput = { response, toolCalls: [], - raw: response, + raw, currentAgentName: agentName, }; const content = await agent.finalize(context.state, agentOutput); @@ -472,6 +475,7 @@ export class AgentWorkflow implements Workflow { result: content.response.content, state: context.state, object, + raw: content.raw ?? raw, }); } @@ -594,6 +598,7 @@ export class AgentWorkflow implements Workflow { message: responseMessage, result: output, state: context.state, + raw, }); } diff --git a/packages/workflow/src/agent/function-agent.ts b/packages/workflow/src/agent/function-agent.ts index d7fd9e1073..c5de7fab40 100644 --- a/packages/workflow/src/agent/function-agent.ts +++ b/packages/workflow/src/agent/function-agent.ts @@ -197,6 +197,7 @@ export class FunctionAgent implements BaseWorkflowAgent { let lastChunk: ChatResponseChunk | undefined; const toolCalls: Map = new Map(); for await (const chunk of responseStream) { + lastChunk = chunk; response += chunk.delta; ctx.sendEvent( agentStreamEvent.with({