aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/chatbot/tools/GetDocsTool.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/chatbot/tools/GetDocsTool.ts')
-rw-r--r--src/client/views/nodes/chatbot/tools/GetDocsTool.ts48
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}` }];
+ }
+}