runChat method
Future<void>
runChat(
- List<ChatMessage> messages, {
- int recursiveLimit = 10,
})
Implementation
Future<void> runChat(
List<ChatMessage> messages, {
int recursiveLimit = 10,
}) async {
if (recursiveLimit < 0) {
error("Recursive limit reached, stopping execution.");
return;
}
final loader =
Spinner(
icon: '🧠',
leftPrompt: (done) => '',
rightPrompt: (done) => done ? 'Done' : 'Thinking...',
).interact();
List<AgentTool> tools = [ToolRunCommands()];
ChatResult output = await config.connector
.createChatModel([...tools.map((i) => i.spec)])
.invoke(
PromptValue.chat([ChatMessage.system(systemPrompt()), ...messages]),
);
loader.done();
if (output.output.toolCalls.isNotEmpty) {
List<ChatMessage> resps = [output.output];
for (AIChatMessageToolCall tc in output.output.toolCalls) {
String response = "Unknown tool: ${tc.name}";
AgentTool? t = tools.select((i) => i.name == tc.name);
if (t != null) {
response = await t.call(this, tc);
}
resps.add(ChatMessage.tool(toolCallId: tc.id, content: response));
}
await runChat([
...messages,
...resps,
], recursiveLimit: recursiveLimit - 1);
} else {
print("&2[Agent]: &a${output.outputAsString}".chatColor);
}
}