import { BaseTool } from './BaseTool'; import { Networking } from '../../../../Network'; export class CreateCSVTool extends BaseTool<{ csvData: string; filename: string }> { private _handleCSVResult: (url: string, filename: string, id: string, data: string) => void; constructor(handleCSVResult: (url: string, title: string, id: string, data: string) => void) { super( 'createCSV', 'Creates a CSV file from raw CSV data and saves it to the server', { type: 'object', properties: { csvData: { type: 'string', description: 'A string of comma-separated values representing the CSV data.', }, filename: { type: 'string', description: 'The base name of the CSV file to be created. Should end in ".csv".', }, }, required: ['csvData', 'filename'], }, 'Provide a CSV string and a filename to create a CSV file.', '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.' ); this._handleCSVResult = handleCSVResult; } async execute(args: { csvData: string; filename: string }): Promise { try { console.log('Creating CSV file:', args.filename, ' with data:', args.csvData); // Post the raw CSV data to the createCSV endpoint on the server const { fileUrl, id } = await Networking.PostToServer('/createCSV', { filename: args.filename, data: args.csvData }); // Handle the result by invoking the callback 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.'); } } }