delete-ai-assistant.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import {
  2. getIdStringForRef, type IUserHasId,
  3. } from '@growi/core';
  4. import createError from 'http-errors';
  5. import loggerFactory from '~/utils/logger';
  6. import type { AiAssistantDocument } from '../models/ai-assistant';
  7. import AiAssistantModel from '../models/ai-assistant';
  8. import { isAiEnabled } from './is-ai-enabled';
  9. import { getOpenaiService } from './openai';
  10. const logger = loggerFactory('growi:service:openai:delete-ai-assistant');
  11. export const deleteAiAssistant = async(ownerId: string, aiAssistantId: string): Promise<AiAssistantDocument> => {
  12. const openaiService = getOpenaiService();
  13. if (openaiService == null) {
  14. throw createError(500, 'openaiService is not initialized');
  15. }
  16. const aiAssistant = await AiAssistantModel.findOne({ owner: ownerId, _id: aiAssistantId });
  17. if (aiAssistant == null) {
  18. throw createError(404, 'AiAssistant document does not exist');
  19. }
  20. const vectorStoreRelationId = getIdStringForRef(aiAssistant.vectorStore);
  21. await openaiService.deleteVectorStore(vectorStoreRelationId);
  22. const deletedAiAssistant = await aiAssistant.remove();
  23. return deletedAiAssistant;
  24. };
  25. export const deleteUserAiAssistant = async(user: IUserHasId): Promise<void> => {
  26. if (isAiEnabled()) {
  27. const aiAssistants = await AiAssistantModel.find({ owner: user });
  28. for await (const aiAssistant of aiAssistants) {
  29. try {
  30. await deleteAiAssistant(user._id, aiAssistant._id);
  31. }
  32. catch (err) {
  33. logger.error(`Failed to delete AiAssistant ${aiAssistant._id}`);
  34. }
  35. }
  36. }
  37. // Cannot delete OpenAI VectorStore entities without enabling openaiService.
  38. // Delete OpenAI VectorStore entities through "deleteVectorStoresOrphanedFromAiAssistant" when app starts with openaiService enabled
  39. await AiAssistantModel.deleteMany({ owner: user });
  40. };