@multiplayer-app/ai-agent-node 0.1.0-beta.2 → 0.1.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/config.cjs +98 -0
- package/dist/cjs/config.cjs.map +1 -0
- package/dist/cjs/config.d.ts +56 -23
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/helpers/{AIHelper.js → AIHelper.cjs} +145 -91
- package/dist/cjs/helpers/AIHelper.cjs.map +1 -0
- package/dist/cjs/helpers/AIHelper.d.ts +19 -12
- package/dist/cjs/helpers/AIHelper.d.ts.map +1 -1
- package/dist/cjs/helpers/{AIHelper.test.js → AIHelper.test.cjs} +22 -15
- package/dist/cjs/helpers/AIHelper.test.cjs.map +1 -0
- package/dist/cjs/helpers/{ConfigHelper.js → ConfigHelper.cjs} +4 -5
- package/dist/cjs/helpers/ConfigHelper.cjs.map +1 -0
- package/dist/cjs/helpers/{ContextLimiter.js → ContextLimiter.cjs} +2 -3
- package/dist/cjs/helpers/{ContextLimiter.js.map → ContextLimiter.cjs.map} +1 -1
- package/dist/cjs/helpers/FileHelper.cjs +193 -0
- package/dist/cjs/helpers/FileHelper.cjs.map +1 -0
- package/dist/cjs/helpers/FileHelper.d.ts +19 -25
- package/dist/cjs/helpers/FileHelper.d.ts.map +1 -1
- package/dist/cjs/{store/index.js → helpers/index.cjs} +4 -4
- package/dist/cjs/helpers/{index.js.map → index.cjs.map} +1 -1
- package/dist/cjs/helpers/index.d.ts +4 -5
- package/dist/cjs/helpers/index.d.ts.map +1 -1
- package/dist/cjs/index.cjs +114 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.ts +39 -13
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/libs/{kafka/index.js → index.cjs} +2 -2
- package/dist/cjs/libs/{index.js.map → index.cjs.map} +1 -1
- package/dist/cjs/libs/index.d.ts +2 -3
- package/dist/cjs/libs/index.d.ts.map +1 -1
- package/dist/cjs/libs/logger/{index.js → index.cjs} +5 -5
- package/dist/cjs/libs/logger/{index.js.map → index.cjs.map} +1 -1
- package/dist/cjs/libs/logger/index.d.ts +2 -2
- package/dist/cjs/libs/logger/index.d.ts.map +1 -1
- package/dist/cjs/libs/logger/{kafkajs-logger-creator.js → kafkajs-logger-creator.cjs} +2 -2
- package/dist/cjs/libs/logger/{kafkajs-logger-creator.js.map → kafkajs-logger-creator.cjs.map} +1 -1
- package/dist/cjs/libs/s3/index.cjs +8 -0
- package/dist/cjs/libs/s3/index.cjs.map +1 -0
- package/dist/cjs/libs/s3/index.d.ts +1 -2
- package/dist/cjs/libs/s3/index.d.ts.map +1 -1
- package/dist/cjs/libs/s3/s3.lib.cjs +207 -0
- package/dist/cjs/libs/s3/s3.lib.cjs.map +1 -0
- package/dist/cjs/libs/s3/s3.lib.d.ts +29 -22
- package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -1
- package/dist/cjs/processors/{ChatProcessor.js → ChatProcessor.cjs} +96 -87
- package/dist/cjs/processors/ChatProcessor.cjs.map +1 -0
- package/dist/cjs/processors/ChatProcessor.d.ts +20 -3
- package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -1
- package/dist/cjs/processors/{ModelsProcessor.js → ModelsProcessor.cjs} +2 -2
- package/dist/cjs/processors/{ModelsProcessor.js.map → ModelsProcessor.cjs.map} +1 -1
- package/dist/cjs/processors/{index.js → index.cjs} +2 -2
- package/dist/cjs/processors/{index.js.map → index.cjs.map} +1 -1
- package/dist/cjs/processors/index.d.ts +2 -2
- package/dist/cjs/processors/index.d.ts.map +1 -1
- package/dist/cjs/services/{AIService.js → AIService.cjs} +19 -23
- package/dist/cjs/services/AIService.cjs.map +1 -0
- package/dist/cjs/services/AIService.d.ts +4 -2
- package/dist/cjs/services/AIService.d.ts.map +1 -1
- package/dist/cjs/services/{InternalEventsHandler.js → InternalEventsHandler.cjs} +5 -5
- package/dist/cjs/services/InternalEventsHandler.cjs.map +1 -0
- package/dist/cjs/services/InternalEventsHandler.d.ts +3 -1
- package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -1
- package/dist/cjs/services/{ModelFetcher.js → ModelFetcher.cjs} +9 -15
- package/dist/cjs/services/ModelFetcher.cjs.map +1 -0
- package/dist/cjs/services/ModelFetcher.d.ts +2 -7
- package/dist/cjs/services/ModelFetcher.d.ts.map +1 -1
- package/dist/cjs/services/{RedisService.js → RedisService.cjs} +35 -32
- package/dist/cjs/services/RedisService.cjs.map +1 -0
- package/dist/cjs/services/RedisService.d.ts +5 -2
- package/dist/cjs/services/RedisService.d.ts.map +1 -1
- package/dist/cjs/services/{SocketService.js → SocketService.cjs} +19 -20
- package/dist/cjs/services/SocketService.cjs.map +1 -0
- package/dist/cjs/services/SocketService.d.ts +7 -4
- package/dist/cjs/services/SocketService.d.ts.map +1 -1
- package/dist/cjs/{helpers/index.js → services/index.cjs} +5 -5
- package/dist/cjs/services/{index.js.map → index.cjs.map} +1 -1
- package/dist/cjs/services/index.d.ts +5 -6
- package/dist/cjs/services/index.d.ts.map +1 -1
- package/dist/cjs/store/{AgentStore.js → AgentStore.cjs} +4 -5
- package/dist/cjs/store/AgentStore.cjs.map +1 -0
- package/dist/cjs/store/AgentStore.d.ts +2 -1
- package/dist/cjs/store/AgentStore.d.ts.map +1 -1
- package/dist/cjs/store/{ArtifactStore.js → ArtifactStore.cjs} +2 -4
- package/dist/cjs/store/ArtifactStore.cjs.map +1 -0
- package/dist/cjs/store/{ConfigStore.js → ConfigStore.cjs} +8 -11
- package/dist/cjs/store/ConfigStore.cjs.map +1 -0
- package/dist/cjs/store/ConfigStore.d.ts.map +1 -1
- package/dist/cjs/store/{ConfigStore.test.js → ConfigStore.test.cjs} +2 -2
- package/dist/cjs/store/{ConfigStore.test.js.map → ConfigStore.test.cjs.map} +1 -1
- package/dist/cjs/store/{ModelStore.js → ModelStore.cjs} +4 -4
- package/dist/cjs/store/ModelStore.cjs.map +1 -0
- package/dist/cjs/store/{ModelStore.test.js → ModelStore.test.cjs} +17 -17
- package/dist/cjs/store/ModelStore.test.cjs.map +1 -0
- package/dist/cjs/{libs/index.js → store/index.cjs} +4 -3
- package/dist/cjs/store/{index.js.map → index.cjs.map} +1 -1
- package/dist/cjs/store/index.d.ts +4 -4
- package/dist/cjs/store/index.d.ts.map +1 -1
- package/dist/cjs/tools/proposeFormValuesTool.d.ts +2 -2
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/config.d.ts +56 -23
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +88 -36
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/helpers/AIHelper.d.ts +19 -12
- package/dist/esm/helpers/AIHelper.d.ts.map +1 -1
- package/dist/esm/helpers/AIHelper.js +144 -88
- package/dist/esm/helpers/AIHelper.js.map +1 -1
- package/dist/esm/helpers/AIHelper.test.js +21 -14
- package/dist/esm/helpers/AIHelper.test.js.map +1 -1
- package/dist/esm/helpers/ConfigHelper.js +2 -3
- package/dist/esm/helpers/ConfigHelper.js.map +1 -1
- package/dist/esm/helpers/ContextLimiter.js +2 -3
- package/dist/esm/helpers/ContextLimiter.js.map +1 -1
- package/dist/esm/helpers/FileHelper.d.ts +19 -25
- package/dist/esm/helpers/FileHelper.d.ts.map +1 -1
- package/dist/esm/helpers/FileHelper.js +132 -149
- package/dist/esm/helpers/FileHelper.js.map +1 -1
- package/dist/esm/helpers/index.d.ts +4 -5
- package/dist/esm/helpers/index.d.ts.map +1 -1
- package/dist/esm/helpers/index.js +4 -5
- package/dist/esm/helpers/index.js.map +1 -1
- package/dist/esm/index.d.ts +39 -13
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +79 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/libs/index.d.ts +2 -3
- package/dist/esm/libs/index.d.ts.map +1 -1
- package/dist/esm/libs/index.js +2 -3
- package/dist/esm/libs/index.js.map +1 -1
- package/dist/esm/libs/logger/index.d.ts +2 -2
- package/dist/esm/libs/logger/index.d.ts.map +1 -1
- package/dist/esm/libs/logger/index.js +2 -2
- package/dist/esm/libs/logger/index.js.map +1 -1
- package/dist/esm/libs/logger/kafkajs-logger-creator.js +1 -1
- package/dist/esm/libs/logger/kafkajs-logger-creator.js.map +1 -1
- package/dist/esm/libs/s3/index.d.ts +1 -2
- package/dist/esm/libs/s3/index.d.ts.map +1 -1
- package/dist/esm/libs/s3/index.js +1 -2
- package/dist/esm/libs/s3/index.js.map +1 -1
- package/dist/esm/libs/s3/s3.lib.d.ts +29 -22
- package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -1
- package/dist/esm/libs/s3/s3.lib.js +178 -177
- package/dist/esm/libs/s3/s3.lib.js.map +1 -1
- package/dist/esm/processors/ChatProcessor.d.ts +20 -3
- package/dist/esm/processors/ChatProcessor.d.ts.map +1 -1
- package/dist/esm/processors/ChatProcessor.js +87 -71
- package/dist/esm/processors/ChatProcessor.js.map +1 -1
- package/dist/esm/processors/ModelsProcessor.js +1 -1
- package/dist/esm/processors/ModelsProcessor.js.map +1 -1
- package/dist/esm/processors/index.d.ts +2 -2
- package/dist/esm/processors/index.d.ts.map +1 -1
- package/dist/esm/processors/index.js +2 -2
- package/dist/esm/processors/index.js.map +1 -1
- package/dist/esm/services/AIService.d.ts +4 -2
- package/dist/esm/services/AIService.d.ts.map +1 -1
- package/dist/esm/services/AIService.js +22 -24
- package/dist/esm/services/AIService.js.map +1 -1
- package/dist/esm/services/InternalEventsHandler.d.ts +3 -1
- package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -1
- package/dist/esm/services/InternalEventsHandler.js +10 -8
- package/dist/esm/services/InternalEventsHandler.js.map +1 -1
- package/dist/esm/services/ModelFetcher.d.ts +2 -7
- package/dist/esm/services/ModelFetcher.d.ts.map +1 -1
- package/dist/esm/services/ModelFetcher.js +4 -9
- package/dist/esm/services/ModelFetcher.js.map +1 -1
- package/dist/esm/services/RedisService.d.ts +5 -2
- package/dist/esm/services/RedisService.d.ts.map +1 -1
- package/dist/esm/services/RedisService.js +25 -21
- package/dist/esm/services/RedisService.js.map +1 -1
- package/dist/esm/services/SocketService.d.ts +7 -4
- package/dist/esm/services/SocketService.d.ts.map +1 -1
- package/dist/esm/services/SocketService.js +15 -13
- package/dist/esm/services/SocketService.js.map +1 -1
- package/dist/esm/services/index.d.ts +5 -6
- package/dist/esm/services/index.d.ts.map +1 -1
- package/dist/esm/services/index.js +5 -6
- package/dist/esm/services/index.js.map +1 -1
- package/dist/esm/store/AgentStore.d.ts +2 -1
- package/dist/esm/store/AgentStore.d.ts.map +1 -1
- package/dist/esm/store/AgentStore.js +5 -5
- package/dist/esm/store/AgentStore.js.map +1 -1
- package/dist/esm/store/ArtifactStore.js +3 -7
- package/dist/esm/store/ArtifactStore.js.map +1 -1
- package/dist/esm/store/ConfigStore.d.ts.map +1 -1
- package/dist/esm/store/ConfigStore.js +16 -19
- package/dist/esm/store/ConfigStore.js.map +1 -1
- package/dist/esm/store/ConfigStore.test.js +1 -1
- package/dist/esm/store/ConfigStore.test.js.map +1 -1
- package/dist/esm/store/ModelStore.js +6 -6
- package/dist/esm/store/ModelStore.js.map +1 -1
- package/dist/esm/store/ModelStore.test.js +12 -12
- package/dist/esm/store/ModelStore.test.js.map +1 -1
- package/dist/esm/store/index.d.ts +4 -4
- package/dist/esm/store/index.d.ts.map +1 -1
- package/dist/esm/store/index.js +4 -4
- package/dist/esm/store/index.js.map +1 -1
- package/dist/esm/tools/proposeFormValuesTool.d.ts +2 -2
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +11 -10
- package/dist/cjs/config.js +0 -48
- package/dist/cjs/config.js.map +0 -1
- package/dist/cjs/helpers/AIHelper.js.map +0 -1
- package/dist/cjs/helpers/AIHelper.test.js.map +0 -1
- package/dist/cjs/helpers/ConfigHelper.js.map +0 -1
- package/dist/cjs/helpers/FileHelper.js +0 -215
- package/dist/cjs/helpers/FileHelper.js.map +0 -1
- package/dist/cjs/helpers/SetupHelper.d.ts +0 -5
- package/dist/cjs/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/cjs/helpers/SetupHelper.js +0 -37
- package/dist/cjs/helpers/SetupHelper.js.map +0 -1
- package/dist/cjs/index.js +0 -34
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/libs/kafka/config.d.ts +0 -5
- package/dist/cjs/libs/kafka/config.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/config.js +0 -8
- package/dist/cjs/libs/kafka/config.js.map +0 -1
- package/dist/cjs/libs/kafka/consumer.d.ts +0 -16
- package/dist/cjs/libs/kafka/consumer.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/consumer.js +0 -133
- package/dist/cjs/libs/kafka/consumer.js.map +0 -1
- package/dist/cjs/libs/kafka/index.d.ts +0 -3
- package/dist/cjs/libs/kafka/index.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/index.js.map +0 -1
- package/dist/cjs/libs/kafka/kafka.d.ts +0 -3
- package/dist/cjs/libs/kafka/kafka.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/kafka.js +0 -27
- package/dist/cjs/libs/kafka/kafka.js.map +0 -1
- package/dist/cjs/libs/kafka/producer.d.ts +0 -11
- package/dist/cjs/libs/kafka/producer.d.ts.map +0 -1
- package/dist/cjs/libs/kafka/producer.js +0 -48
- package/dist/cjs/libs/kafka/producer.js.map +0 -1
- package/dist/cjs/libs/logger/config.d.ts +0 -5
- package/dist/cjs/libs/logger/config.d.ts.map +0 -1
- package/dist/cjs/libs/logger/config.js +0 -9
- package/dist/cjs/libs/logger/config.js.map +0 -1
- package/dist/cjs/libs/s3/config.d.ts +0 -7
- package/dist/cjs/libs/s3/config.d.ts.map +0 -1
- package/dist/cjs/libs/s3/config.js +0 -10
- package/dist/cjs/libs/s3/config.js.map +0 -1
- package/dist/cjs/libs/s3/index.js +0 -44
- package/dist/cjs/libs/s3/index.js.map +0 -1
- package/dist/cjs/libs/s3/s3.lib.js +0 -224
- package/dist/cjs/libs/s3/s3.lib.js.map +0 -1
- package/dist/cjs/processors/ChatProcessor.js.map +0 -1
- package/dist/cjs/services/AIService.js.map +0 -1
- package/dist/cjs/services/InternalEventsHandler.js.map +0 -1
- package/dist/cjs/services/KafkaService.d.ts +0 -35
- package/dist/cjs/services/KafkaService.d.ts.map +0 -1
- package/dist/cjs/services/KafkaService.js +0 -123
- package/dist/cjs/services/KafkaService.js.map +0 -1
- package/dist/cjs/services/ModelFetcher.js.map +0 -1
- package/dist/cjs/services/RedisService.js.map +0 -1
- package/dist/cjs/services/SocketService.js.map +0 -1
- package/dist/cjs/services/index.js +0 -23
- package/dist/cjs/store/AgentStore.js.map +0 -1
- package/dist/cjs/store/ArtifactStore.js.map +0 -1
- package/dist/cjs/store/ConfigStore.js.map +0 -1
- package/dist/cjs/store/ModelStore.js.map +0 -1
- package/dist/cjs/store/ModelStore.test.js.map +0 -1
- package/dist/esm/helpers/SetupHelper.d.ts +0 -5
- package/dist/esm/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/esm/helpers/SetupHelper.js +0 -32
- package/dist/esm/helpers/SetupHelper.js.map +0 -1
- package/dist/esm/libs/kafka/config.d.ts +0 -5
- package/dist/esm/libs/kafka/config.d.ts.map +0 -1
- package/dist/esm/libs/kafka/config.js +0 -5
- package/dist/esm/libs/kafka/config.js.map +0 -1
- package/dist/esm/libs/kafka/consumer.d.ts +0 -16
- package/dist/esm/libs/kafka/consumer.d.ts.map +0 -1
- package/dist/esm/libs/kafka/consumer.js +0 -126
- package/dist/esm/libs/kafka/consumer.js.map +0 -1
- package/dist/esm/libs/kafka/index.d.ts +0 -3
- package/dist/esm/libs/kafka/index.d.ts.map +0 -1
- package/dist/esm/libs/kafka/index.js +0 -3
- package/dist/esm/libs/kafka/index.js.map +0 -1
- package/dist/esm/libs/kafka/kafka.d.ts +0 -3
- package/dist/esm/libs/kafka/kafka.d.ts.map +0 -1
- package/dist/esm/libs/kafka/kafka.js +0 -24
- package/dist/esm/libs/kafka/kafka.js.map +0 -1
- package/dist/esm/libs/kafka/producer.d.ts +0 -11
- package/dist/esm/libs/kafka/producer.d.ts.map +0 -1
- package/dist/esm/libs/kafka/producer.js +0 -44
- package/dist/esm/libs/kafka/producer.js.map +0 -1
- package/dist/esm/libs/logger/config.d.ts +0 -5
- package/dist/esm/libs/logger/config.d.ts.map +0 -1
- package/dist/esm/libs/logger/config.js +0 -6
- package/dist/esm/libs/logger/config.js.map +0 -1
- package/dist/esm/libs/s3/config.d.ts +0 -7
- package/dist/esm/libs/s3/config.d.ts.map +0 -1
- package/dist/esm/libs/s3/config.js +0 -7
- package/dist/esm/libs/s3/config.js.map +0 -1
- package/dist/esm/services/KafkaService.d.ts +0 -35
- package/dist/esm/services/KafkaService.d.ts.map +0 -1
- package/dist/esm/services/KafkaService.js +0 -120
- package/dist/esm/services/KafkaService.js.map +0 -1
- package/dist/tsconfig.cjs.tsbuildinfo +0 -1
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- /package/dist/cjs/libs/logger/{logger.js → logger.cjs} +0 -0
- /package/dist/cjs/libs/logger/{logger.js.map → logger.cjs.map} +0 -0
- /package/dist/cjs/tools/{generateChartTool.js → generateChartTool.cjs} +0 -0
- /package/dist/cjs/tools/{generateChartTool.js.map → generateChartTool.cjs.map} +0 -0
- /package/dist/cjs/tools/{proposeFormValuesTool.js → proposeFormValuesTool.cjs} +0 -0
- /package/dist/cjs/tools/{proposeFormValuesTool.js.map → proposeFormValuesTool.cjs.map} +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigProvider = void 0;
|
|
4
|
+
require("dotenv/config");
|
|
5
|
+
function createDefaultConfig() {
|
|
6
|
+
return {
|
|
7
|
+
// Redis configuration
|
|
8
|
+
redis: {
|
|
9
|
+
host: 'localhost',
|
|
10
|
+
port: 6379,
|
|
11
|
+
},
|
|
12
|
+
ai: {
|
|
13
|
+
maxContextMessages: 10,
|
|
14
|
+
},
|
|
15
|
+
s3: {
|
|
16
|
+
bucket: 'ai-agent-attachments',
|
|
17
|
+
presignedUrlExpires: 120,
|
|
18
|
+
region: process.env.AWS_REGION || 'us-east-1',
|
|
19
|
+
},
|
|
20
|
+
fileProcessing: {
|
|
21
|
+
maxExtractedTextSize: 51200,
|
|
22
|
+
enableTextExtraction: true,
|
|
23
|
+
},
|
|
24
|
+
logger: {
|
|
25
|
+
nodeEnv: 'development',
|
|
26
|
+
appName: 'ai-agent-node',
|
|
27
|
+
logLevel: 'debug',
|
|
28
|
+
},
|
|
29
|
+
socket: {
|
|
30
|
+
path: undefined
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Deep merge utility function
|
|
36
|
+
* Merges source into target, with source values taking precedence
|
|
37
|
+
*/
|
|
38
|
+
function deepMerge(target, source) {
|
|
39
|
+
const result = { ...target };
|
|
40
|
+
for (const key in source) {
|
|
41
|
+
if (source[key] !== undefined) {
|
|
42
|
+
if (typeof source[key] === 'object' &&
|
|
43
|
+
source[key] !== null &&
|
|
44
|
+
!Array.isArray(source[key]) &&
|
|
45
|
+
typeof target[key] === 'object' &&
|
|
46
|
+
target[key] !== null &&
|
|
47
|
+
!Array.isArray(target[key])) {
|
|
48
|
+
// Recursively merge nested objects
|
|
49
|
+
result[key] = deepMerge(target[key], source[key]);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Override with source value
|
|
53
|
+
result[key] = source[key];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* ConfigProvider manages runtime configuration
|
|
61
|
+
* Allows setting config overrides through AIAgentService
|
|
62
|
+
*/
|
|
63
|
+
class ConfigProvider {
|
|
64
|
+
constructor() {
|
|
65
|
+
this.runtimeConfig = createDefaultConfig();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the singleton instance of ConfigProvider
|
|
69
|
+
*/
|
|
70
|
+
static getInstance() {
|
|
71
|
+
if (!ConfigProvider.instance) {
|
|
72
|
+
ConfigProvider.instance = new ConfigProvider();
|
|
73
|
+
}
|
|
74
|
+
return ConfigProvider.instance;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the current runtime configuration
|
|
78
|
+
*/
|
|
79
|
+
getConfig() {
|
|
80
|
+
return this.runtimeConfig;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Set configuration overrides
|
|
84
|
+
* Merges the provided overrides with existing config (deep merge)
|
|
85
|
+
* @param overrides - Partial config to override existing values
|
|
86
|
+
*/
|
|
87
|
+
setConfig(overrides) {
|
|
88
|
+
this.runtimeConfig = deepMerge(this.runtimeConfig, overrides);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Reset configuration to defaults (from environment variables)
|
|
92
|
+
*/
|
|
93
|
+
reset() {
|
|
94
|
+
this.runtimeConfig = createDefaultConfig();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.ConfigProvider = ConfigProvider;
|
|
98
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA,yBAAuB;AA0CvB,SAAS,mBAAmB;IAC1B,OAAO;QACL,sBAAsB;QACtB,KAAK,EAAE;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAG,IAAI;SACZ;QACD,EAAE,EAAE;YACF,kBAAkB,EAAE,EAAE;SACvB;QACD,EAAE,EAAE;YACF,MAAM,EAAE,sBAAsB;YAC9B,mBAAmB,EAAE,GAAG;YACxB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;SAC9C;QACD,cAAc,EAAE;YACd,oBAAoB,EAAE,KAAK;YAC3B,oBAAoB,EAAE,IAAI;SAC3B;QACD,MAAM,EAAE;YACN,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;SAChB;KACF,CAAC;AACJ,CAAC;AAGD;;;GAGG;AACH,SAAS,SAAS,CAAgC,MAAS,EAAE,MAAkB;IAC7E,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,IACI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;gBACpB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC/B,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;gBACpB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC7B,CAAC;gBACD,mCAAmC;gBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAQ,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAQ,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAa,cAAc;IAIzB;QACE,IAAI,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,SAA0B;QAClC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAC7C,CAAC;CACF;AAxCD,wCAwCC"}
|
package/dist/cjs/config.d.ts
CHANGED
|
@@ -3,33 +3,66 @@ import 'dotenv/config';
|
|
|
3
3
|
* Centralized configuration for the AI Agent Service
|
|
4
4
|
* All environment variables are accessed through this file
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
export interface Config {
|
|
7
|
+
redis: {
|
|
8
|
+
url?: string;
|
|
9
|
+
host?: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
password?: string;
|
|
12
|
+
database?: number;
|
|
13
13
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
ai: {
|
|
15
|
+
openaiApiKey?: string;
|
|
16
|
+
anthropicApiKey?: string;
|
|
17
|
+
googleApiKey?: string;
|
|
18
|
+
openrouterApiKey?: string;
|
|
19
|
+
maxContextMessages?: number;
|
|
20
|
+
defaultModel?: string;
|
|
21
21
|
};
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
s3: {
|
|
23
|
+
bucket?: string;
|
|
24
|
+
host?: string;
|
|
25
|
+
presignedUrlExpires?: number;
|
|
26
|
+
region?: string;
|
|
24
27
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
readonly backgroundChatProcessingTopic: string;
|
|
28
|
+
fileProcessing: {
|
|
29
|
+
maxExtractedTextSize?: number;
|
|
30
|
+
enableTextExtraction?: boolean;
|
|
29
31
|
};
|
|
30
|
-
|
|
32
|
+
logger: {
|
|
33
|
+
nodeEnv?: string;
|
|
34
|
+
appName?: string;
|
|
35
|
+
logLevel?: string;
|
|
36
|
+
};
|
|
37
|
+
socket: {
|
|
38
|
+
path?: string;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
31
41
|
/**
|
|
32
|
-
*
|
|
42
|
+
* ConfigProvider manages runtime configuration
|
|
43
|
+
* Allows setting config overrides through AIAgentService
|
|
33
44
|
*/
|
|
34
|
-
export declare
|
|
45
|
+
export declare class ConfigProvider {
|
|
46
|
+
private static instance;
|
|
47
|
+
private runtimeConfig;
|
|
48
|
+
private constructor();
|
|
49
|
+
/**
|
|
50
|
+
* Get the singleton instance of ConfigProvider
|
|
51
|
+
*/
|
|
52
|
+
static getInstance(): ConfigProvider;
|
|
53
|
+
/**
|
|
54
|
+
* Get the current runtime configuration
|
|
55
|
+
*/
|
|
56
|
+
getConfig(): Config;
|
|
57
|
+
/**
|
|
58
|
+
* Set configuration overrides
|
|
59
|
+
* Merges the provided overrides with existing config (deep merge)
|
|
60
|
+
* @param overrides - Partial config to override existing values
|
|
61
|
+
*/
|
|
62
|
+
setConfig(overrides: Partial<Config>): void;
|
|
63
|
+
/**
|
|
64
|
+
* Reset configuration to defaults (from environment variables)
|
|
65
|
+
*/
|
|
66
|
+
reset(): void;
|
|
67
|
+
}
|
|
35
68
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/cjs/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;;GAGG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,EAAE,EAAE;QACF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,EAAE,EAAE;QACF,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE;QACd,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AA8DD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI3C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -2,19 +2,43 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AIHelper = void 0;
|
|
4
4
|
const ai_agent_types_1 = require("@multiplayer-app/ai-agent-types");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const FileHelper_js_1 = require("./FileHelper.js");
|
|
5
|
+
const services_1 = require("../services/index.cjs");
|
|
6
|
+
const store_1 = require("../store/index.cjs");
|
|
7
|
+
const logger_1 = require("../libs/logger/index.cjs");
|
|
8
|
+
const store_2 = require("../store/index.cjs");
|
|
10
9
|
class AIHelper {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
constructor(fileHelper, config) {
|
|
11
|
+
this.fileHelper = fileHelper;
|
|
12
|
+
this.aiService = new services_1.AIService(store_1.ModelStore.getInstance(), config.ai);
|
|
13
|
+
}
|
|
14
|
+
clip(value, max) {
|
|
15
|
+
if (value.length <= max)
|
|
16
|
+
return value;
|
|
17
|
+
return `${value.slice(0, max)}…`;
|
|
18
|
+
}
|
|
19
|
+
renderContextValue(value, limits) {
|
|
20
|
+
if (value === null || value === undefined)
|
|
21
|
+
return '';
|
|
22
|
+
if (typeof value === 'string')
|
|
23
|
+
return this.clip(value, limits.maxString);
|
|
24
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
25
|
+
return String(value);
|
|
26
|
+
try {
|
|
27
|
+
const json = JSON.stringify(value);
|
|
28
|
+
return this.clip(json, limits.maxJson);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return '';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async convertUserMessage(msg, ignoreFileAttachments) {
|
|
35
|
+
const userContent = [
|
|
36
|
+
{
|
|
37
|
+
type: 'text',
|
|
15
38
|
text: msg.content
|
|
16
|
-
}
|
|
17
|
-
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
const atts = msg.attachments ?? [];
|
|
18
42
|
if (!atts.length) {
|
|
19
43
|
return userContent;
|
|
20
44
|
}
|
|
@@ -24,21 +48,21 @@ class AIHelper {
|
|
|
24
48
|
if (ignoreFileAttachments) {
|
|
25
49
|
continue;
|
|
26
50
|
}
|
|
27
|
-
if (
|
|
28
|
-
const image = await
|
|
51
|
+
if (this.fileHelper.isImage(att)) {
|
|
52
|
+
const image = await this.fileHelper.prepareImageForVisionAPI(att);
|
|
29
53
|
if (image) {
|
|
30
54
|
userContent.push({
|
|
31
|
-
type:
|
|
55
|
+
type: 'image',
|
|
32
56
|
image: image.image_url.url,
|
|
33
|
-
mediaType: att.mimeType
|
|
57
|
+
mediaType: att.mimeType
|
|
34
58
|
});
|
|
35
59
|
}
|
|
36
60
|
}
|
|
37
61
|
else {
|
|
38
|
-
const fileText = await
|
|
62
|
+
const fileText = await this.fileHelper.extractTextFromDocument(att);
|
|
39
63
|
if (fileText) {
|
|
40
64
|
userContent.push({
|
|
41
|
-
type:
|
|
65
|
+
type: 'text',
|
|
42
66
|
text: `${att.type}: ${att.name}(${att.mimeType})\n ${fileText}`
|
|
43
67
|
});
|
|
44
68
|
}
|
|
@@ -46,31 +70,30 @@ class AIHelper {
|
|
|
46
70
|
continue;
|
|
47
71
|
}
|
|
48
72
|
const md = att.metadata;
|
|
49
|
-
const kind = typeof
|
|
73
|
+
const kind = typeof md?.kind === 'string' ? md.kind : 'unknown';
|
|
50
74
|
lines.push(`- context:${kind}: ${att.name}`);
|
|
51
75
|
if (kind === 'webSnippet') {
|
|
52
|
-
const url = typeof
|
|
53
|
-
const title = typeof
|
|
54
|
-
const selectedText = typeof
|
|
76
|
+
const url = typeof md?.source?.url === 'string' ? md.source.url : att.url;
|
|
77
|
+
const title = typeof md?.title === 'string' ? md.title : undefined;
|
|
78
|
+
const selectedText = typeof md?.selectedText === 'string' ? md.selectedText : '';
|
|
55
79
|
if (url)
|
|
56
80
|
lines.push(` url: ${url}`);
|
|
57
81
|
if (title)
|
|
58
82
|
lines.push(` title: ${title}`);
|
|
59
83
|
if (selectedText) {
|
|
60
|
-
const clipped = selectedText.length > 4000 ? `${selectedText.slice(0, 4000)}…` : selectedText;
|
|
61
84
|
lines.push(' BEGIN_UNTRUSTED_WEB_SNIPPET');
|
|
62
|
-
lines.push(
|
|
85
|
+
lines.push(this.clip(selectedText, 4000));
|
|
63
86
|
lines.push(' END_UNTRUSTED_WEB_SNIPPET');
|
|
64
87
|
}
|
|
65
88
|
continue;
|
|
66
89
|
}
|
|
67
90
|
if (kind === 'formField') {
|
|
68
|
-
const formId = typeof
|
|
69
|
-
const fieldName = typeof
|
|
70
|
-
const fieldLabel = typeof
|
|
71
|
-
const value =
|
|
72
|
-
const inputType = typeof
|
|
73
|
-
const options = Array.isArray(md
|
|
91
|
+
const formId = typeof md?.formId === 'string' ? md.formId : undefined;
|
|
92
|
+
const fieldName = typeof md?.fieldName === 'string' ? md.fieldName : undefined;
|
|
93
|
+
const fieldLabel = typeof md?.fieldLabel === 'string' ? md.fieldLabel : undefined;
|
|
94
|
+
const value = md?.value;
|
|
95
|
+
const inputType = typeof md?.inputType === 'string' ? md.inputType : undefined;
|
|
96
|
+
const options = Array.isArray(md?.options) ? md.options : [];
|
|
74
97
|
if (formId)
|
|
75
98
|
lines.push(` formId: ${formId}`);
|
|
76
99
|
if (fieldName)
|
|
@@ -81,44 +104,47 @@ class AIHelper {
|
|
|
81
104
|
const rendered = options
|
|
82
105
|
.slice(0, 30)
|
|
83
106
|
.map((o) => {
|
|
84
|
-
const v = typeof
|
|
85
|
-
const l = typeof
|
|
107
|
+
const v = typeof o?.value === 'string' ? o.value : '';
|
|
108
|
+
const l = typeof o?.label === 'string' ? o.label : '';
|
|
86
109
|
if (!v && !l)
|
|
87
110
|
return '';
|
|
88
|
-
return l && v ? `${l} (${v})` :
|
|
111
|
+
return l && v ? `${l} (${v})` : l || v;
|
|
89
112
|
})
|
|
90
113
|
.filter(Boolean)
|
|
91
114
|
.join(', ');
|
|
92
115
|
if (rendered)
|
|
93
116
|
lines.push(` options: ${rendered}${options.length > 30 ? '…' : ''}`);
|
|
94
117
|
}
|
|
95
|
-
if (value)
|
|
96
|
-
|
|
118
|
+
if (value !== undefined) {
|
|
119
|
+
const rendered = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
|
|
120
|
+
if (rendered)
|
|
121
|
+
lines.push(` value: ${rendered}`);
|
|
122
|
+
}
|
|
97
123
|
continue;
|
|
98
124
|
}
|
|
99
125
|
if (kind === 'formSnapshot') {
|
|
100
|
-
const formId = typeof
|
|
101
|
-
const formName = typeof
|
|
102
|
-
const fields = Array.isArray(md
|
|
126
|
+
const formId = typeof md?.formId === 'string' ? md.formId : undefined;
|
|
127
|
+
const formName = typeof md?.formName === 'string' ? md.formName : undefined;
|
|
128
|
+
const fields = Array.isArray(md?.fields) ? md.fields : [];
|
|
103
129
|
if (formId)
|
|
104
130
|
lines.push(` formId: ${formId}`);
|
|
105
131
|
if (formName)
|
|
106
132
|
lines.push(` formName: ${formName}`);
|
|
107
133
|
lines.push(' fields:');
|
|
108
134
|
for (const f of fields.slice(0, 50)) {
|
|
109
|
-
const name = typeof
|
|
110
|
-
const label = typeof
|
|
111
|
-
const value =
|
|
112
|
-
const inputType = typeof
|
|
113
|
-
const options = Array.isArray(f
|
|
114
|
-
const clipped = value
|
|
135
|
+
const name = typeof f?.name === 'string' ? f.name : 'unknown';
|
|
136
|
+
const label = typeof f?.label === 'string' ? f.label : undefined;
|
|
137
|
+
const value = f?.value;
|
|
138
|
+
const inputType = typeof f?.inputType === 'string' ? f.inputType : undefined;
|
|
139
|
+
const options = Array.isArray(f?.options) ? f.options : [];
|
|
140
|
+
const clipped = this.renderContextValue(value, { maxString: 1000, maxJson: 2500 });
|
|
115
141
|
const meta = [];
|
|
116
142
|
if (inputType)
|
|
117
143
|
meta.push(`type=${inputType}`);
|
|
118
144
|
if ((inputType === 'select' || inputType === 'radio') && options.length) {
|
|
119
145
|
const opts = options
|
|
120
146
|
.slice(0, 20)
|
|
121
|
-
.map((o) => typeof
|
|
147
|
+
.map((o) => (typeof o?.value === 'string' ? o.value : ''))
|
|
122
148
|
.filter(Boolean)
|
|
123
149
|
.join('|');
|
|
124
150
|
if (opts)
|
|
@@ -128,103 +154,134 @@ class AIHelper {
|
|
|
128
154
|
}
|
|
129
155
|
continue;
|
|
130
156
|
}
|
|
157
|
+
if (kind === 'pageContext') {
|
|
158
|
+
const url = typeof md?.source?.url === 'string' ? md.source.url : att.url;
|
|
159
|
+
const title = typeof md?.title === 'string' ? md.title : undefined;
|
|
160
|
+
const route = typeof md?.source?.route === 'string' ? md.source.route : undefined;
|
|
161
|
+
const data = md?.data;
|
|
162
|
+
if (url)
|
|
163
|
+
lines.push(` url: ${url}`);
|
|
164
|
+
if (title)
|
|
165
|
+
lines.push(` title: ${title}`);
|
|
166
|
+
if (route)
|
|
167
|
+
lines.push(` route: ${route}`);
|
|
168
|
+
if (data && typeof data === 'object') {
|
|
169
|
+
const entries = Object.entries(data)
|
|
170
|
+
.filter(([k]) => typeof k === 'string' && k.length > 0)
|
|
171
|
+
.sort(([a], [b]) => a.localeCompare(b));
|
|
172
|
+
if (entries.length) {
|
|
173
|
+
lines.push(' data:');
|
|
174
|
+
const limits = { maxString: 1000, maxJson: 1500 };
|
|
175
|
+
for (const [k, v] of entries.slice(0, 40)) {
|
|
176
|
+
const rendered = this.renderContextValue(v, limits);
|
|
177
|
+
if (!rendered)
|
|
178
|
+
continue;
|
|
179
|
+
lines.push(` - ${k}: ${rendered}`);
|
|
180
|
+
}
|
|
181
|
+
if (entries.length > 40) {
|
|
182
|
+
lines.push(` - … (${entries.length - 40} more keys)`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (data !== undefined) {
|
|
187
|
+
const rendered = this.renderContextValue(data, { maxString: 1000, maxJson: 2000 });
|
|
188
|
+
if (rendered)
|
|
189
|
+
lines.push(` data: ${rendered}`);
|
|
190
|
+
}
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
131
193
|
// Custom kind: prefer summary, fall back to minimal JSON.
|
|
132
|
-
const title = typeof
|
|
133
|
-
const summary = typeof
|
|
194
|
+
const title = typeof md?.title === 'string' ? md.title : undefined;
|
|
195
|
+
const summary = typeof md?.summary === 'string' ? md.summary : undefined;
|
|
134
196
|
if (title)
|
|
135
197
|
lines.push(` title: ${title}`);
|
|
136
198
|
if (summary) {
|
|
137
|
-
lines.push(` summary: ${
|
|
199
|
+
lines.push(` summary: ${this.clip(summary, 4000)}`);
|
|
138
200
|
continue;
|
|
139
201
|
}
|
|
140
|
-
if (
|
|
141
|
-
const
|
|
142
|
-
|
|
202
|
+
if (md?.data !== undefined) {
|
|
203
|
+
const rendered = this.renderContextValue(md.data, { maxString: 2000, maxJson: 5000 });
|
|
204
|
+
if (rendered)
|
|
205
|
+
lines.push(` data: ${rendered}`);
|
|
143
206
|
}
|
|
144
207
|
}
|
|
145
208
|
if (lines.length) {
|
|
146
209
|
userContent.push({
|
|
147
|
-
type:
|
|
210
|
+
type: 'text',
|
|
148
211
|
text: `Context attachments (non-authoritative; user message is primary):\n ${lines.join('\n')}`
|
|
149
212
|
});
|
|
150
213
|
}
|
|
151
214
|
return userContent;
|
|
152
215
|
}
|
|
153
|
-
|
|
154
|
-
const agents =
|
|
216
|
+
getAgentConfigs(contextKey) {
|
|
217
|
+
const agents = store_2.ConfigStore.getInstance().getAgentsForContext(contextKey);
|
|
155
218
|
if (!agents.length) {
|
|
156
219
|
throw new Error(`Agent configs not found for context key: ${contextKey}`);
|
|
157
220
|
}
|
|
158
221
|
return agents;
|
|
159
222
|
}
|
|
160
|
-
|
|
223
|
+
async getAgentOptions(params, options = {}) {
|
|
161
224
|
const { contextKey, messages, modelId, context, agentName } = params;
|
|
162
|
-
let agentConfig =
|
|
225
|
+
let agentConfig = store_2.ConfigStore.getInstance().getAgentConfigByName(agentName);
|
|
163
226
|
if (contextKey && messages) {
|
|
164
|
-
agentConfig = await
|
|
227
|
+
agentConfig = await this.selectAgentConfig(contextKey, messages);
|
|
165
228
|
}
|
|
166
|
-
const
|
|
167
|
-
const agentOptions = aiService.getAgentOptions(agentConfig, modelId, context);
|
|
229
|
+
const agentOptions = this.aiService.getAgentOptions(agentConfig, modelId, context);
|
|
168
230
|
return {
|
|
169
231
|
...agentOptions,
|
|
170
|
-
...options
|
|
232
|
+
...options
|
|
171
233
|
};
|
|
172
234
|
}
|
|
173
|
-
|
|
174
|
-
const configs =
|
|
235
|
+
async selectAgentConfig(contextKey, messages) {
|
|
236
|
+
const configs = this.getAgentConfigs(contextKey);
|
|
175
237
|
if (configs.length === 1) {
|
|
176
238
|
return configs[0];
|
|
177
239
|
}
|
|
178
|
-
const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
|
|
179
240
|
const systemPrompt = `Select the most appropriate agent for the given user prompt.
|
|
180
241
|
Return only the agent name, no quotes or extra text.
|
|
181
|
-
Available agents: ${JSON.stringify(configs.map(config => ({
|
|
242
|
+
Available agents: ${JSON.stringify(configs.map((config) => ({
|
|
182
243
|
name: config.name,
|
|
183
244
|
description: config.description,
|
|
184
245
|
tools: config.tools.map(({ data }) => data.title)
|
|
185
246
|
})))}`;
|
|
186
|
-
const agentName = await aiService.generateText({
|
|
247
|
+
const agentName = await this.aiService.generateText({
|
|
187
248
|
messages,
|
|
188
249
|
system: systemPrompt,
|
|
189
250
|
temperature: 0.7,
|
|
190
251
|
maxOutputTokens: 2000
|
|
191
252
|
});
|
|
192
|
-
const agent = configs.find(config => config.name === agentName);
|
|
253
|
+
const agent = configs.find((config) => config.name === agentName);
|
|
193
254
|
if (!agent) {
|
|
194
255
|
// fallback, agent not found, grabbing first from the list
|
|
195
256
|
return configs[0];
|
|
196
257
|
}
|
|
197
258
|
return agent;
|
|
198
259
|
}
|
|
199
|
-
|
|
260
|
+
async getAssistantResponse(messages, signal, options = {}) {
|
|
200
261
|
try {
|
|
201
|
-
const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
|
|
202
262
|
const processedOptions = this.processToolChoice(options, messages);
|
|
203
|
-
return aiService.generateText({
|
|
263
|
+
return this.aiService.generateText({
|
|
204
264
|
temperature: 0.7,
|
|
205
265
|
maxOutputTokens: 2000,
|
|
206
266
|
...processedOptions,
|
|
207
|
-
messages: await
|
|
208
|
-
signal
|
|
267
|
+
messages: await this.convertMessages(messages),
|
|
268
|
+
signal
|
|
209
269
|
});
|
|
210
270
|
}
|
|
211
271
|
catch (error) {
|
|
212
|
-
|
|
272
|
+
logger_1.logger.error('AI assistant response generation failed:', error);
|
|
213
273
|
throw error;
|
|
214
274
|
}
|
|
215
275
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (!(options === null || options === void 0 ? void 0 : options.toolChoice)) {
|
|
276
|
+
processToolChoice(options, agentMessages) {
|
|
277
|
+
if (!options?.toolChoice) {
|
|
219
278
|
return options || {};
|
|
220
279
|
}
|
|
221
280
|
// Find the latest assistant message
|
|
222
|
-
const latestAssistantMessage = [...agentMessages]
|
|
223
|
-
.reverse()
|
|
224
|
-
.find(msg => msg.role === ai_agent_types_1.MessageRole.Assistant);
|
|
281
|
+
const latestAssistantMessage = [...agentMessages].reverse().find((msg) => msg.role === ai_agent_types_1.MessageRole.Assistant);
|
|
225
282
|
// Handle 'required' toolChoice: if any tool was called, set to 'auto'
|
|
226
283
|
if (options.toolChoice === 'required') {
|
|
227
|
-
const anyToolWasCalled = (
|
|
284
|
+
const anyToolWasCalled = (latestAssistantMessage?.toolCalls?.length ?? 0) > 0;
|
|
228
285
|
if (anyToolWasCalled) {
|
|
229
286
|
return {
|
|
230
287
|
...options,
|
|
@@ -236,7 +293,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
236
293
|
// Handle specific tool toolChoice: if that specific tool was called, set to 'auto'
|
|
237
294
|
if (typeof options.toolChoice === 'object' && options.toolChoice.type === 'tool') {
|
|
238
295
|
const toolName = options.toolChoice.toolName;
|
|
239
|
-
const toolWasCalled =
|
|
296
|
+
const toolWasCalled = latestAssistantMessage?.toolCalls?.some((toolCall) => toolCall.name === toolName) ?? false;
|
|
240
297
|
if (toolWasCalled) {
|
|
241
298
|
return {
|
|
242
299
|
...options,
|
|
@@ -246,11 +303,10 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
246
303
|
}
|
|
247
304
|
return options;
|
|
248
305
|
}
|
|
249
|
-
|
|
250
|
-
const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
|
|
306
|
+
async streamAssistantResponse(agentMessages, signal, options) {
|
|
251
307
|
const messages = await this.convertMessages(agentMessages);
|
|
252
308
|
const processedOptions = this.processToolChoice(options, agentMessages);
|
|
253
|
-
return aiService.streamText({
|
|
309
|
+
return this.aiService.streamText({
|
|
254
310
|
messages,
|
|
255
311
|
temperature: 0.7,
|
|
256
312
|
maxOutputTokens: 2000,
|
|
@@ -258,8 +314,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
258
314
|
...processedOptions
|
|
259
315
|
});
|
|
260
316
|
}
|
|
261
|
-
|
|
262
|
-
var _a;
|
|
317
|
+
async convertMessages(agentMessages, ignoreToolsAndAttachments = false) {
|
|
263
318
|
const result = [];
|
|
264
319
|
for (const msg of agentMessages) {
|
|
265
320
|
if (msg.role === ai_agent_types_1.MessageRole.User) {
|
|
@@ -281,7 +336,7 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
281
336
|
content: []
|
|
282
337
|
};
|
|
283
338
|
if (!ignoreToolsAndAttachments) {
|
|
284
|
-
|
|
339
|
+
msg.toolCalls?.forEach((toolCall) => {
|
|
285
340
|
if (toolCall.output) {
|
|
286
341
|
assistantMessage.content.push({
|
|
287
342
|
type: 'tool-call',
|
|
@@ -311,17 +366,16 @@ Available agents: ${JSON.stringify(configs.map(config => ({
|
|
|
311
366
|
}
|
|
312
367
|
return result;
|
|
313
368
|
}
|
|
314
|
-
|
|
369
|
+
async generateTitleForMessage(contextKey, messages) {
|
|
315
370
|
try {
|
|
316
|
-
const aiService = new index_js_1.AIService(index_js_2.ModelStore.getInstance());
|
|
317
371
|
const systemPrompt = `Generate descriptive title 5 words maximum for a chat conversation. Return only the title, no quotes or extra text. If user question is opaque, assume it is related to ${contextKey} topic.`;
|
|
318
|
-
return aiService.generateText({
|
|
319
|
-
messages: await
|
|
320
|
-
system: systemPrompt
|
|
372
|
+
return this.aiService.generateText({
|
|
373
|
+
messages: await this.convertMessages(messages, true),
|
|
374
|
+
system: systemPrompt
|
|
321
375
|
});
|
|
322
376
|
}
|
|
323
377
|
catch (error) {
|
|
324
|
-
|
|
378
|
+
logger_1.logger.warn('AI title generation failed, falling back to simple title generation', { error });
|
|
325
379
|
return `${contextKey} session ${new Date().toISOString()}`;
|
|
326
380
|
}
|
|
327
381
|
}
|