Просмотр исходного кода

refactor: replace findByPagePaths with findAiAssistantByPagePath method in OpenaiService

Shun Miyazawa 1 год назад
Родитель
Сommit
072368988e

+ 0 - 20
apps/app/src/features/openai/server/models/ai-assistant.ts

@@ -5,12 +5,10 @@ import { type Model, type Document, Schema } from 'mongoose';
 import { getOrCreateModel } from '~/server/util/mongoose-utils';
 
 import { type AiAssistant, AiAssistantShareScope, AiAssistantAccessScope } from '../../interfaces/ai-assistant';
-import { generateGlobPatterns } from '../utils/generate-glob-patterns';
 
 export interface AiAssistantDocument extends AiAssistant, Document {}
 
 interface AiAssistantModel extends Model<AiAssistantDocument> {
-  findByPagePaths(pagePaths: string[], options?: {shouldPopulateOwner?: boolean, shouldPopulateVectorStore?: boolean}): Promise<AiAssistantDocument[]>;
   setDefault(id: string, isDefault: boolean): Promise<AiAssistantDocument>;
 }
 
@@ -113,24 +111,6 @@ const schema = new Schema<AiAssistantDocument>(
 );
 
 
-schema.statics.findByPagePaths = async function(
-    pagePaths: string[], options?: {shouldPopulateOwner?: boolean, shouldPopulateVectorStore?: boolean},
-): Promise<AiAssistantDocument[]> {
-  const pagePathsWithGlobPattern = pagePaths.map(pagePath => generateGlobPatterns(pagePath)).flat();
-  const assistants = await this.find({
-    $or: [
-      // Case 1: Exact match
-      { pagePathPatterns: { $in: pagePaths } },
-      // Case 2: Glob pattern match
-      { pagePathPatterns: { $in: pagePathsWithGlobPattern } },
-    ],
-  })
-    .populate(options?.shouldPopulateOwner ? 'owner' : undefined)
-    .populate(options?.shouldPopulateVectorStore ? 'vectorStore' : undefined);
-
-  return assistants;
-};
-
 schema.statics.setDefault = async function(id: string, isDefault: boolean): Promise<AiAssistantDocument> {
   const aiAssistant = await this.findOne({ _id: id, shareScope: AiAssistantAccessScope.PUBLIC_ONLY });
   if (aiAssistant == null) {

+ 32 - 2
apps/app/src/features/openai/server/services/openai.ts

@@ -36,6 +36,7 @@ import type { MessageListParams } from '../../interfaces/message';
 import { removeGlobPath } from '../../utils/remove-glob-path';
 import AiAssistantModel, { type AiAssistantDocument } from '../models/ai-assistant';
 import { convertMarkdownToHtml } from '../utils/convert-markdown-to-html';
+import { generateGlobPatterns } from '../utils/generate-glob-patterns';
 
 import { getClient } from './client-delegator';
 // import { splitMarkdownIntoChunks } from './markdown-splitter/markdown-token-splitter';
@@ -608,7 +609,8 @@ class OpenaiService implements IOpenaiService {
 
   async createVectorStoreFileOnPageCreate(pages: HydratedDocument<PageDocument>[]): Promise<void> {
     const pagePaths = pages.map(page => page.path);
-    const aiAssistants = await AiAssistantModel.findByPagePaths(pagePaths, { shouldPopulateOwner: true, shouldPopulateVectorStore: true });
+    const aiAssistants = await this.findAiAssistantByPagePath(pagePaths, { shouldPopulateOwner: true, shouldPopulateVectorStore: true });
+    console.log('aiAssistants', aiAssistants);
 
     if (aiAssistants.length === 0) {
       return;
@@ -640,7 +642,8 @@ class OpenaiService implements IOpenaiService {
   }
 
   async updateVectorStoreFileOnPageUpdate(page: HydratedDocument<PageDocument>) {
-    const aiAssistants = await AiAssistantModel.findByPagePaths([page.path], { shouldPopulateVectorStore: true });
+    const aiAssistants = await this.findAiAssistantByPagePath([page.path], { shouldPopulateVectorStore: true });
+    console.log('aiAssistants', aiAssistants);
 
     if (aiAssistants.length === 0) {
       return;
@@ -996,6 +999,33 @@ class OpenaiService implements IOpenaiService {
     return totalPageCount > limitLearnablePageCountPerAssistant;
   }
 
+  async findAiAssistantByPagePath(
+      pagePaths: string[], options?: { shouldPopulateOwner?: boolean, shouldPopulateVectorStore?: boolean },
+  ): Promise<AiAssistantDocument[]> {
+
+    const pagePathsWithGlobPattern = pagePaths.map(pagePath => generateGlobPatterns(pagePath)).flat();
+
+    const query = AiAssistantModel.find({
+      $or: [
+        // Case 1: Exact match
+        { pagePathPatterns: { $in: pagePaths } },
+        // Case 2: Glob pattern match
+        { pagePathPatterns: { $in: pagePathsWithGlobPattern } },
+      ],
+    });
+
+    if (options?.shouldPopulateOwner) {
+      query.populate('owner');
+    }
+
+    if (options?.shouldPopulateVectorStore) {
+      query.populate('vectorStore');
+    }
+
+    const aiAssistants = await query.exec();
+    return aiAssistants;
+  }
+
 }
 
 let instance: OpenaiService;