import { DyFM_Error } from '@futdevpro/fsm-dynamo'; import { DyFM_AI_Message } from '@futdevpro/fsm-dynamo/ai'; import { DyNTS_Bot_IO_ControlService } from '../../bot/_services/bot-io.control-service'; import { DyNTS_Bot_MessageWrapper } from '../../bot/_models/bot-message-wrapper.interface'; /* import { DyNTS_Ass_Main_ControlService } from './ass-main.control-service'; */ import { DyNTS_Ass_Util } from '../_collections/ass.util'; import { DyNTS_global_settings } from '../../../_collections/global-settings.const'; import { DyNTS_AI_LLMChat_ServiceBase } from '../../ai/_services/ai-llm-chat.service-base'; import { DyNTS_Ass_Main_ControlService } from './ass-main.control-service'; /** * Assistant IO Control Service * Handles message processing with AI provider * EXACT SAME LOGIC as DiAs_IO_ControlService but platform and AI provider agnostic */ export abstract class DyNTS_Ass_IO_ControlService extends DyNTS_Bot_IO_ControlService { protected declare mainBot_CS: DyNTS_Ass_Main_ControlService; protected abstract override getMainBotControlService(): DyNTS_Ass_Main_ControlService; get aiProvider(): DyNTS_AI_LLMChat_ServiceBase { return this.mainBot_CS.aiProvider; } /** * Handle incoming message with AI * EXACT SAME LOGIC as dias-io.control-service.ts handleMessage() */ async handleMessage( message: DyNTS_Bot_MessageWrapper, issuer: string ): Promise> { try { // Gather messages from comms platform using wrapper's provider const messages: DyNTS_Bot_MessageWrapper[] = await this.mainBot_CS.gatherMessagesForMessage(message); // Convert to AI conversation format (uses EXISTING DyFM_AI_Message) const aiMessages: DyFM_AI_Message[] = DyNTS_Ass_Util.convertBotMessagesToAIConversation({ messages: messages, botClientId: message.provider.botId, botDisplayName: message.provider.botDisplayName, issuer: issuer, }); // Get AI response using EXISTING getAnswerInConversation method const aiResult: string = await this.aiProvider.requestSimpleMessageInConversation({ conversation: aiMessages, settings: { systemPrompt: this.mainBot_CS.defaultSystemPrompt, }, issuer: issuer, }); // Reply via same provider the message came from return await message.provider.replyToMessage(message, aiResult); } catch (error) { DyFM_Error.logSimple('❌❌ Error handleMessage:', error); if (!this.dontSendErrorReply && DyNTS_global_settings.bot_settings?.debugLevel >= 1) { await message.provider.replyToMessage( message, `[SYSTEM|ERROR|${DyNTS_global_settings.systemShortCodeName}|DyNTS-Ass-IOCS-H0] Error occurred while handling the message:\n` + DyFM_Error.getAnyMessage(error) ); } throw new DyFM_Error({ ...this.getDefaultErrorSettings('handleMessage', error, issuer), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-Ass-IOCS-H0`, }); } } }