Yuki Takei 1 năm trước cách đây
mục cha
commit
75b1e89f15
1 tập tin đã thay đổi với 39 bổ sung5 xóa
  1. 39 5
      apps/app/src/server/service/openai/assistant/assistant.ts

+ 39 - 5
apps/app/src/server/service/openai/assistant/assistant.ts

@@ -3,6 +3,15 @@ import type OpenAI from 'openai';
 import { configManager } from '../../config-manager';
 import { openaiClient } from '../client';
 
+
+const AssistantType = {
+  SEARCH: 'Search',
+  CHAT: 'Chat',
+} as const;
+
+type AssistantType = typeof AssistantType[keyof typeof AssistantType];
+
+
 const findAssistantByName = async(assistantName: string): Promise<OpenAI.Beta.Assistant | undefined> => {
 
   // declare finder
@@ -24,14 +33,12 @@ const findAssistantByName = async(assistantName: string): Promise<OpenAI.Beta.As
   return findAssistant(storedAssistants);
 };
 
-const getOrCreateAssistant = async(): Promise<OpenAI.Beta.Assistant> => {
-
+const getOrCreateAssistant = async(type: AssistantType): Promise<OpenAI.Beta.Assistant> => {
   const appSiteUrl = configManager.getConfig('crowi', 'app:siteUrl');
-  const assistantName = `GROWI OpenAI Assistant for ${appSiteUrl}`;
+  const assistantName = `GROWI ${type} Assistant for ${appSiteUrl}`;
 
   const assistantOnRemote = await findAssistantByName(assistantName);
   if (assistantOnRemote != null) {
-    // store
     return assistantOnRemote;
   }
 
@@ -43,4 +50,31 @@ const getOrCreateAssistant = async(): Promise<OpenAI.Beta.Assistant> => {
   return newAssistant;
 };
 
-export const defaultAssistant = getOrCreateAssistant();
+let searchAssistant: OpenAI.Beta.Assistant | undefined;
+export const getOrCreateSearchAssistant = async(): Promise<OpenAI.Beta.Assistant> => {
+  if (searchAssistant != null) {
+    return searchAssistant;
+  }
+
+  searchAssistant = await getOrCreateAssistant(AssistantType.SEARCH);
+  openaiClient.beta.assistants.update(searchAssistant.id, {
+    instructions: process.env.OPENAI_SEARCH_ASSISTANT_INSTRUCTIONS,
+  });
+
+  return searchAssistant;
+};
+
+
+let chatAssistant: OpenAI.Beta.Assistant | undefined;
+export const getOrCreateChatAssistant = async(): Promise<OpenAI.Beta.Assistant> => {
+  if (chatAssistant != null) {
+    return chatAssistant;
+  }
+
+  chatAssistant = await getOrCreateAssistant(AssistantType.SEARCH);
+  openaiClient.beta.assistants.update(chatAssistant.id, {
+    instructions: process.env.OPENAI_CHAT_ASSISTANT_INSTRUCTIONS,
+  });
+
+  return chatAssistant;
+};