diff options
Diffstat (limited to 'src/client/views/nodes/chatbot/tools/GetDocsTool.ts')
-rw-r--r-- | src/client/views/nodes/chatbot/tools/GetDocsTool.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/client/views/nodes/chatbot/tools/GetDocsTool.ts b/src/client/views/nodes/chatbot/tools/GetDocsTool.ts new file mode 100644 index 000000000..05482a66e --- /dev/null +++ b/src/client/views/nodes/chatbot/tools/GetDocsTool.ts @@ -0,0 +1,48 @@ +import { Observation } from '../types/types'; +import { ParametersType, ToolInfo } from '../types/tool_types'; +import { BaseTool } from './BaseTool'; +import { DocServer } from '../../../../DocServer'; +import { Docs } from '../../../../documents/Documents'; +import { DocumentView } from '../../DocumentView'; +import { OpenWhere } from '../../OpenWhere'; +import { DocCast } from '../../../../../fields/Types'; + +const getDocsToolParams = [ + { + name: 'title', + type: 'string', + description: 'Title of the collection being created from retrieved documents', + required: true, + }, + { + name: 'document_ids', + type: 'string[]', + description: 'List of document IDs to retrieve', + required: true, + }, +] as const; + +type GetDocsToolParamsType = typeof getDocsToolParams; + +const getDocsToolInfo: ToolInfo<GetDocsToolParamsType> = { + name: 'retrieveDocs', + description: 'Retrieves the contents of all Documents that the user is interacting with in Dash.', + citationRules: 'No citation needed.', + parameterRules: getDocsToolParams, +}; + +export class GetDocsTool extends BaseTool<GetDocsToolParamsType> { + private _docView: DocumentView; + + constructor(docView: DocumentView) { + super(getDocsToolInfo); + this._docView = docView; + } + + async execute(args: ParametersType<GetDocsToolParamsType>): Promise<Observation[]> { + const docs = args.document_ids.map(doc_id => DocCast(DocServer.GetCachedRefField(doc_id))); + const collection = Docs.Create.FreeformDocument(docs, { title: args.title }); + this._docView._props.addDocTab(collection, OpenWhere.addRight); + return [{ type: 'text', text: `Collection created in Dash called ${args.title}` }]; + } +} |