From d3b635b1934118199b53fa37e8aa6a3e0c2169bc Mon Sep 17 00:00:00 2001 From: Parham Saidi <parham@parha.me> Date: Mon, 17 Jun 2024 19:33:57 +0200 Subject: [PATCH] fix: agents to use chat history (#933) --- .changeset/lovely-emus-camp.md | 5 +++++ packages/core/src/agent/base.ts | 21 +++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 .changeset/lovely-emus-camp.md diff --git a/.changeset/lovely-emus-camp.md b/.changeset/lovely-emus-camp.md new file mode 100644 index 000000000..28d3cfbeb --- /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 a5e18df06..5775c8d33 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]; -- GitLab