{"version":3,"sources":["/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-4VRDSSQU.cjs","../../src/services/intents/aggregate.service.ts"],"names":[],"mappings":"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","file":"/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/chunk-4VRDSSQU.cjs","sourcesContent":[null,"import { getManifest } from \"@/config/manifest\";\nimport type { MemoryModule, ModelModule } from \"@/modules\";\nimport type { FulfillmentResult, ThreadType } from \"@/types/memory\";\nimport type { StreamEvent } from \"@/types/stream\";\nimport aggregatePrompts from \"../prompts/aggregate\";\n\n/**\n * Service for determining whether multiple fulfillment results need to be\n * aggregated into a unified response, and generating that response if needed.\n */\nexport class AggregateService {\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 * Generates a unified response combining all results (always aggregates).\n\t * Use this when needsAggregation is already determined to be true.\n\t *\n\t * @param originalQuery - The user's original query\n\t * @param results - Array of fulfillment results from each intent\n\t * @returns AsyncGenerator yielding StreamEvent objects\n\t */\n\tpublic async *aggregate(\n\t\toriginalQuery: string,\n\t\tresults: FulfillmentResult[],\n\t): AsyncGenerator<StreamEvent> {\n\t\t// Single result doesn't need aggregation\n\t\tif (results.length <= 1) {\n\t\t\tconst response = results[0]?.response ?? \"\";\n\t\t\tif (response) {\n\t\t\t\tyield {\n\t\t\t\t\tevent: \"text_chunk\",\n\t\t\t\t\tdata: { delta: response },\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Emit thinking_process event for aggregate step\n\t\tyield {\n\t\t\tevent: \"thinking_process\",\n\t\t\tdata: {\n\t\t\t\ttitle: `[${getManifest().name}] 응답 통합 중`,\n\t\t\t\tdescription: \"여러 작업 결과를 하나의 응답으로 통합합니다.\",\n\t\t\t},\n\t\t};\n\n\t\t// Generate unified response (streaming)\n\t\tyield* this.generateAggregatedResponse(originalQuery, results);\n\t}\n\n\t/**\n\t * Generates a unified response by streaming from the model.\n\t */\n\tprivate async *generateAggregatedResponse(\n\t\toriginalQuery: string,\n\t\tresults: FulfillmentResult[],\n\t): AsyncGenerator<StreamEvent> {\n\t\tconst modelInstance = this.modelModule.getModel();\n\t\tconst modelOptions = this.modelModule.getModelOptions();\n\n\t\tconst query = this.buildAggregateQuery(originalQuery, results);\n\n\t\tconst emptyThread = {\n\t\t\tmessages: [],\n\t\t\tuserId: \"\",\n\t\t\tthreadId: \"\",\n\t\t\ttype: \"CHAT\" as ThreadType,\n\t\t\ttitle: \"\",\n\t\t};\n\n\t\tconst messages = modelInstance.generateMessages({\n\t\t\tquery,\n\t\t\tthread: emptyThread,\n\t\t\tsystemPrompt: await aggregatePrompts(this.memoryModule),\n\t\t});\n\n\t\tconst stream = await modelInstance.fetchStreamWithContextMessage(\n\t\t\tmessages,\n\t\t\t[],\n\t\t\tmodelOptions,\n\t\t);\n\n\t\tfor await (const chunk of stream) {\n\t\t\tif (chunk.delta?.content) {\n\t\t\t\tyield {\n\t\t\t\t\tevent: \"text_chunk\",\n\t\t\t\t\tdata: { delta: chunk.delta.content },\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Builds the query for generating an aggregated response.\n\t */\n\tprivate buildAggregateQuery(\n\t\toriginalQuery: string,\n\t\tresults: FulfillmentResult[],\n\t): string {\n\t\tconst resultsText = results\n\t\t\t.map(\n\t\t\t\t(r, i) =>\n\t\t\t\t\t`[Task ${i + 1}] ${r.subquery}\\n[Response ${i + 1}] ${r.response}`,\n\t\t\t)\n\t\t\t.join(\"\\n\\n---\\n\\n\");\n\n\t\treturn `Original Query: ${originalQuery}\n\nAll task results:\n${resultsText}\n\nPlease provide a unified response that addresses the original query.`;\n\t}\n}\n"]}