aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/chatbot/tools/CalculateTool.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/chatbot/tools/CalculateTool.ts')
-rw-r--r--src/client/views/nodes/chatbot/tools/CalculateTool.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/client/views/nodes/chatbot/tools/CalculateTool.ts b/src/client/views/nodes/chatbot/tools/CalculateTool.ts
new file mode 100644
index 000000000..ca7223803
--- /dev/null
+++ b/src/client/views/nodes/chatbot/tools/CalculateTool.ts
@@ -0,0 +1,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() }];
+ }
+}