aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/chatbot/tools/CalculateTool.ts
blob: ca7223803127bda763e0ff51cfdacf2c8ef9ce04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { Observation } from '../types/types';
import { ParametersType, ToolInfo } from '../types/tool_types';
import { BaseTool } from './BaseTool';

const calculateToolParams = [
    {
        name: 'expression',
        type: 'string',
        description: 'The mathematical expression to evaluate',
        required: true,
    },
] as const;

type CalculateToolParamsType = typeof calculateToolParams;

const calculateToolInfo: ToolInfo<CalculateToolParamsType> = {
    name: 'calculate',
    citationRules: 'No citation needed.',
    parameterRules: calculateToolParams,
    description: 'Runs a calculation and returns the number - uses JavaScript so be sure to use floating point syntax if necessary',
};

export class CalculateTool extends BaseTool<CalculateToolParamsType> {
    constructor() {
        super(calculateToolInfo);
    }

    async execute(args: ParametersType<CalculateToolParamsType>): Promise<Observation[]> {
        // TypeScript will ensure 'args.expression' is a string based on the param config
        const result = eval(args.expression); // Be cautious with eval(), as it can be dangerous. Consider using a safer alternative.
        return [{ type: 'text', text: result.toString() }];
    }
}