import { Agent } from '@astack-tech/components';
import type { AgentMessage, ModelProvider } from '@astack-tech/components';
import { createTool } from '@astack-tech/tools';
const multiply = createTool(
'multiply',
'Multiply two numbers.',
args => Number(args['a']) * Number(args['b']),
{
type: 'object',
properties: { a: { type: 'number' }, b: { type: 'number' } },
required: ['a', 'b'],
}
);
const ruleModel: ModelProvider = {
chatCompletion(messages: AgentMessage[]): Promise<AgentMessage> {
const last = messages.at(-1)?.content ?? '';
const result = /Result: (.+)$/.exec(last)?.[1];
if (result !== undefined) {
return Promise.resolve({ role: 'assistant', content: `The answer is ${result}.` });
}
const [a = 0, b = 0] = (last.match(/\d+/g) ?? []).map(Number);
return Promise.resolve({
role: 'assistant',
content: '',
tool_calls: [
{
id: 'call-1',
type: 'function',
function: { name: 'multiply', arguments: JSON.stringify({ a, b }) },
},
],
});
},
};
const agent = new Agent({ model: ruleModel, tools: [multiply] });
const output = await agent.run('What is 37 times 43?');
console.log(output.message);
console.log(output.toolCalls);