import { v4 as uuidv4 } from 'uuid'; import { BaseTool } from './BaseTool'; import { Observation } from '../types/types'; import { ParametersType } from '../types/tool_types'; import { DocumentOptions } from '../../../../documents/Documents'; import { RTFCast, StrCast } from '../../../../../fields/Types'; const docInstructions = { text: 'Provide text content as string, not dictionary', flashcard: 'A string dictionary mapping front to back of flashcard that the document will display. Follow this example: data: {"What is photosynthesis?":"The process by which g…t and absorb water and nutrients from the soil."}', image: 'Provide a real image url', web: 'Only provide real url to be displayed, not text content', } as const; // have recursive structure // get array of all documents that each have their options // (if its a collection) const createDocToolParams = [ { name: 'data', type: 'string', description: docInstructions, required: true, }, { name: 'doc_type', type: 'string', description: 'The type of the document', required: true, }, { name: 'title', type: 'string', description: 'The title of the document', required: true, }, { name: 'background_color', type: 'string', description: 'The background color of the document as a hex string', required: false, }, { name: 'font_color', type: 'string', description: 'The font color of the document as a hex string', required: false, }, { name: 'width', type: 'number', description: 'The height of the document as a number', required: true, }, { name: 'height', type: 'number', description: 'The height of the document as a number', required: true, }, ] as const; const createListDocToolParams = [ { name: 'docs', type: 'string', // array of stringified documents description: 'docs is an array that contains stringified JSON objects representing different document types. Each item in the array is a stringified version of this: ' + createDocToolParams + 'Each document should be individually serialized (using JSON.stringify or equivalent) so that it fits within string[]. An example is ["{"data":"Plants are living organisms that belong to the kingdom Plantae.","doc_type":"text","title":"Introduction to Plants","width":300,"height":300}", "{"data":"Photosynthesis is the process by which plants make food.","type":"text","title":"Photosynthesis","width":300,"height":300}"]', required: true, }, ] as const; type CreateListDocToolParamsType = typeof createListDocToolParams; // type CreateDocToolParamsType = typeof createDocToolParams; export class CreateDocTool extends BaseTool { private _addLinkedDoc: (doc_type: string, data: string, options: DocumentOptions, id: string) => void; constructor(addLinkedDoc: (doc_type: string, data: string, options: DocumentOptions, id: string) => void) { super( 'createDoc', 'Creates one or more documents that best fit users request', createListDocToolParams, 'Modify the data parameter and include title (and optionally color) for the document.', 'Creates one or more documents represented by an array of strings with the provided content based on the instructions ' + docInstructions + 'Use if the user wants to create something that aligns with a document type in dash like a flashcard, flashcard deck/stack, or textbox or text document of some sort. Can use after a search or other tool to save information.' ); this._addLinkedDoc = addLinkedDoc; } async execute(args: ParametersType): Promise { try { console.log('EXE' + args.docs); const parsedDoc = JSON.parse(args.docs); console.log('parsed' + parsedDoc); parsedDoc.forEach((firstDoc: string) => { console.log('THIS DOC' + firstDoc); console.log(typeof firstDoc); const doc = JSON.parse(firstDoc); console.log('NEW DOC' + doc); console.log('TYPE' + doc['doc_type']); this._addLinkedDoc(doc['doc_type'], doc['data'], { title: doc['title'], backgroundColor: doc['background_color'], text_fontColor: doc['font_color'] }, uuidv4()); }); // this._addLinkedDoc(args.doc_type, args.data, { title: args.title, backgroundColor: args.background_color, text_fontColor: args.font_color }, uuidv4()); return [{ type: 'text', text: 'Created document.' }]; } catch (error) { return [{ type: 'text', text: 'Error creating text document, ' + error }]; } } }