import { BaseTool } from './BaseTool'; import { Networking } from '../../../../Network'; import { Observation } from '../types/types'; import { ParametersType, ToolInfo } from '../types/tool_types'; const createCSVToolParams = [ { name: 'csvData', type: 'string', description: 'A string of comma-separated values representing the CSV data.', required: true, }, { name: 'filename', type: 'string', description: 'The base name of the CSV file to be created. Should end in ".csv".', required: true, }, ] as const; type CreateCSVToolParamsType = typeof createCSVToolParams; const createCSVToolInfo: ToolInfo = { name: 'createCSV', description: 'Creates a CSV file from the provided CSV string and saves it to the server with a unique identifier, returning the file URL and UUID.', citationRules: 'No citation needed.', parameterRules: createCSVToolParams, }; export class CreateCSVTool extends BaseTool { private _handleCSVResult: (url: string, filename: string, id: string, data: string) => void; constructor(handleCSVResult: (url: string, title: string, id: string, data: string) => void) { super(createCSVToolInfo); this._handleCSVResult = handleCSVResult; } async execute(args: ParametersType): Promise { try { console.log('Creating CSV file:', args.filename, ' with data:', args.csvData); const { fileUrl, id } = (await Networking.PostToServer('/createCSV', { filename: args.filename, data: args.csvData, })) as { fileUrl: string; id: string }; this._handleCSVResult(fileUrl, args.filename, id, args.csvData); return [ { type: 'text', text: `File successfully created: ${fileUrl}. \nNow a CSV file with this data and the name ${args.filename} is available as a user doc.`, }, ]; } catch (error) { console.error('Error creating CSV file:', error); throw new Error('Failed to create CSV file.'); } } }