aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/chatbot/agentsystem
diff options
context:
space:
mode:
authorJoanne <zehan_ding@brown.edu>2025-05-12 20:53:12 -0400
committerJoanne <zehan_ding@brown.edu>2025-05-12 20:53:12 -0400
commit4997c3de20a381eac30224a7a550afa66174f07d (patch)
tree08ddeb35bd4bcbcc2b3b91591dd191495e7e9fb0 /src/client/views/nodes/chatbot/agentsystem
parente058d227ccbce47c86b0fa558adb01dfccaf4d60 (diff)
added tutorial tool, still need to integrate with metadatatool
Diffstat (limited to 'src/client/views/nodes/chatbot/agentsystem')
-rw-r--r--src/client/views/nodes/chatbot/agentsystem/Agent.ts32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/client/views/nodes/chatbot/agentsystem/Agent.ts b/src/client/views/nodes/chatbot/agentsystem/Agent.ts
index e93fb87db..8075cab5f 100644
--- a/src/client/views/nodes/chatbot/agentsystem/Agent.ts
+++ b/src/client/views/nodes/chatbot/agentsystem/Agent.ts
@@ -7,24 +7,21 @@ import { AnswerParser } from '../response_parsers/AnswerParser';
import { StreamedAnswerParser } from '../response_parsers/StreamedAnswerParser';
import { BaseTool } from '../tools/BaseTool';
import { CalculateTool } from '../tools/CalculateTool';
-//import { CreateAnyDocumentTool } from '../tools/CreateAnyDocTool';
import { CreateDocTool } from '../tools/CreateDocumentTool';
import { DataAnalysisTool } from '../tools/DataAnalysisTool';
-import { ImageCreationTool } from '../tools/ImageCreationTool';
import { NoTool } from '../tools/NoTool';
import { SearchTool } from '../tools/SearchTool';
import { Parameter, ParametersType, TypeMap } from '../types/tool_types';
import { AgentMessage, ASSISTANT_ROLE, AssistantMessage, Observation, PROCESSING_TYPE, ProcessingInfo, TEXT_TYPE } from '../types/types';
import { Vectorstore } from '../vectorstore/Vectorstore';
import { getReactPrompt } from './prompts';
-//import { DictionaryTool } from '../tools/DictionaryTool';
import { ChatCompletionMessageParam } from 'openai/resources';
import { Doc } from '../../../../../fields/Doc';
import { parsedDoc } from '../chatboxcomponents/ChatBox';
import { WebsiteInfoScraperTool } from '../tools/WebsiteInfoScraperTool';
import { Upload } from '../../../../../server/SharedMediaTypes';
import { RAGTool } from '../tools/RAGTool';
-//import { CreateTextDocTool } from '../tools/CreateTextDocumentTool';
+import { GPTTutorialTool } from '../tools/TutorialTool';
dotenv.config();
@@ -47,6 +44,7 @@ export class Agent {
private processingInfo: ProcessingInfo[] = [];
private streamedAnswerParser: StreamedAnswerParser = new StreamedAnswerParser();
private tools: Record<string, BaseTool<ReadonlyArray<Parameter>>>;
+ private Document: Doc;
/**
* The constructor initializes the agent with the vector store and toolset, and sets up the OpenAI client.
@@ -65,8 +63,8 @@ export class Agent {
addLinkedUrlDoc: (url: string, id: string) => void,
createImage: (result: Upload.FileInformation & Upload.InspectionResults, options: DocumentOptions) => void,
addLinkedDoc: (doc: parsedDoc) => Doc | undefined,
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- createCSVInDash: (url: string, title: string, id: string, data: string) => void
+ createCSVInDash: (url: string, title: string, id: string, data: string) => void,
+ document: Doc
) {
// Initialize OpenAI client with API key from environment
this.client = new OpenAI({ apiKey: process.env.OPENAI_KEY, dangerouslyAllowBrowser: true });
@@ -74,6 +72,7 @@ export class Agent {
this._history = history;
this._summaries = summaries;
this._csvData = csvData;
+ this.Document = document;
// Define available tools for the assistant
this.tools = {
@@ -82,13 +81,9 @@ export class Agent {
dataAnalysis: new DataAnalysisTool(csvData),
websiteInfoScraper: new WebsiteInfoScraperTool(addLinkedUrlDoc),
searchTool: new SearchTool(addLinkedUrlDoc),
- // createCSV: new CreateCSVTool(createCSVInDash),
noTool: new NoTool(),
- imageCreationTool: new ImageCreationTool(createImage),
- // createTextDoc: new CreateTextDocTool(addLinkedDoc),
createDoc: new CreateDocTool(addLinkedDoc),
- // createAnyDocument: new CreateAnyDocumentTool(addLinkedDoc),
- // dictionary: new DictionaryTool(),
+ generateTutorialNode: new GPTTutorialTool(addLinkedDoc),
};
}
@@ -117,7 +112,18 @@ export class Agent {
// Retrieve chat history and generate system prompt
const chatHistory = this._history();
- const systemPrompt = getReactPrompt(Object.values(this.tools), this._summaries, chatHistory);
+ let systemPrompt = getReactPrompt(Object.values(this.tools), this._summaries, chatHistory);
+
+ // If this is a Dash documentation assistant chat, modify the system prompt
+ if (this.Document?.is_dash_doc_assistant) {
+ systemPrompt = systemPrompt.replace(
+ '<task>',
+ `<task>
+ IMPORTANT: You are specifically focused on helping users with questions about Dash documentation and usage. When users ask questions, interpret them in the context of Dash documentation and features, even if they don't explicitly mention Dash. For example, if a user asks "How do I create a document?", interpret this as "How do I create a document in Dash?" and provide relevant Dash-specific guidance.
+
+ For any questions about Dash features, functionality, or usage, you should use the generateTutorialNode tool to create a tutorial document that explains the concept in detail. This tool will help create well-formatted, interactive tutorials that guide users through Dash features.`
+ );
+ }
// Initialize intermediate messages
this.interMessages = [{ role: 'system', content: systemPrompt }];
@@ -132,7 +138,7 @@ export class Agent {
ignoreAttributes: false,
attributeNamePrefix: '@_',
textNodeName: '_text',
- isArray: name => ['query', 'url'].indexOf(name) !== -1,
+ isArray: name => name === 'url',
processEntities: false, // Disable processing of entities
stopNodes: ['*.entity'], // Do not process any entities
});