diff --git a/.changeset/lovely-emus-camp.md b/.changeset/lovely-emus-camp.md new file mode 100644 index 0000000000000000000000000000000000000000..28d3cfbeb1b6444a8d6ba8ed616ff1a07aea8250 --- /dev/null +++ b/.changeset/lovely-emus-camp.md @@ -0,0 +1,5 @@ +--- +"llamaindex": patch +--- + +fix: agents to use chat history diff --git a/packages/core/src/agent/base.ts b/packages/core/src/agent/base.ts index a5e18df06c5923528f90396113b3b5ff6911f35a..5775c8d33d2439c00c1f47536ae1149120f36a2f 100644 --- a/packages/core/src/agent/base.ts +++ b/packages/core/src/agent/base.ts @@ -1,4 +1,5 @@ import { ReadableStream, TransformStream, randomUUID } from "@llamaindex/env"; +import { ChatHistory } from "../ChatHistory.js"; import { EngineResponse } from "../EngineResponse.js"; import { Settings } from "../Settings.js"; import { @@ -266,8 +267,9 @@ export abstract class AgentRunner< message: MessageContent, stream: boolean = false, verbose: boolean | undefined = undefined, + chatHistory?: ChatMessage<AdditionalMessageOptions>[], ) { - const initialMessages = [...this.#chatHistory]; + const initialMessages = [...(chatHistory ?? this.#chatHistory)]; if (this.#systemPrompt !== null) { const systemPrompt = this.#systemPrompt; const alreadyHasSystemPrompt = initialMessages @@ -309,7 +311,22 @@ export abstract class AgentRunner< async chat( params: ChatEngineParamsNonStreaming | ChatEngineParamsStreaming, ): Promise<EngineResponse | ReadableStream<EngineResponse>> { - const task = this.createTask(params.message, !!params.stream); + let chatHistory: ChatMessage<AdditionalMessageOptions>[] | undefined = []; + + if (params.chatHistory instanceof ChatHistory) { + chatHistory = params.chatHistory + .messages as ChatMessage<AdditionalMessageOptions>[]; + } else { + chatHistory = + params.chatHistory as ChatMessage<AdditionalMessageOptions>[]; + } + + const task = this.createTask( + params.message, + !!params.stream, + false, + chatHistory, + ); for await (const stepOutput of task) { // update chat history for each round this.#chatHistory = [...stepOutput.taskStep.context.store.messages];