33 lines
970 B
TypeScript
33 lines
970 B
TypeScript
import { addMessages, entrypoint } from "@langchain/langgraph";
|
|
import { type BaseMessage } from "@langchain/core/messages";
|
|
import { HumanMessage } from "@langchain/core/messages";
|
|
import { modelNode } from "./nodes/model";
|
|
import { toolNode } from "./nodes/tool";
|
|
import 'dotenv/config';
|
|
|
|
const agent = entrypoint({ name: "agent" }, async (messages: BaseMessage[]) => {
|
|
let modelResponse = await modelNode(messages);
|
|
|
|
while (true) {
|
|
if (!modelResponse.tool_calls?.length) {
|
|
break;
|
|
}
|
|
|
|
// Execute tools
|
|
const toolResults = await Promise.all(
|
|
modelResponse.tool_calls.map((toolCall) => toolNode(toolCall))
|
|
);
|
|
messages = addMessages(messages, [modelResponse, ...toolResults]);
|
|
modelResponse = await modelNode(messages);
|
|
}
|
|
|
|
return messages;
|
|
});
|
|
|
|
export {agent}
|
|
|
|
const result = await agent.invoke([new HumanMessage("Add 3 and 4.")]);
|
|
|
|
for (const message of result) {
|
|
console.log(`[${message.getType()}]: ${message.text}`);
|
|
} |