@multiplayer-app/ai-agent-node 0.0.1 → 0.1.0-beta.2
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.d.ts.map +1 -0
- package/dist/cjs/config.js +48 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/{helpers → cjs/helpers}/AIHelper.d.ts +1 -1
- package/dist/cjs/helpers/AIHelper.d.ts.map +1 -0
- package/dist/cjs/helpers/AIHelper.js +330 -0
- package/dist/cjs/helpers/AIHelper.js.map +1 -0
- package/dist/cjs/helpers/AIHelper.test.d.ts.map +1 -0
- package/dist/cjs/helpers/AIHelper.test.js +334 -0
- package/dist/cjs/helpers/AIHelper.test.js.map +1 -0
- package/dist/cjs/helpers/ConfigHelper.d.ts.map +1 -0
- package/dist/cjs/helpers/ConfigHelper.js +122 -0
- package/dist/cjs/helpers/ConfigHelper.js.map +1 -0
- package/dist/cjs/helpers/ContextLimiter.d.ts.map +1 -0
- package/dist/cjs/helpers/ContextLimiter.js +169 -0
- package/dist/cjs/helpers/ContextLimiter.js.map +1 -0
- package/dist/cjs/helpers/FileHelper.d.ts.map +1 -0
- package/dist/cjs/helpers/FileHelper.js +215 -0
- package/dist/cjs/helpers/FileHelper.js.map +1 -0
- package/dist/{helpers → cjs/helpers}/SetupHelper.d.ts +1 -1
- package/dist/cjs/helpers/SetupHelper.d.ts.map +1 -0
- package/dist/cjs/helpers/SetupHelper.js +37 -0
- package/dist/cjs/helpers/SetupHelper.js.map +1 -0
- package/dist/cjs/helpers/index.d.ts +6 -0
- package/dist/cjs/helpers/index.d.ts.map +1 -0
- package/dist/cjs/helpers/index.js +22 -0
- package/dist/cjs/helpers/index.js.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/libs/index.d.ts +4 -0
- package/dist/cjs/libs/index.d.ts.map +1 -0
- package/dist/cjs/libs/index.js +20 -0
- package/dist/cjs/libs/index.js.map +1 -0
- package/dist/cjs/libs/kafka/config.d.ts.map +1 -0
- package/dist/cjs/libs/kafka/config.js +8 -0
- package/dist/cjs/libs/kafka/config.js.map +1 -0
- package/dist/cjs/libs/kafka/consumer.d.ts.map +1 -0
- package/dist/cjs/libs/kafka/consumer.js +133 -0
- package/dist/cjs/libs/kafka/consumer.js.map +1 -0
- package/dist/cjs/libs/kafka/index.d.ts +3 -0
- package/dist/cjs/libs/kafka/index.d.ts.map +1 -0
- package/dist/cjs/libs/kafka/index.js +19 -0
- package/dist/cjs/libs/kafka/index.js.map +1 -0
- package/dist/cjs/libs/kafka/kafka.d.ts.map +1 -0
- package/dist/cjs/libs/kafka/kafka.js +27 -0
- package/dist/cjs/libs/kafka/kafka.js.map +1 -0
- package/dist/cjs/libs/kafka/producer.d.ts.map +1 -0
- package/dist/cjs/libs/kafka/producer.js +48 -0
- package/dist/cjs/libs/kafka/producer.js.map +1 -0
- package/dist/cjs/libs/logger/config.d.ts.map +1 -0
- package/dist/cjs/libs/logger/config.js +9 -0
- package/dist/cjs/libs/logger/config.js.map +1 -0
- package/dist/{libs → cjs/libs}/logger/index.d.ts +2 -2
- package/dist/cjs/libs/logger/index.d.ts.map +1 -0
- package/dist/cjs/libs/logger/index.js +38 -0
- package/dist/cjs/libs/logger/index.js.map +1 -0
- package/dist/cjs/libs/logger/kafkajs-logger-creator.d.ts.map +1 -0
- package/dist/cjs/libs/logger/kafkajs-logger-creator.js +33 -0
- package/dist/cjs/libs/logger/kafkajs-logger-creator.js.map +1 -0
- package/dist/cjs/libs/logger/logger.d.ts.map +1 -0
- package/dist/cjs/libs/logger/logger.js +48 -0
- package/dist/cjs/libs/logger/logger.js.map +1 -0
- package/dist/cjs/libs/s3/config.d.ts.map +1 -0
- package/dist/cjs/libs/s3/config.js +10 -0
- package/dist/cjs/libs/s3/config.js.map +1 -0
- package/dist/cjs/libs/s3/index.d.ts +4 -0
- package/dist/cjs/libs/s3/index.d.ts.map +1 -0
- package/dist/cjs/libs/s3/index.js +44 -0
- package/dist/cjs/libs/s3/index.js.map +1 -0
- package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -0
- package/dist/cjs/libs/s3/s3.lib.js +224 -0
- package/dist/cjs/libs/s3/s3.lib.js.map +1 -0
- package/dist/{processors → cjs/processors}/ChatProcessor.d.ts +2 -2
- package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -0
- package/dist/cjs/processors/ChatProcessor.js +614 -0
- package/dist/cjs/processors/ChatProcessor.js.map +1 -0
- package/dist/cjs/processors/ModelsProcessor.d.ts.map +1 -0
- package/dist/cjs/processors/ModelsProcessor.js +34 -0
- package/dist/cjs/processors/ModelsProcessor.js.map +1 -0
- package/dist/cjs/processors/index.d.ts +3 -0
- package/dist/cjs/processors/index.d.ts.map +1 -0
- package/dist/cjs/processors/index.js +19 -0
- package/dist/cjs/processors/index.js.map +1 -0
- package/dist/{services → cjs/services}/AIService.d.ts +1 -1
- package/dist/cjs/services/AIService.d.ts.map +1 -0
- package/dist/cjs/services/AIService.js +200 -0
- package/dist/cjs/services/AIService.js.map +1 -0
- package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -0
- package/dist/cjs/services/InternalEventsHandler.js +60 -0
- package/dist/cjs/services/InternalEventsHandler.js.map +1 -0
- package/dist/cjs/services/KafkaService.d.ts.map +1 -0
- package/dist/cjs/services/KafkaService.js +123 -0
- package/dist/cjs/services/KafkaService.js.map +1 -0
- package/dist/cjs/services/ModelFetcher.d.ts.map +1 -0
- package/dist/cjs/services/ModelFetcher.js +251 -0
- package/dist/cjs/services/ModelFetcher.js.map +1 -0
- package/dist/cjs/services/RedisService.d.ts.map +1 -0
- package/dist/cjs/services/RedisService.js +240 -0
- package/dist/cjs/services/RedisService.js.map +1 -0
- package/dist/cjs/services/SocketService.d.ts.map +1 -0
- package/dist/cjs/services/SocketService.js +133 -0
- package/dist/cjs/services/SocketService.js.map +1 -0
- package/dist/cjs/services/index.d.ts +7 -0
- package/dist/cjs/services/index.d.ts.map +1 -0
- package/dist/cjs/services/index.js +23 -0
- package/dist/cjs/services/index.js.map +1 -0
- package/dist/cjs/store/AgentStore.d.ts.map +1 -0
- package/dist/cjs/store/AgentStore.js +102 -0
- package/dist/cjs/store/AgentStore.js.map +1 -0
- package/dist/cjs/store/ArtifactStore.d.ts.map +1 -0
- package/dist/cjs/store/ArtifactStore.js +31 -0
- package/dist/cjs/store/ArtifactStore.js.map +1 -0
- package/dist/cjs/store/ConfigStore.d.ts.map +1 -0
- package/dist/cjs/store/ConfigStore.js +218 -0
- package/dist/cjs/store/ConfigStore.js.map +1 -0
- package/dist/cjs/store/ConfigStore.test.d.ts.map +1 -0
- package/dist/cjs/store/ConfigStore.test.js +261 -0
- package/dist/cjs/store/ConfigStore.test.js.map +1 -0
- package/dist/cjs/store/ModelStore.d.ts.map +1 -0
- package/dist/cjs/store/ModelStore.js +85 -0
- package/dist/cjs/store/ModelStore.js.map +1 -0
- package/dist/cjs/store/ModelStore.test.d.ts.map +1 -0
- package/dist/cjs/store/ModelStore.test.js +392 -0
- package/dist/cjs/store/ModelStore.test.js.map +1 -0
- package/dist/cjs/store/index.d.ts +5 -0
- package/dist/cjs/store/index.d.ts.map +1 -0
- package/dist/cjs/store/index.js +21 -0
- package/dist/cjs/store/index.js.map +1 -0
- package/dist/cjs/tools/generateChartTool.d.ts.map +1 -0
- package/dist/cjs/tools/generateChartTool.js +128 -0
- package/dist/cjs/tools/generateChartTool.js.map +1 -0
- package/dist/cjs/tools/proposeFormValuesTool.d.ts.map +1 -0
- package/dist/cjs/tools/proposeFormValuesTool.js +60 -0
- package/dist/cjs/tools/proposeFormValuesTool.js.map +1 -0
- package/dist/esm/config.d.ts +35 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/helpers/AIHelper.d.ts +23 -0
- package/dist/esm/helpers/AIHelper.d.ts.map +1 -0
- package/dist/{helpers → esm/helpers}/AIHelper.js +5 -5
- package/dist/esm/helpers/AIHelper.js.map +1 -0
- package/dist/esm/helpers/AIHelper.test.d.ts +2 -0
- package/dist/esm/helpers/AIHelper.test.d.ts.map +1 -0
- package/dist/{helpers → esm/helpers}/AIHelper.test.js +2 -2
- package/dist/esm/helpers/AIHelper.test.js.map +1 -0
- package/dist/esm/helpers/ConfigHelper.d.ts +20 -0
- package/dist/esm/helpers/ConfigHelper.d.ts.map +1 -0
- package/dist/{helpers → esm/helpers}/ConfigHelper.js +1 -1
- package/dist/esm/helpers/ConfigHelper.js.map +1 -0
- package/dist/esm/helpers/ContextLimiter.d.ts +82 -0
- package/dist/esm/helpers/ContextLimiter.d.ts.map +1 -0
- package/dist/esm/helpers/ContextLimiter.js.map +1 -0
- package/dist/esm/helpers/FileHelper.d.ts +31 -0
- package/dist/esm/helpers/FileHelper.d.ts.map +1 -0
- package/dist/{helpers → esm/helpers}/FileHelper.js +3 -3
- package/dist/esm/helpers/FileHelper.js.map +1 -0
- package/dist/esm/helpers/SetupHelper.d.ts +5 -0
- package/dist/esm/helpers/SetupHelper.d.ts.map +1 -0
- package/dist/{helpers → esm/helpers}/SetupHelper.js +5 -5
- package/dist/esm/helpers/SetupHelper.js.map +1 -0
- package/dist/esm/helpers/index.d.ts +6 -0
- package/dist/esm/helpers/index.d.ts.map +1 -0
- package/dist/esm/helpers/index.js +6 -0
- package/dist/esm/helpers/index.js.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/libs/index.d.ts +4 -0
- package/dist/esm/libs/index.d.ts.map +1 -0
- package/dist/esm/libs/index.js +4 -0
- package/dist/esm/libs/index.js.map +1 -0
- package/dist/esm/libs/kafka/config.d.ts +5 -0
- package/dist/esm/libs/kafka/config.d.ts.map +1 -0
- package/dist/esm/libs/kafka/config.js.map +1 -0
- package/dist/esm/libs/kafka/consumer.d.ts +16 -0
- package/dist/esm/libs/kafka/consumer.d.ts.map +1 -0
- package/dist/{libs → esm/libs}/kafka/consumer.js +3 -3
- package/dist/esm/libs/kafka/consumer.js.map +1 -0
- package/dist/esm/libs/kafka/index.d.ts +3 -0
- package/dist/esm/libs/kafka/index.d.ts.map +1 -0
- package/dist/esm/libs/kafka/index.js +3 -0
- package/dist/esm/libs/kafka/index.js.map +1 -0
- package/dist/esm/libs/kafka/kafka.d.ts +3 -0
- package/dist/esm/libs/kafka/kafka.d.ts.map +1 -0
- package/dist/{libs → esm/libs}/kafka/kafka.js +2 -2
- package/dist/esm/libs/kafka/kafka.js.map +1 -0
- package/dist/esm/libs/kafka/producer.d.ts +11 -0
- package/dist/esm/libs/kafka/producer.d.ts.map +1 -0
- package/dist/{libs → esm/libs}/kafka/producer.js +1 -1
- package/dist/esm/libs/kafka/producer.js.map +1 -0
- package/dist/esm/libs/logger/config.d.ts +5 -0
- package/dist/esm/libs/logger/config.d.ts.map +1 -0
- package/dist/esm/libs/logger/config.js.map +1 -0
- package/dist/esm/libs/logger/index.d.ts +10 -0
- package/dist/esm/libs/logger/index.d.ts.map +1 -0
- package/dist/{libs → esm/libs}/logger/index.js +2 -2
- package/dist/esm/libs/logger/index.js.map +1 -0
- package/dist/esm/libs/logger/kafkajs-logger-creator.d.ts +12 -0
- package/dist/esm/libs/logger/kafkajs-logger-creator.d.ts.map +1 -0
- package/dist/{libs → esm/libs}/logger/kafkajs-logger-creator.js +1 -1
- package/dist/esm/libs/logger/kafkajs-logger-creator.js.map +1 -0
- package/dist/esm/libs/logger/logger.d.ts +42 -0
- package/dist/esm/libs/logger/logger.d.ts.map +1 -0
- package/dist/esm/libs/logger/logger.js.map +1 -0
- package/dist/esm/libs/s3/config.d.ts +7 -0
- package/dist/esm/libs/s3/config.d.ts.map +1 -0
- package/dist/esm/libs/s3/config.js.map +1 -0
- package/dist/esm/libs/s3/index.d.ts +4 -0
- package/dist/esm/libs/s3/index.d.ts.map +1 -0
- package/dist/esm/libs/s3/index.js +4 -0
- package/dist/esm/libs/s3/index.js.map +1 -0
- package/dist/esm/libs/s3/s3.lib.d.ts +25 -0
- package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -0
- package/dist/{libs → esm/libs}/s3/s3.lib.js +2 -2
- package/dist/esm/libs/s3/s3.lib.js.map +1 -0
- package/dist/esm/processors/ChatProcessor.d.ts +66 -0
- package/dist/esm/processors/ChatProcessor.d.ts.map +1 -0
- package/dist/{processors → esm/processors}/ChatProcessor.js +7 -7
- package/dist/esm/processors/ChatProcessor.js.map +1 -0
- package/dist/esm/processors/ModelsProcessor.d.ts +11 -0
- package/dist/esm/processors/ModelsProcessor.d.ts.map +1 -0
- package/dist/{processors → esm/processors}/ModelsProcessor.js +1 -1
- package/dist/esm/processors/ModelsProcessor.js.map +1 -0
- package/dist/esm/processors/index.d.ts +3 -0
- package/dist/esm/processors/index.d.ts.map +1 -0
- package/dist/esm/processors/index.js +3 -0
- package/dist/esm/processors/index.js.map +1 -0
- package/dist/esm/services/AIService.d.ts +48 -0
- package/dist/esm/services/AIService.d.ts.map +1 -0
- package/dist/{services → esm/services}/AIService.js +2 -2
- package/dist/esm/services/AIService.js.map +1 -0
- package/dist/esm/services/InternalEventsHandler.d.ts +21 -0
- package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -0
- package/dist/{services → esm/services}/InternalEventsHandler.js +2 -2
- package/dist/esm/services/InternalEventsHandler.js.map +1 -0
- package/dist/esm/services/KafkaService.d.ts +35 -0
- package/dist/esm/services/KafkaService.d.ts.map +1 -0
- package/dist/{services → esm/services}/KafkaService.js +5 -5
- package/dist/esm/services/KafkaService.js.map +1 -0
- package/dist/esm/services/ModelFetcher.d.ts +54 -0
- package/dist/esm/services/ModelFetcher.d.ts.map +1 -0
- package/dist/{services → esm/services}/ModelFetcher.js +2 -2
- package/dist/esm/services/ModelFetcher.js.map +1 -0
- package/dist/esm/services/RedisService.d.ts +90 -0
- package/dist/esm/services/RedisService.d.ts.map +1 -0
- package/dist/{services → esm/services}/RedisService.js +2 -2
- package/dist/esm/services/RedisService.js.map +1 -0
- package/dist/esm/services/SocketService.d.ts +39 -0
- package/dist/esm/services/SocketService.d.ts.map +1 -0
- package/dist/{services → esm/services}/SocketService.js +2 -2
- package/dist/esm/services/SocketService.js.map +1 -0
- package/dist/esm/services/index.d.ts +7 -0
- package/dist/esm/services/index.d.ts.map +1 -0
- package/dist/esm/services/index.js +7 -0
- package/dist/esm/services/index.js.map +1 -0
- package/dist/esm/store/AgentStore.d.ts +48 -0
- package/dist/esm/store/AgentStore.d.ts.map +1 -0
- package/dist/{store → esm/store}/AgentStore.js +1 -1
- package/dist/esm/store/AgentStore.js.map +1 -0
- package/dist/esm/store/ArtifactStore.d.ts +13 -0
- package/dist/esm/store/ArtifactStore.d.ts.map +1 -0
- package/dist/esm/store/ArtifactStore.js.map +1 -0
- package/dist/esm/store/ConfigStore.d.ts +89 -0
- package/dist/esm/store/ConfigStore.d.ts.map +1 -0
- package/dist/{store → esm/store}/ConfigStore.js +3 -3
- package/dist/esm/store/ConfigStore.js.map +1 -0
- package/dist/esm/store/ConfigStore.test.d.ts +2 -0
- package/dist/esm/store/ConfigStore.test.d.ts.map +1 -0
- package/dist/{store → esm/store}/ConfigStore.test.js +1 -1
- package/dist/esm/store/ConfigStore.test.js.map +1 -0
- package/dist/esm/store/ModelStore.d.ts +44 -0
- package/dist/esm/store/ModelStore.d.ts.map +1 -0
- package/dist/{store → esm/store}/ModelStore.js +2 -2
- package/dist/esm/store/ModelStore.js.map +1 -0
- package/dist/esm/store/ModelStore.test.d.ts +2 -0
- package/dist/esm/store/ModelStore.test.d.ts.map +1 -0
- package/dist/{store → esm/store}/ModelStore.test.js +1 -1
- package/dist/esm/store/ModelStore.test.js.map +1 -0
- package/dist/esm/store/index.d.ts +5 -0
- package/dist/esm/store/index.d.ts.map +1 -0
- package/dist/esm/store/index.js +5 -0
- package/dist/esm/store/index.js.map +1 -0
- package/dist/esm/tools/generateChartTool.d.ts +24 -0
- package/dist/esm/tools/generateChartTool.d.ts.map +1 -0
- package/dist/esm/tools/generateChartTool.js.map +1 -0
- package/dist/esm/tools/proposeFormValuesTool.d.ts +35 -0
- package/dist/esm/tools/proposeFormValuesTool.d.ts.map +1 -0
- package/dist/esm/tools/proposeFormValuesTool.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +18 -8
- package/.env.example +0 -45
- package/config.example.json +0 -73
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/helpers/AIHelper.d.ts.map +0 -1
- package/dist/helpers/AIHelper.js.map +0 -1
- package/dist/helpers/AIHelper.test.d.ts.map +0 -1
- package/dist/helpers/AIHelper.test.js.map +0 -1
- package/dist/helpers/ConfigHelper.d.ts.map +0 -1
- package/dist/helpers/ConfigHelper.js.map +0 -1
- package/dist/helpers/ContextLimiter.d.ts.map +0 -1
- package/dist/helpers/ContextLimiter.js.map +0 -1
- package/dist/helpers/FileHelper.d.ts.map +0 -1
- package/dist/helpers/FileHelper.js.map +0 -1
- package/dist/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/helpers/SetupHelper.js.map +0 -1
- package/dist/helpers/index.d.ts +0 -6
- package/dist/helpers/index.d.ts.map +0 -1
- package/dist/helpers/index.js +0 -6
- package/dist/helpers/index.js.map +0 -1
- package/dist/index.d.ts +0 -18
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -17
- package/dist/index.js.map +0 -1
- package/dist/libs/index.d.ts +0 -4
- package/dist/libs/index.d.ts.map +0 -1
- package/dist/libs/index.js +0 -4
- package/dist/libs/index.js.map +0 -1
- package/dist/libs/kafka/config.d.ts.map +0 -1
- package/dist/libs/kafka/config.js.map +0 -1
- package/dist/libs/kafka/consumer.d.ts.map +0 -1
- package/dist/libs/kafka/consumer.js.map +0 -1
- package/dist/libs/kafka/index.d.ts +0 -3
- package/dist/libs/kafka/index.d.ts.map +0 -1
- package/dist/libs/kafka/index.js +0 -3
- package/dist/libs/kafka/index.js.map +0 -1
- package/dist/libs/kafka/kafka.d.ts.map +0 -1
- package/dist/libs/kafka/kafka.js.map +0 -1
- package/dist/libs/kafka/producer.d.ts.map +0 -1
- package/dist/libs/kafka/producer.js.map +0 -1
- package/dist/libs/logger/config.d.ts.map +0 -1
- package/dist/libs/logger/config.js.map +0 -1
- package/dist/libs/logger/index.d.ts.map +0 -1
- package/dist/libs/logger/index.js.map +0 -1
- package/dist/libs/logger/kafkajs-logger-creator.d.ts.map +0 -1
- package/dist/libs/logger/kafkajs-logger-creator.js.map +0 -1
- package/dist/libs/logger/logger.d.ts.map +0 -1
- package/dist/libs/logger/logger.js.map +0 -1
- package/dist/libs/s3/config.d.ts.map +0 -1
- package/dist/libs/s3/config.js.map +0 -1
- package/dist/libs/s3/index.d.ts +0 -4
- package/dist/libs/s3/index.d.ts.map +0 -1
- package/dist/libs/s3/index.js +0 -4
- package/dist/libs/s3/index.js.map +0 -1
- package/dist/libs/s3/s3.lib.d.ts.map +0 -1
- package/dist/libs/s3/s3.lib.js.map +0 -1
- package/dist/processors/ChatProcessor.d.ts.map +0 -1
- package/dist/processors/ChatProcessor.js.map +0 -1
- package/dist/processors/ModelsProcessor.d.ts.map +0 -1
- package/dist/processors/ModelsProcessor.js.map +0 -1
- package/dist/processors/index.d.ts +0 -3
- package/dist/processors/index.d.ts.map +0 -1
- package/dist/processors/index.js +0 -3
- package/dist/processors/index.js.map +0 -1
- package/dist/services/AIService.d.ts.map +0 -1
- package/dist/services/AIService.js.map +0 -1
- package/dist/services/InternalEventsHandler.d.ts.map +0 -1
- package/dist/services/InternalEventsHandler.js.map +0 -1
- package/dist/services/KafkaService.d.ts.map +0 -1
- package/dist/services/KafkaService.js.map +0 -1
- package/dist/services/ModelFetcher.d.ts.map +0 -1
- package/dist/services/ModelFetcher.js.map +0 -1
- package/dist/services/RedisService.d.ts.map +0 -1
- package/dist/services/RedisService.js.map +0 -1
- package/dist/services/SocketService.d.ts.map +0 -1
- package/dist/services/SocketService.js.map +0 -1
- package/dist/services/index.d.ts +0 -7
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -7
- package/dist/services/index.js.map +0 -1
- package/dist/store/AgentStore.d.ts.map +0 -1
- package/dist/store/AgentStore.js.map +0 -1
- package/dist/store/ArtifactStore.d.ts.map +0 -1
- package/dist/store/ArtifactStore.js.map +0 -1
- package/dist/store/ConfigStore.d.ts.map +0 -1
- package/dist/store/ConfigStore.js.map +0 -1
- package/dist/store/ConfigStore.test.d.ts.map +0 -1
- package/dist/store/ConfigStore.test.js.map +0 -1
- package/dist/store/ModelStore.d.ts.map +0 -1
- package/dist/store/ModelStore.js.map +0 -1
- package/dist/store/ModelStore.test.d.ts.map +0 -1
- package/dist/store/ModelStore.test.js.map +0 -1
- package/dist/store/index.d.ts +0 -5
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js +0 -5
- package/dist/store/index.js.map +0 -1
- package/dist/tools/generateChartTool.d.ts.map +0 -1
- package/dist/tools/generateChartTool.js.map +0 -1
- package/dist/tools/proposeFormValuesTool.d.ts.map +0 -1
- package/dist/tools/proposeFormValuesTool.js.map +0 -1
- package/src/config.ts +0 -46
- package/src/helpers/AIHelper.test.ts +0 -375
- package/src/helpers/AIHelper.ts +0 -353
- package/src/helpers/ConfigHelper.ts +0 -130
- package/src/helpers/ContextLimiter.ts +0 -228
- package/src/helpers/FileHelper.ts +0 -197
- package/src/helpers/SetupHelper.ts +0 -35
- package/src/helpers/index.ts +0 -5
- package/src/index.ts +0 -18
- package/src/libs/index.ts +0 -3
- package/src/libs/kafka/config.ts +0 -4
- package/src/libs/kafka/consumer.ts +0 -161
- package/src/libs/kafka/index.ts +0 -2
- package/src/libs/kafka/kafka.ts +0 -27
- package/src/libs/kafka/producer.ts +0 -48
- package/src/libs/logger/config.ts +0 -4
- package/src/libs/logger/index.ts +0 -21
- package/src/libs/logger/kafkajs-logger-creator.ts +0 -28
- package/src/libs/logger/logger.ts +0 -60
- package/src/libs/s3/config.ts +0 -7
- package/src/libs/s3/index.ts +0 -3
- package/src/libs/s3/s3.lib.ts +0 -284
- package/src/processors/ChatProcessor.ts +0 -713
- package/src/processors/ModelsProcessor.ts +0 -34
- package/src/processors/index.ts +0 -2
- package/src/services/AIService.ts +0 -241
- package/src/services/InternalEventsHandler.ts +0 -61
- package/src/services/KafkaService.ts +0 -142
- package/src/services/ModelFetcher.ts +0 -286
- package/src/services/RedisService.ts +0 -285
- package/src/services/SocketService.ts +0 -153
- package/src/services/index.ts +0 -6
- package/src/store/AgentStore.ts +0 -138
- package/src/store/ArtifactStore.ts +0 -29
- package/src/store/ConfigStore.test.ts +0 -314
- package/src/store/ConfigStore.ts +0 -239
- package/src/store/ModelStore.test.ts +0 -473
- package/src/store/ModelStore.ts +0 -93
- package/src/store/index.ts +0 -4
- package/src/tools/generateChartTool.ts +0 -131
- package/src/tools/proposeFormValuesTool.ts +0 -67
- package/tsconfig.json +0 -24
- /package/dist/{config.d.ts → cjs/config.d.ts} +0 -0
- /package/dist/{helpers → cjs/helpers}/AIHelper.test.d.ts +0 -0
- /package/dist/{helpers → cjs/helpers}/ConfigHelper.d.ts +0 -0
- /package/dist/{helpers → cjs/helpers}/ContextLimiter.d.ts +0 -0
- /package/dist/{helpers → cjs/helpers}/FileHelper.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/kafka/config.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/kafka/consumer.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/kafka/kafka.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/kafka/producer.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/logger/config.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/logger/kafkajs-logger-creator.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/logger/logger.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/s3/config.d.ts +0 -0
- /package/dist/{libs → cjs/libs}/s3/s3.lib.d.ts +0 -0
- /package/dist/{processors → cjs/processors}/ModelsProcessor.d.ts +0 -0
- /package/dist/{services → cjs/services}/InternalEventsHandler.d.ts +0 -0
- /package/dist/{services → cjs/services}/KafkaService.d.ts +0 -0
- /package/dist/{services → cjs/services}/ModelFetcher.d.ts +0 -0
- /package/dist/{services → cjs/services}/RedisService.d.ts +0 -0
- /package/dist/{services → cjs/services}/SocketService.d.ts +0 -0
- /package/dist/{store → cjs/store}/AgentStore.d.ts +0 -0
- /package/dist/{store → cjs/store}/ArtifactStore.d.ts +0 -0
- /package/dist/{store → cjs/store}/ConfigStore.d.ts +0 -0
- /package/dist/{store → cjs/store}/ConfigStore.test.d.ts +0 -0
- /package/dist/{store → cjs/store}/ModelStore.d.ts +0 -0
- /package/dist/{store → cjs/store}/ModelStore.test.d.ts +0 -0
- /package/dist/{tools → cjs/tools}/generateChartTool.d.ts +0 -0
- /package/dist/{tools → cjs/tools}/proposeFormValuesTool.d.ts +0 -0
- /package/dist/{config.js → esm/config.js} +0 -0
- /package/dist/{helpers → esm/helpers}/ContextLimiter.js +0 -0
- /package/dist/{libs → esm/libs}/kafka/config.js +0 -0
- /package/dist/{libs → esm/libs}/logger/config.js +0 -0
- /package/dist/{libs → esm/libs}/logger/logger.js +0 -0
- /package/dist/{libs → esm/libs}/s3/config.js +0 -0
- /package/dist/{store → esm/store}/ArtifactStore.js +0 -0
- /package/dist/{tools → esm/tools}/generateChartTool.js +0 -0
- /package/dist/{tools → esm/tools}/proposeFormValuesTool.js +0 -0
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import { AgentMessage, MessageRole } from '@multiplayer-app/ai-agent-types';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Options for limiting chat context
|
|
5
|
-
*/
|
|
6
|
-
export interface ContextLimitOptions {
|
|
7
|
-
/**
|
|
8
|
-
* Maximum number of messages to include in context.
|
|
9
|
-
* Default: 50 (common practice: 20-100 messages depending on use case)
|
|
10
|
-
*/
|
|
11
|
-
maxMessages?: number;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Maximum token count (if token counting is implemented).
|
|
15
|
-
* This is a future enhancement - currently not used.
|
|
16
|
-
*/
|
|
17
|
-
maxTokens?: number;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Whether to always keep the first user message (often contains important context).
|
|
21
|
-
* Default: true
|
|
22
|
-
*/
|
|
23
|
-
keepFirstUserMessage?: boolean;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Whether to keep all system messages (if any exist).
|
|
27
|
-
* Default: true
|
|
28
|
-
*/
|
|
29
|
-
keepSystemMessages?: boolean;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Common practices for limiting AI context:
|
|
34
|
-
*
|
|
35
|
-
* 1. **Message Count Limiting** (implemented here)
|
|
36
|
-
* - Keep only the last N messages
|
|
37
|
-
* - Most common and simplest approach
|
|
38
|
-
* - Typical values: 20-100 messages depending on use case
|
|
39
|
-
*
|
|
40
|
-
* 2. **Token-Based Limiting** (future enhancement)
|
|
41
|
-
* - Count tokens and keep messages until hitting token budget
|
|
42
|
-
* - More accurate for cost control
|
|
43
|
-
* - Requires token counting library (e.g., tiktoken, @anthropic-ai/tokenizer)
|
|
44
|
-
*
|
|
45
|
-
* 3. **Hybrid Approach** (future enhancement)
|
|
46
|
-
* - Combine message count with token budget as safety check
|
|
47
|
-
* - Best of both worlds
|
|
48
|
-
*
|
|
49
|
-
* 4. **Sliding Window with Summary** (advanced)
|
|
50
|
-
* - Keep recent messages + summarize older ones
|
|
51
|
-
* - Requires summarization step
|
|
52
|
-
*
|
|
53
|
-
* 5. **Priority-Based** (implemented via keepFirstUserMessage)
|
|
54
|
-
* - Always keep system messages, first user message, and recent messages
|
|
55
|
-
* - Preserves important context while limiting size
|
|
56
|
-
*/
|
|
57
|
-
export class ContextLimiter {
|
|
58
|
-
/**
|
|
59
|
-
* Limits the context by keeping only the most recent messages
|
|
60
|
-
* while preserving important messages (first user message, system messages).
|
|
61
|
-
*
|
|
62
|
-
* @param messages - All messages from the chat (assumed to be in chronological order)
|
|
63
|
-
* @param options - Limiting options
|
|
64
|
-
* @returns Limited array of messages in original order
|
|
65
|
-
*/
|
|
66
|
-
static limitContext(
|
|
67
|
-
messages: AgentMessage[],
|
|
68
|
-
options: ContextLimitOptions = {}
|
|
69
|
-
): AgentMessage[] {
|
|
70
|
-
const {
|
|
71
|
-
maxMessages = 5,
|
|
72
|
-
keepFirstUserMessage = true,
|
|
73
|
-
keepSystemMessages = true,
|
|
74
|
-
} = options;
|
|
75
|
-
|
|
76
|
-
// If we have fewer messages than the limit, return all
|
|
77
|
-
if (messages.length <= maxMessages) {
|
|
78
|
-
return messages;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Separate system messages from the rest
|
|
82
|
-
const systemMessages: AgentMessage[] = [];
|
|
83
|
-
const nonSystemMessages: AgentMessage[] = [];
|
|
84
|
-
|
|
85
|
-
messages.forEach((msg) => {
|
|
86
|
-
if (msg.role === MessageRole.System && keepSystemMessages) {
|
|
87
|
-
systemMessages.push(msg);
|
|
88
|
-
} else {
|
|
89
|
-
nonSystemMessages.push(msg);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
// Find the first user message (if we need to keep it)
|
|
94
|
-
const firstUserMessageIndex = keepFirstUserMessage
|
|
95
|
-
? nonSystemMessages.findIndex((msg) => msg.role === MessageRole.User)
|
|
96
|
-
: -1;
|
|
97
|
-
const firstUserMessage = firstUserMessageIndex >= 0
|
|
98
|
-
? nonSystemMessages[firstUserMessageIndex]
|
|
99
|
-
: undefined;
|
|
100
|
-
|
|
101
|
-
// Calculate how many recent messages we can keep
|
|
102
|
-
// Reserve slots for: system messages
|
|
103
|
-
let availableSlots = maxMessages - systemMessages.length;
|
|
104
|
-
const shouldKeepFirstUser = keepFirstUserMessage && firstUserMessage !== undefined;
|
|
105
|
-
|
|
106
|
-
// Get the most recent messages (from the end)
|
|
107
|
-
// We'll check if first user is in recent messages after slicing
|
|
108
|
-
const recentCount = Math.max(0, availableSlots);
|
|
109
|
-
const recentStartIndex = Math.max(0, nonSystemMessages.length - recentCount);
|
|
110
|
-
const recentMessages = nonSystemMessages.slice(recentStartIndex);
|
|
111
|
-
|
|
112
|
-
// Check if first user message is already in recent messages
|
|
113
|
-
const firstUserInRecent = shouldKeepFirstUser && firstUserMessage
|
|
114
|
-
? recentMessages.some((msg) => msg.id === firstUserMessage.id)
|
|
115
|
-
: false;
|
|
116
|
-
|
|
117
|
-
// If first user is not in recent and we need to keep it, we need to make room
|
|
118
|
-
if (shouldKeepFirstUser && firstUserMessage && !firstUserInRecent) {
|
|
119
|
-
// Remove the oldest recent message to make room for first user message
|
|
120
|
-
if (recentMessages.length > 0) {
|
|
121
|
-
recentMessages.shift();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Build the set of messages to keep
|
|
126
|
-
const messagesToKeep = new Set<string>();
|
|
127
|
-
|
|
128
|
-
// Add system messages
|
|
129
|
-
systemMessages.forEach((msg) => messagesToKeep.add(msg.id));
|
|
130
|
-
|
|
131
|
-
// Add first user message if needed
|
|
132
|
-
if (shouldKeepFirstUser && firstUserMessage) {
|
|
133
|
-
messagesToKeep.add(firstUserMessage.id);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Add recent messages
|
|
137
|
-
recentMessages.forEach((msg) => messagesToKeep.add(msg.id));
|
|
138
|
-
|
|
139
|
-
// Reconstruct in original order
|
|
140
|
-
return messages.filter((msg) => messagesToKeep.has(msg.id));
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Estimates token count for a message (rough approximation).
|
|
145
|
-
* For accurate token counting, use a proper tokenizer library.
|
|
146
|
-
*
|
|
147
|
-
* This is a simple approximation: ~4 characters per token for English text.
|
|
148
|
-
*
|
|
149
|
-
* @param message - Message to estimate tokens for
|
|
150
|
-
* @returns Estimated token count
|
|
151
|
-
*/
|
|
152
|
-
static estimateTokens(message: AgentMessage): number {
|
|
153
|
-
const content = typeof message.content === 'string'
|
|
154
|
-
? message.content
|
|
155
|
-
: JSON.stringify(message.content);
|
|
156
|
-
|
|
157
|
-
// Rough approximation: 1 token ≈ 4 characters for English
|
|
158
|
-
// This is a simplified estimate - actual tokenization varies by model
|
|
159
|
-
const baseTokens = Math.ceil(content.length / 4);
|
|
160
|
-
|
|
161
|
-
// Add overhead for message structure (role, formatting, etc.)
|
|
162
|
-
const overhead = 10;
|
|
163
|
-
|
|
164
|
-
// Add tokens for tool calls if present
|
|
165
|
-
const toolCallTokens = message.toolCalls?.reduce((acc, toolCall) => {
|
|
166
|
-
const inputTokens = Math.ceil(JSON.stringify(toolCall.input).length / 4);
|
|
167
|
-
const outputTokens = toolCall.output
|
|
168
|
-
? Math.ceil(JSON.stringify(toolCall.output).length / 4)
|
|
169
|
-
: 0;
|
|
170
|
-
return acc + inputTokens + outputTokens + 20; // 20 for tool call structure
|
|
171
|
-
}, 0) || 0;
|
|
172
|
-
|
|
173
|
-
return baseTokens + overhead + toolCallTokens;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Limits context by token count (future enhancement).
|
|
178
|
-
* Currently not implemented - requires proper tokenizer.
|
|
179
|
-
*
|
|
180
|
-
* @param messages - All messages from the chat
|
|
181
|
-
* @param maxTokens - Maximum token count
|
|
182
|
-
* @returns Limited array of messages
|
|
183
|
-
*/
|
|
184
|
-
static limitByTokens(
|
|
185
|
-
messages: AgentMessage[],
|
|
186
|
-
maxTokens: number
|
|
187
|
-
): AgentMessage[] {
|
|
188
|
-
// This is a placeholder for token-based limiting
|
|
189
|
-
// To implement properly, you would:
|
|
190
|
-
// 1. Install a tokenizer (e.g., tiktoken for OpenAI, @anthropic-ai/tokenizer for Claude)
|
|
191
|
-
// 2. Count tokens for each message
|
|
192
|
-
// 3. Keep messages from the end until hitting the token limit
|
|
193
|
-
// 4. Always keep system messages and optionally first user message
|
|
194
|
-
|
|
195
|
-
let totalTokens = 0;
|
|
196
|
-
const limitedMessages: AgentMessage[] = [];
|
|
197
|
-
|
|
198
|
-
// Keep system messages first
|
|
199
|
-
const systemMessages = messages.filter(
|
|
200
|
-
(msg) => msg.role === MessageRole.System
|
|
201
|
-
);
|
|
202
|
-
systemMessages.forEach((msg) => {
|
|
203
|
-
const tokens = this.estimateTokens(msg);
|
|
204
|
-
if (totalTokens + tokens <= maxTokens) {
|
|
205
|
-
limitedMessages.push(msg);
|
|
206
|
-
totalTokens += tokens;
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
// Then keep messages from the end
|
|
211
|
-
const nonSystemMessages = messages
|
|
212
|
-
.filter((msg) => msg.role !== MessageRole.System)
|
|
213
|
-
.reverse();
|
|
214
|
-
|
|
215
|
-
for (const message of nonSystemMessages) {
|
|
216
|
-
const tokens = this.estimateTokens(message);
|
|
217
|
-
if (totalTokens + tokens <= maxTokens) {
|
|
218
|
-
limitedMessages.unshift(message); // Add to beginning to maintain order
|
|
219
|
-
totalTokens += tokens;
|
|
220
|
-
} else {
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
return limitedMessages;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import type { AgentAttachment } from '@multiplayer-app/ai-agent-types';
|
|
2
|
-
import { AgentAttachmentType } from '@multiplayer-app/ai-agent-types';
|
|
3
|
-
import { s3 } from '../libs/s3';
|
|
4
|
-
import { logger } from '../libs/logger';
|
|
5
|
-
import { PDFParse } from 'pdf-parse';
|
|
6
|
-
import {config} from "../config";
|
|
7
|
-
|
|
8
|
-
export interface ProcessedAttachment extends AgentAttachment {
|
|
9
|
-
extractedText?: string;
|
|
10
|
-
processingStatus?: 'pending' | 'processed' | 'failed';
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Checks if an attachment is an image
|
|
15
|
-
*/
|
|
16
|
-
export function isImage(attachment: AgentAttachment): boolean {
|
|
17
|
-
if (attachment.type !== AgentAttachmentType.File) return false;
|
|
18
|
-
const mimeType = attachment.mimeType || '';
|
|
19
|
-
return mimeType.startsWith('image/');
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Checks if an attachment is a document that can have text extracted
|
|
24
|
-
*/
|
|
25
|
-
export function isDocument(attachment: AgentAttachment): boolean {
|
|
26
|
-
if (attachment.type !== AgentAttachmentType.File) return false;
|
|
27
|
-
const mimeType = attachment.mimeType || '';
|
|
28
|
-
return mimeType.startsWith('text/') || mimeType.startsWith('application/')
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Extracts text from a document attachment
|
|
33
|
-
*/
|
|
34
|
-
export async function extractTextFromDocument(
|
|
35
|
-
attachment: AgentAttachment
|
|
36
|
-
): Promise<string | undefined> {
|
|
37
|
-
if (!isDocument(attachment) || attachment.type !== AgentAttachmentType.File) {
|
|
38
|
-
logger.debug('Attachment is not a document or not a file type', {
|
|
39
|
-
attachmentId: attachment.id,
|
|
40
|
-
type: attachment.type,
|
|
41
|
-
mimeType: attachment.mimeType
|
|
42
|
-
});
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
const mimeType = attachment.mimeType || '';
|
|
48
|
-
|
|
49
|
-
// All files are stored in S3 (s3Key is in metadata)
|
|
50
|
-
if (attachment.metadata?.s3Key) {
|
|
51
|
-
const s3Key = attachment.metadata.s3Key as string;
|
|
52
|
-
const bucket = config.s3.bucket;
|
|
53
|
-
if (mimeType === 'application/pdf') {
|
|
54
|
-
const buffer = await s3.downloadFileAsByteArray(s3Key, bucket);
|
|
55
|
-
if (buffer) {
|
|
56
|
-
// Convert Uint8Array to Buffer
|
|
57
|
-
const nodeBuffer = Buffer.from(buffer);
|
|
58
|
-
return await extractTextFromPDF(nodeBuffer);
|
|
59
|
-
}
|
|
60
|
-
} else if (
|
|
61
|
-
mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
62
|
-
) {
|
|
63
|
-
const buffer = await s3.downloadFileAsByteArray(s3Key, bucket);
|
|
64
|
-
if (buffer) {
|
|
65
|
-
// Convert Uint8Array to Buffer
|
|
66
|
-
const nodeBuffer = Buffer.from(buffer);
|
|
67
|
-
return await extractTextFromDOCX(nodeBuffer);
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
const text = await s3.downloadFileAsString(s3Key, bucket);
|
|
71
|
-
return text || undefined;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return undefined;
|
|
76
|
-
} catch (error) {
|
|
77
|
-
logger.error('Failed to extract text from document', { error, attachmentId: attachment.id });
|
|
78
|
-
return undefined;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Extracts text from PDF buffer
|
|
84
|
-
*/
|
|
85
|
-
async function extractTextFromPDF(buffer: Buffer): Promise<string | undefined> {
|
|
86
|
-
try {
|
|
87
|
-
const {PDFParse} = await import('pdf-parse');
|
|
88
|
-
const parser = new PDFParse({ data: buffer });
|
|
89
|
-
const text = (await parser.getText()).text || '';
|
|
90
|
-
|
|
91
|
-
// Limit extracted text size
|
|
92
|
-
const maxSize = Number(process.env.MAX_EXTRACTED_TEXT_SIZE) || 51200;
|
|
93
|
-
return text.length > maxSize ? text.substring(0, maxSize) + '...' : text;
|
|
94
|
-
} catch (error) {
|
|
95
|
-
logger.warn('PDF text extraction failed (pdf-parse may not be installed)', { error });
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Extracts text from DOCX buffer
|
|
102
|
-
*/
|
|
103
|
-
async function extractTextFromDOCX(buffer: Buffer): Promise<string | undefined> {
|
|
104
|
-
try {
|
|
105
|
-
const mammoth = await import('mammoth');
|
|
106
|
-
const result = await mammoth.extractRawText({ buffer });
|
|
107
|
-
const text = result.value || '';
|
|
108
|
-
|
|
109
|
-
// Limit extracted text size
|
|
110
|
-
const maxSize = Number(process.env.MAX_EXTRACTED_TEXT_SIZE) || 51200;
|
|
111
|
-
return text.length > maxSize ? text.substring(0, maxSize) + '...' : text;
|
|
112
|
-
} catch (error) {
|
|
113
|
-
logger.warn('DOCX text extraction failed (mammoth may not be installed)', { error });
|
|
114
|
-
return undefined;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Processes an attachment and extracts content as needed
|
|
120
|
-
*/
|
|
121
|
-
export async function processAttachment(
|
|
122
|
-
attachment: AgentAttachment
|
|
123
|
-
): Promise<ProcessedAttachment> {
|
|
124
|
-
const processed: ProcessedAttachment = { ...attachment };
|
|
125
|
-
|
|
126
|
-
// Only process file attachments
|
|
127
|
-
if (attachment.type !== AgentAttachmentType.File) {
|
|
128
|
-
return processed;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Check if text extraction is enabled
|
|
132
|
-
const enableTextExtraction = process.env.ENABLE_TEXT_EXTRACTION !== 'false';
|
|
133
|
-
|
|
134
|
-
if (enableTextExtraction && isDocument(attachment)) {
|
|
135
|
-
try {
|
|
136
|
-
processed.processingStatus = 'pending';
|
|
137
|
-
const extractedText = await extractTextFromDocument(attachment);
|
|
138
|
-
if (extractedText) {
|
|
139
|
-
processed.extractedText = extractedText;
|
|
140
|
-
processed.processingStatus = 'processed';
|
|
141
|
-
} else {
|
|
142
|
-
processed.processingStatus = 'failed';
|
|
143
|
-
}
|
|
144
|
-
} catch (error) {
|
|
145
|
-
logger.error('Failed to process document attachment', { error, attachmentId: attachment.id });
|
|
146
|
-
processed.processingStatus = 'failed';
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return processed;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Prepares an image attachment for vision API
|
|
155
|
-
*/
|
|
156
|
-
export async function prepareImageForVisionAPI(attachment: AgentAttachment): Promise<{
|
|
157
|
-
type: 'image_url';
|
|
158
|
-
image_url: { url: string };
|
|
159
|
-
} | null> {
|
|
160
|
-
if (!isImage(attachment) || attachment.type !== AgentAttachmentType.File) {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// All files are stored in S3 - generate presigned download URL
|
|
165
|
-
if (attachment.metadata?.s3Key) {
|
|
166
|
-
try {
|
|
167
|
-
const s3Key = attachment.metadata.s3Key as string;
|
|
168
|
-
const bucket = config.s3.bucket;
|
|
169
|
-
const buffer = await s3.downloadFileAsByteArray(s3Key, bucket);
|
|
170
|
-
if(!buffer) {
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
const mimeType = attachment.mimeType || 'image/png';
|
|
174
|
-
return {
|
|
175
|
-
type: 'image_url',
|
|
176
|
-
image_url: {
|
|
177
|
-
url: `data:${mimeType};base64,${Buffer.from(buffer).toString('base64')}`,
|
|
178
|
-
},
|
|
179
|
-
};
|
|
180
|
-
} catch (error) {
|
|
181
|
-
logger.error('Failed to generate presigned URL for S3 image', { error, attachmentId: attachment.id });
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Fallback: If we have a URL (backward compatibility)
|
|
187
|
-
if (attachment.url) {
|
|
188
|
-
return {
|
|
189
|
-
type: 'image_url',
|
|
190
|
-
image_url: {
|
|
191
|
-
url: attachment.url,
|
|
192
|
-
},
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { logger } from '../libs/logger';
|
|
2
|
-
import { agentStore, ModelStore } from '../store';
|
|
3
|
-
import { redisService, kafkaService, ModelFetcher } from '../services';
|
|
4
|
-
import { s3 } from "../libs/s3";
|
|
5
|
-
import { config } from "../config";
|
|
6
|
-
import { AgentChatRepository, AgentMessageRepository } from '@multiplayer-app/ai-agent-db';
|
|
7
|
-
|
|
8
|
-
export async function fetchModels() {
|
|
9
|
-
try {
|
|
10
|
-
const modelFetcher = new ModelFetcher();
|
|
11
|
-
const models = await modelFetcher.fetchAllModels();
|
|
12
|
-
ModelStore.getInstance().setModels(models);
|
|
13
|
-
} catch (error) {
|
|
14
|
-
logger.error('Failed to fetch models on startup:', error);
|
|
15
|
-
throw error;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function startServices(agentChatRepository: AgentChatRepository, agentMessageRepository: AgentMessageRepository) {
|
|
20
|
-
kafkaService.setRepositories(agentChatRepository, agentMessageRepository);
|
|
21
|
-
|
|
22
|
-
return Promise.all([
|
|
23
|
-
kafkaService.start(),
|
|
24
|
-
agentStore.initialize(),
|
|
25
|
-
fetchModels(),
|
|
26
|
-
s3.ensureBucketExists(config.s3.bucket),
|
|
27
|
-
])
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function stopServices() {
|
|
31
|
-
return Promise.all([
|
|
32
|
-
redisService.disconnect(),
|
|
33
|
-
kafkaService.stop()
|
|
34
|
-
])
|
|
35
|
-
}
|
package/src/helpers/index.ts
DELETED
package/src/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export { kafkaService } from './services/KafkaService';
|
|
2
|
-
export { redisService } from './services/RedisService';
|
|
3
|
-
export { socketService } from './services/SocketService';
|
|
4
|
-
export { agentStore, AgentProcessEventType } from './store/AgentStore';
|
|
5
|
-
export type { AgentProcessEvent, AgentProcessListener, AgentProcess, AgentProcessEventPayload } from './store/AgentStore';
|
|
6
|
-
export { ConfigStore } from './store/ConfigStore';
|
|
7
|
-
export { ModelStore } from './store/ModelStore';
|
|
8
|
-
export { ArtifactStore } from './store/ArtifactStore';
|
|
9
|
-
export { ChatProcessor, ModelsProcessor } from './processors';
|
|
10
|
-
export { startServices, stopServices } from './helpers/SetupHelper';
|
|
11
|
-
export { createProposeFormValuesTool, proposeFormValuesToolName } from './tools/proposeFormValuesTool';
|
|
12
|
-
export { s3 } from './libs/s3';
|
|
13
|
-
export { setLogger, getLogger, logger, type AgentLogger } from './libs/logger';
|
|
14
|
-
|
|
15
|
-
export * as store from "./store";
|
|
16
|
-
export * as services from "./services";
|
|
17
|
-
export * as processors from "./processors";
|
|
18
|
-
export * as helpers from "./helpers";
|
package/src/libs/index.ts
DELETED
package/src/libs/kafka/config.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export const SERVICE_NAME = process.env.npm_package_name
|
|
2
|
-
export const KAFKA_URI = (process.env.KAFKA_URI as string || 'localhost:9092').split(',')
|
|
3
|
-
export const KAFKA_CLIENT_ID = process.env.KAFKA_CLIENT_ID as string || SERVICE_NAME
|
|
4
|
-
export const KAFKA_SESSION_TIMEOUT = Number.parseInt(process.env.KAFKA_SESSION_TIMEOUT || '30000')
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { Consumer, ConsumerRunConfig, IHeaders, Message } from 'kafkajs'
|
|
2
|
-
import logger from '../logger'
|
|
3
|
-
import { kafka } from './kafka'
|
|
4
|
-
import { KAFKA_SESSION_TIMEOUT } from './config'
|
|
5
|
-
|
|
6
|
-
const startTimer = () => {
|
|
7
|
-
const startTime = process.hrtime()
|
|
8
|
-
return startTime
|
|
9
|
-
}
|
|
10
|
-
const getDuration = (startTime) => {
|
|
11
|
-
const diff = process.hrtime(startTime)
|
|
12
|
-
return diff[0] * 1e3 + diff[1] * 1e-6
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export type KafkaConsumerListener = (key, value, headers?: IHeaders) => void | Promise<void>
|
|
16
|
-
export class KafkaConsumer {
|
|
17
|
-
private consumer: Consumer
|
|
18
|
-
private listeners: Record<string, KafkaConsumerListener[]> = {}
|
|
19
|
-
private lastHeartbeat: number = 0
|
|
20
|
-
|
|
21
|
-
constructor(groupId: string) {
|
|
22
|
-
this.consumer = kafka.consumer({
|
|
23
|
-
groupId,
|
|
24
|
-
sessionTimeout: KAFKA_SESSION_TIMEOUT,
|
|
25
|
-
})
|
|
26
|
-
this.consumer.on(this.consumer.events.HEARTBEAT, ({ timestamp }) => {
|
|
27
|
-
this.lastHeartbeat = timestamp
|
|
28
|
-
})
|
|
29
|
-
this.consumer.on(this.consumer.events.REQUEST_TIMEOUT, ({ timestamp }) => {
|
|
30
|
-
this.lastHeartbeat = 0
|
|
31
|
-
})
|
|
32
|
-
this.consumer.on(this.consumer.events.CRASH, ({ timestamp }) => {
|
|
33
|
-
this.lastHeartbeat = 0
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
public async isConnected() {
|
|
38
|
-
if (Date.now() - this.lastHeartbeat < KAFKA_SESSION_TIMEOUT) {
|
|
39
|
-
return true
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
const { state } = await this.consumer.describeGroup()
|
|
43
|
-
return ['CompletingRebalance', 'PreparingRebalance', 'Stable'].includes(state)
|
|
44
|
-
} catch (err) {
|
|
45
|
-
return false
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public async connect() {
|
|
50
|
-
await this.consumer.connect()
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public async disconnect() {
|
|
54
|
-
await this.consumer.disconnect()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public async subscribe(topic: string, listener: KafkaConsumerListener) {
|
|
58
|
-
logger.info({ topic }, '[KAFKAJS] Subscribing for topic')
|
|
59
|
-
|
|
60
|
-
if (!this.listeners[topic]) {
|
|
61
|
-
this.listeners[topic] = []
|
|
62
|
-
}
|
|
63
|
-
this.listeners[topic].push(listener)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
private async listenFnWrapper(
|
|
67
|
-
topic: string,
|
|
68
|
-
message: Message,
|
|
69
|
-
) {
|
|
70
|
-
|
|
71
|
-
const parseStartTime = startTimer()
|
|
72
|
-
try {
|
|
73
|
-
if (!this.listeners[topic]?.length) {
|
|
74
|
-
logger.error(`[KAFKAJS] Missing handler for topic ${topic}`)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (!message?.value) {
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const key = message?.key?.toString('utf8')
|
|
82
|
-
const value = JSON.parse(message.value.toString('utf8'))
|
|
83
|
-
const headers = message.headers
|
|
84
|
-
|
|
85
|
-
logger.debug(
|
|
86
|
-
{
|
|
87
|
-
topic,
|
|
88
|
-
key,
|
|
89
|
-
value,
|
|
90
|
-
},
|
|
91
|
-
`[KAFKAJS] Received message from topic ${topic}`,
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
await Promise.all(this.listeners[topic].map(func => func(key, value, headers)))
|
|
95
|
-
|
|
96
|
-
logger.debug({
|
|
97
|
-
key,
|
|
98
|
-
topic,
|
|
99
|
-
duration: getDuration(parseStartTime),
|
|
100
|
-
}, '[KAFKAJS] Done with processing data from kafka')
|
|
101
|
-
} catch (err) {
|
|
102
|
-
logger.error(err, '[KAFKAJS] Error on handling incoming message')
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
public async listen(options: Omit<ConsumerRunConfig, 'eachMessage' | 'eachBatch'> = {
|
|
107
|
-
partitionsConsumedConcurrently: 3, autoCommit: true,
|
|
108
|
-
}) {
|
|
109
|
-
const topics = Object.keys(this.listeners)
|
|
110
|
-
|
|
111
|
-
await this.consumer.subscribe({
|
|
112
|
-
topics,
|
|
113
|
-
fromBeginning: true,
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
await this.consumer.run({
|
|
117
|
-
autoCommit: true,
|
|
118
|
-
...options,
|
|
119
|
-
eachMessage: async ({ topic, message }) => this.listenFnWrapper(topic, message),
|
|
120
|
-
})
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
public async listenBatch(options: Omit<ConsumerRunConfig, 'eachMessage' | 'eachBatch'>) {
|
|
124
|
-
const topics = Object.keys(this.listeners)
|
|
125
|
-
|
|
126
|
-
await this.consumer.subscribe({
|
|
127
|
-
topics,
|
|
128
|
-
fromBeginning: true,
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
await this.consumer.run({
|
|
132
|
-
eachBatchAutoResolve: true,
|
|
133
|
-
...options,
|
|
134
|
-
eachBatch: async ({
|
|
135
|
-
batch,
|
|
136
|
-
resolveOffset,
|
|
137
|
-
heartbeat,
|
|
138
|
-
commitOffsetsIfNecessary,
|
|
139
|
-
uncommittedOffsets,
|
|
140
|
-
isRunning,
|
|
141
|
-
isStale,
|
|
142
|
-
pause,
|
|
143
|
-
}) => {
|
|
144
|
-
for (const message of batch.messages) {
|
|
145
|
-
if (!this.listeners[batch.topic]?.length) {
|
|
146
|
-
logger.error(`[KAFKAJS] Missing handler for topic ${batch.topic}`)
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
await Promise.all(batch.messages.map(message => this.listenFnWrapper(batch.topic, message)))
|
|
151
|
-
} catch (batchError) {
|
|
152
|
-
logger.error(batchError, '[KAFKAJS] Batch fn error')
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
resolveOffset(message.offset)
|
|
156
|
-
await heartbeat()
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
})
|
|
160
|
-
}
|
|
161
|
-
}
|
package/src/libs/kafka/index.ts
DELETED
package/src/libs/kafka/kafka.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Kafka, logLevel } from 'kafkajs'
|
|
2
|
-
import { KAFKA_CLIENT_ID, KAFKA_URI } from './config'
|
|
3
|
-
import { KafkaJsLogCreator } from '../logger'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const toBunyanLogLevel = level => {
|
|
7
|
-
switch (level) {
|
|
8
|
-
case logLevel.ERROR:
|
|
9
|
-
case logLevel.NOTHING:
|
|
10
|
-
return 'error'
|
|
11
|
-
case logLevel.WARN:
|
|
12
|
-
return 'warn'
|
|
13
|
-
case logLevel.INFO:
|
|
14
|
-
return 'info'
|
|
15
|
-
case logLevel.DEBUG:
|
|
16
|
-
return 'debug'
|
|
17
|
-
default:
|
|
18
|
-
return 'info'
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export const kafka = new Kafka({
|
|
24
|
-
clientId: KAFKA_CLIENT_ID,
|
|
25
|
-
brokers: KAFKA_URI,
|
|
26
|
-
logCreator: KafkaJsLogCreator(toBunyanLogLevel),
|
|
27
|
-
})
|