{"version":3,"sources":["/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-FPXKRTAT.cjs","../../src/services/intents/multi-trigger.service.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACOO,IAAM,0BAAA,EAAN,MAAgC;AAAA,EAC9B;AAAA,EACA;AAAA,EAER,WAAA,CAAY,WAAA,EAA0B,YAAA,EAA4B;AACjE,IAAA,IAAA,CAAK,YAAA,EAAc,WAAA;AACnB,IAAA,IAAA,CAAK,aAAA,EAAe,YAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAa,gBAAA,CACZ,KAAA,EACA,MAAA,EAC+B;AAC/B,IAAA,MAAM,cAAA,EAAgB,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,CAAA;AAChD,IAAA,MAAM,aAAA,EAAe,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,CAAA;AACtD,IAAA,MAAM,aAAA,EAAe,IAAA,CAAK,YAAA,CAAa,eAAA,CAAgB,CAAA;AACvD,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AAClB,MAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,QAAA,EAAU,MAAM,CAAC,CAAA,EAAG,gBAAA,EAAkB,MAAM,CAAA;AAAA,IAClE;AAGA,IAAA,MAAM,QAAA,EAAU,MAAM,YAAA,CAAa,WAAA,CAAY,CAAA;AAE/C,IAAA,GAAA,CAAI,OAAA,CAAQ,OAAA,IAAW,CAAA,EAAG;AACzB,MAAA,yBAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,iBAAiB,CAAA;AAC3C,MAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,QAAA,EAAU,MAAM,CAAC,CAAA,EAAG,gBAAA,EAAkB,MAAM,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,WAAA,EAAa,OAAA,CACjB,GAAA,CAAI,CAAC,MAAA,EAAA,GAAW,CAAA,EAAA,EAAK,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,WAAW,CAAA,CAAA;AAOxB,IAAA;AAMxB,MAAA;AAGoB,MAAA;AAEI,MAAA;AAEpB,IAAA;AAEc,IAAA;AACrB,MAAA;AACL,MAAA;AACD,IAAA;AAEuB,IAAA;AAGrB;AAAA;AAEY;AAAA;AAIhB;AAC4B,qBAAA;AAAA;AAAA;AAAA;AAKsB,IAAA;AACxC,MAAA;AACP,MAAA;AACA,IAAA;AAEgE,IAAA;AAC1C,IAAA;AACgC,MAAA;AACW,MAAA;AAClE,IAAA;AAEI,IAAA;AAQA,IAAA;AACiC,MAAA;AACZ,IAAA;AACyC,MAAA;AAClE,IAAA;AAEyC,IAAA;AACW,IAAA;AAEF,IAAA;AACa,IAAA;AAC/C,MAAA;AACqB,MAAA;AACpB,MAAA;AAC4C,QAAA;AAC5D,MAAA;AAC0B,MAAA;AAC3B,IAAA;AAEgD,IAAA;AACjB,MAAA;AAC9B,MAAA;AACA,IAAA;AAEoD,IAAA;AACtD,EAAA;AACD;ADlDuF;AACA;AACA;AACA","file":"/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-FPXKRTAT.cjs","sourcesContent":[null,"import type { MemoryModule, ModelModule } from \"@/modules\";\nimport type {\n\tIntentTriggerResult,\n\tMessageObject,\n\tThreadObject,\n\tTriggeredIntent,\n} from \"@/types/memory\";\nimport { loggers } from \"@/utils/logger\";\nimport multiTriggerPrompt from \"../prompts/multi-trigger\";\n\n/**\n * Service for multi-intent triggering.\n * Decomposes queries into multiple subqueries and maps each to an intent.\n */\nexport class MultiIntentTriggerService {\n\tprivate modelModule: ModelModule;\n\tprivate memoryModule: MemoryModule;\n\n\tconstructor(modelModule: ModelModule, memoryModule: MemoryModule) {\n\t\tthis.modelModule = modelModule;\n\t\tthis.memoryModule = memoryModule;\n\t}\n\n\t/**\n\t * Detects multiple intents from context by decomposing queries into subqueries.\n\t *\n\t * @param query - The user's input query\n\t * @param thread - The thread history\n\t * @returns IntentTriggerResult containing intents and aggregation flag\n\t */\n\tpublic async intentTriggering(\n\t\tquery: string,\n\t\tthread: ThreadObject | undefined,\n\t): Promise<IntentTriggerResult> {\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst modelOptions = this.modelModule.getModelOptions();\n\t\tconst intentMemory = this.memoryModule.getIntentMemory();\n\t\tif (!intentMemory) {\n\t\t\treturn { intents: [{ subquery: query }], needsAggregation: false };\n\t\t}\n\n\t\t// 인텐트 목록 가져오기\n\t\tconst intents = await intentMemory.listIntents();\n\n\t\tif (intents.length === 0) {\n\t\t\tloggers.intentStream.warn(\"No intent found\");\n\t\t\treturn { intents: [{ subquery: query }], needsAggregation: false };\n\t\t}\n\n\t\tconst intentList = intents\n\t\t\t.map((intent) => `- ${intent.name}: ${intent.description}`)\n\t\t\t.join(\"\\n\");\n\n\t\t// Convert thread messages to a string\n\t\tconst threadMessages = !thread\n\t\t\t? \"\"\n\t\t\t: thread.messages\n\t\t\t\t\t.sort((a, b) => a.timestamp - b.timestamp)\n\t\t\t\t\t.map((message: MessageObject) => {\n\t\t\t\t\t\tconst role =\n\t\t\t\t\t\t\tmessage.role === \"USER\"\n\t\t\t\t\t\t\t\t? \"User\"\n\t\t\t\t\t\t\t\t: message.role === \"MODEL\"\n\t\t\t\t\t\t\t\t\t? \"Assistant\"\n\t\t\t\t\t\t\t\t\t: \"System\";\n\t\t\t\t\t\tconst content = Array.isArray(message.content.parts)\n\t\t\t\t\t\t\t? message.content.parts.join(\" \")\n\t\t\t\t\t\t\t: String(message.content.parts);\n\t\t\t\t\t\treturn `${role}: \"\"\"${content}\"\"\"`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\");\n\n\t\tconst systemPrompt = await multiTriggerPrompt(\n\t\t\tthis.memoryModule,\n\t\t\tintentList,\n\t\t);\n\n\t\tconst triggerMessage = `\n${\n\tthreadMessages !== \"\"\n\t\t? `\nThe following is the conversation history with the user:\n${threadMessages}\n\n`\n\t\t: \"\"\n}\nLast user question: \"${query}\"\n\nBased on the above conversation history, analyze the last user question and identify all relevant intents.\n`;\n\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery: triggerMessage,\n\t\t\tsystemPrompt,\n\t\t});\n\n\t\tconst response = await modelInstance.fetch(messages, modelOptions);\n\t\tif (!response.content) {\n\t\t\tloggers.intent.warn(\"Cannot extract intent from query\");\n\t\t\treturn { intents: [{ subquery: query }], needsAggregation: false };\n\t\t}\n\n\t\tlet parsed: {\n\t\t\tneedsAggregation?: boolean;\n\t\t\tsubqueries?: Array<{\n\t\t\t\tsubquery?: string;\n\t\t\t\tintentName?: string;\n\t\t\t\tactionPlan?: string;\n\t\t\t}>;\n\t\t};\n\t\ttry {\n\t\t\tparsed = JSON.parse(response.content);\n\t\t} catch (error: unknown) {\n\t\t\treturn { intents: [{ subquery: query }], needsAggregation: false };\n\t\t}\n\n\t\tconst subqueries = parsed.subqueries ?? [];\n\t\tconst needsAggregation = parsed.needsAggregation ?? false;\n\n\t\tconst triggeredIntents: Array<TriggeredIntent> = [];\n\t\tfor (const { subquery, intentName, actionPlan } of subqueries) {\n\t\t\tif (!subquery) continue;\n\t\t\tconst item = { subquery, actionPlan } as TriggeredIntent;\n\t\t\tif (intentName) {\n\t\t\t\titem.intent = await intentMemory.getIntentByName(intentName);\n\t\t\t}\n\t\t\ttriggeredIntents.push(item);\n\t\t}\n\n\t\tloggers.intent.info(\"Intent triggering result\", {\n\t\t\tintentCount: triggeredIntents.length,\n\t\t\tneedsAggregation,\n\t\t});\n\n\t\treturn { intents: triggeredIntents, needsAggregation };\n\t}\n}\n"]}