chat-flow-ardymalihi 3.0.0 → 3.0.3
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/package.json +9 -1
- package/dist/adapters/db/InMemorySessionRepository.js +0 -15
- package/dist/adapters/db/RedisSessionRepository.js +0 -41
- package/dist/adapters/intent/IntentMatcher.d.ts +0 -41
- package/dist/adapters/intent/IntentMatcher.d.ts.map +0 -1
- package/dist/adapters/intent/IntentMatcher.js +0 -167
- package/dist/adapters/intent/IntentMatcher.js.map +0 -1
- package/dist/adapters/intent/IntentService.d.ts +0 -26
- package/dist/adapters/intent/IntentService.d.ts.map +0 -1
- package/dist/adapters/intent/IntentService.js +0 -65
- package/dist/adapters/intent/IntentService.js.map +0 -1
- package/dist/adapters/intent/MockIntentAdapter.js +0 -29
- package/dist/adapters/intent/MockIntentService.d.ts +0 -7
- package/dist/adapters/intent/MockIntentService.d.ts.map +0 -1
- package/dist/adapters/intent/MockIntentService.js +0 -36
- package/dist/adapters/intent/MockIntentService.js.map +0 -1
- package/dist/adapters/llm/GeminiLLMAdapter.d.ts +0 -10
- package/dist/adapters/llm/GeminiLLMAdapter.d.ts.map +0 -1
- package/dist/adapters/llm/GeminiLLMAdapter.js +0 -102
- package/dist/adapters/llm/GeminiLLMAdapter.js.map +0 -1
- package/dist/adapters/llm/MockLLMAdapter.d.ts +0 -5
- package/dist/adapters/llm/MockLLMAdapter.d.ts.map +0 -1
- package/dist/adapters/llm/MockLLMAdapter.js +0 -31
- package/dist/adapters/llm/MockLLMAdapter.js.map +0 -1
- package/dist/adapters/llm/OllamaLLMAdapter.d.ts +0 -9
- package/dist/adapters/llm/OllamaLLMAdapter.d.ts.map +0 -1
- package/dist/adapters/llm/OllamaLLMAdapter.js +0 -74
- package/dist/adapters/llm/OllamaLLMAdapter.js.map +0 -1
- package/dist/adapters/logger/ConsoleLogger.d.ts +0 -12
- package/dist/adapters/logger/ConsoleLogger.d.ts.map +0 -1
- package/dist/adapters/logger/ConsoleLogger.js +0 -37
- package/dist/adapters/logger/ConsoleLogger.js.map +0 -1
- package/dist/adapters/memory/InMemorySessionRepository.js +0 -15
- package/dist/adapters/redis/RedisSessionRepository.js +0 -41
- package/dist/adapters/repository/InMemoryRepository.d.ts +0 -46
- package/dist/adapters/repository/InMemoryRepository.d.ts.map +0 -1
- package/dist/adapters/repository/InMemoryRepository.js +0 -235
- package/dist/adapters/repository/InMemoryRepository.js.map +0 -1
- package/dist/adapters/repository/IntentRepository.d.ts +0 -15
- package/dist/adapters/repository/IntentRepository.d.ts.map +0 -1
- package/dist/adapters/repository/IntentRepository.js +0 -28
- package/dist/adapters/repository/IntentRepository.js.map +0 -1
- package/dist/adapters/repository/RedisRepository.d.ts +0 -63
- package/dist/adapters/repository/RedisRepository.d.ts.map +0 -1
- package/dist/adapters/repository/RedisRepository.js +0 -586
- package/dist/adapters/repository/RedisRepository.js.map +0 -1
- package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts +0 -33
- package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts.map +0 -1
- package/dist/adapters/storage/RedisAudioStorageAdapter.js +0 -121
- package/dist/adapters/storage/RedisAudioStorageAdapter.js.map +0 -1
- package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts +0 -14
- package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts.map +0 -1
- package/dist/adapters/storage/RedisBufferStorageAdapter.js +0 -94
- package/dist/adapters/storage/RedisBufferStorageAdapter.js.map +0 -1
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts +0 -29
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.js +0 -75
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.js.map +0 -1
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts +0 -77
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js +0 -187
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js.map +0 -1
- package/dist/adapters/voice/GeminiVoiceAdapter.d.ts +0 -36
- package/dist/adapters/voice/GeminiVoiceAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/GeminiVoiceAdapter.js +0 -134
- package/dist/adapters/voice/GeminiVoiceAdapter.js.map +0 -1
- package/dist/adapters/voice/GoogleTTSAdapter.d.ts +0 -61
- package/dist/adapters/voice/GoogleTTSAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/GoogleTTSAdapter.js +0 -165
- package/dist/adapters/voice/GoogleTTSAdapter.js.map +0 -1
- package/dist/adapters/voice/GoogleVoiceAdapter.d.ts +0 -33
- package/dist/adapters/voice/GoogleVoiceAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/GoogleVoiceAdapter.js +0 -155
- package/dist/adapters/voice/GoogleVoiceAdapter.js.map +0 -1
- package/dist/adapters/voice/HybridVoiceAdapter.d.ts +0 -54
- package/dist/adapters/voice/HybridVoiceAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/HybridVoiceAdapter.js +0 -102
- package/dist/adapters/voice/HybridVoiceAdapter.js.map +0 -1
- package/dist/adapters/voice/LanguageVoiceMapper.d.ts +0 -60
- package/dist/adapters/voice/LanguageVoiceMapper.d.ts.map +0 -1
- package/dist/adapters/voice/LanguageVoiceMapper.js +0 -130
- package/dist/adapters/voice/LanguageVoiceMapper.js.map +0 -1
- package/dist/adapters/voice/VertexVoiceAdapter.d.ts +0 -32
- package/dist/adapters/voice/VertexVoiceAdapter.d.ts.map +0 -1
- package/dist/adapters/voice/VertexVoiceAdapter.js +0 -179
- package/dist/adapters/voice/VertexVoiceAdapter.js.map +0 -1
- package/dist/adapters/webhook/WebhookService.d.ts +0 -47
- package/dist/adapters/webhook/WebhookService.d.ts.map +0 -1
- package/dist/adapters/webhook/WebhookService.js +0 -265
- package/dist/adapters/webhook/WebhookService.js.map +0 -1
- package/dist/adapters/workflow/MockWorkflowAdapter.d.ts +0 -5
- package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +0 -1
- package/dist/adapters/workflow/MockWorkflowAdapter.js +0 -173
- package/dist/adapters/workflow/MockWorkflowAdapter.js.map +0 -1
- package/dist/adapters/workflow/WorkflowAdapter.d.ts +0 -55
- package/dist/adapters/workflow/WorkflowAdapter.d.ts.map +0 -1
- package/dist/adapters/workflow/WorkflowAdapter.js +0 -242
- package/dist/adapters/workflow/WorkflowAdapter.js.map +0 -1
- package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts +0 -10
- package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts.map +0 -1
- package/dist/adapters/workflow/actions/getSupportHoursAction.js +0 -33
- package/dist/adapters/workflow/actions/getSupportHoursAction.js.map +0 -1
- package/dist/adapters/workflow/actions/index.d.ts +0 -6
- package/dist/adapters/workflow/actions/index.d.ts.map +0 -1
- package/dist/adapters/workflow/actions/index.js +0 -22
- package/dist/adapters/workflow/actions/index.js.map +0 -1
- package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts +0 -11
- package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts.map +0 -1
- package/dist/adapters/workflow/actions/pushOutputResultAction.js +0 -31
- package/dist/adapters/workflow/actions/pushOutputResultAction.js.map +0 -1
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts +0 -12
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts.map +0 -1
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.js +0 -32
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.js.map +0 -1
- package/dist/adapters/workflow/engine/constants.d.ts +0 -3
- package/dist/adapters/workflow/engine/constants.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/constants.js +0 -6
- package/dist/adapters/workflow/engine/constants.js.map +0 -1
- package/dist/adapters/workflow/engine/engine.d.ts +0 -32
- package/dist/adapters/workflow/engine/engine.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/engine.js +0 -623
- package/dist/adapters/workflow/engine/engine.js.map +0 -1
- package/dist/adapters/workflow/engine/event-registry.d.ts +0 -12
- package/dist/adapters/workflow/engine/event-registry.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/event-registry.js +0 -33
- package/dist/adapters/workflow/engine/event-registry.js.map +0 -1
- package/dist/adapters/workflow/engine/interpolator.d.ts +0 -11
- package/dist/adapters/workflow/engine/interpolator.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/interpolator.js +0 -93
- package/dist/adapters/workflow/engine/interpolator.js.map +0 -1
- package/dist/adapters/workflow/engine/registry.d.ts +0 -12
- package/dist/adapters/workflow/engine/registry.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/registry.js +0 -39
- package/dist/adapters/workflow/engine/registry.js.map +0 -1
- package/dist/adapters/workflow/engine/template-registry.d.ts +0 -60
- package/dist/adapters/workflow/engine/template-registry.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/template-registry.js +0 -92
- package/dist/adapters/workflow/engine/template-registry.js.map +0 -1
- package/dist/adapters/workflow/engine/types.d.ts +0 -182
- package/dist/adapters/workflow/engine/types.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/types.js +0 -3
- package/dist/adapters/workflow/engine/types.js.map +0 -1
- package/dist/adapters/workflow/engine/utils/format-utils.d.ts +0 -43
- package/dist/adapters/workflow/engine/utils/format-utils.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/utils/format-utils.js +0 -137
- package/dist/adapters/workflow/engine/utils/format-utils.js.map +0 -1
- package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts +0 -7
- package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/utils/layout-calculator.js +0 -87
- package/dist/adapters/workflow/engine/utils/layout-calculator.js.map +0 -1
- package/dist/adapters/workflow/engine/utils/slugify.d.ts +0 -2
- package/dist/adapters/workflow/engine/utils/slugify.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/utils/slugify.js +0 -41
- package/dist/adapters/workflow/engine/utils/slugify.js.map +0 -1
- package/dist/adapters/workflow/engine/validator.d.ts +0 -9
- package/dist/adapters/workflow/engine/validator.d.ts.map +0 -1
- package/dist/adapters/workflow/engine/validator.js +0 -425
- package/dist/adapters/workflow/engine/validator.js.map +0 -1
- package/dist/application/ConversationSession.d.ts +0 -23
- package/dist/application/ConversationSession.d.ts.map +0 -1
- package/dist/application/ConversationSession.js +0 -83
- package/dist/application/ConversationSession.js.map +0 -1
- package/dist/application/Message.d.ts +0 -11
- package/dist/application/Message.d.ts.map +0 -1
- package/dist/application/Message.js +0 -30
- package/dist/application/Message.js.map +0 -1
- package/dist/application/Orchestrator.d.ts +0 -18
- package/dist/application/Orchestrator.d.ts.map +0 -1
- package/dist/application/Orchestrator.js +0 -80
- package/dist/application/Orchestrator.js.map +0 -1
- package/dist/application/SessionState.js +0 -2
- package/dist/application/usecases/CreateSession.js +0 -20
- package/dist/application/usecases/HandleUserMessage.js +0 -69
- package/dist/config/ChatFlowConfig.d.ts +0 -66
- package/dist/config/ChatFlowConfig.d.ts.map +0 -1
- package/dist/config/ChatFlowConfig.js +0 -54
- package/dist/config/ChatFlowConfig.js.map +0 -1
- package/dist/config/index.d.ts +0 -2
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -7
- package/dist/config/index.js.map +0 -1
- package/dist/core/entities/ConversationSession.d.ts +0 -58
- package/dist/core/entities/ConversationSession.d.ts.map +0 -1
- package/dist/core/entities/ConversationSession.js +0 -160
- package/dist/core/entities/ConversationSession.js.map +0 -1
- package/dist/core/entities/Message.d.ts +0 -14
- package/dist/core/entities/Message.d.ts.map +0 -1
- package/dist/core/entities/Message.js +0 -32
- package/dist/core/entities/Message.js.map +0 -1
- package/dist/core/errors/ChatFlowError.d.ts +0 -71
- package/dist/core/errors/ChatFlowError.d.ts.map +0 -1
- package/dist/core/errors/ChatFlowError.js +0 -108
- package/dist/core/errors/ChatFlowError.js.map +0 -1
- package/dist/core/errors/index.d.ts +0 -2
- package/dist/core/errors/index.d.ts.map +0 -1
- package/dist/core/errors/index.js +0 -15
- package/dist/core/errors/index.js.map +0 -1
- package/dist/core/utils/AudioStreamBuffer.d.ts +0 -33
- package/dist/core/utils/AudioStreamBuffer.d.ts.map +0 -1
- package/dist/core/utils/AudioStreamBuffer.js +0 -55
- package/dist/core/utils/AudioStreamBuffer.js.map +0 -1
- package/dist/core/utils/AudioUtils.d.ts +0 -41
- package/dist/core/utils/AudioUtils.d.ts.map +0 -1
- package/dist/core/utils/AudioUtils.js +0 -188
- package/dist/core/utils/AudioUtils.js.map +0 -1
- package/dist/core/utils/LanguageDetector.d.ts +0 -52
- package/dist/core/utils/LanguageDetector.d.ts.map +0 -1
- package/dist/core/utils/LanguageDetector.js +0 -173
- package/dist/core/utils/LanguageDetector.js.map +0 -1
- package/dist/core/utils/WavUtils.d.ts +0 -14
- package/dist/core/utils/WavUtils.d.ts.map +0 -1
- package/dist/core/utils/WavUtils.js +0 -37
- package/dist/core/utils/WavUtils.js.map +0 -1
- package/dist/db/InMemoryRepository.d.ts +0 -15
- package/dist/db/InMemoryRepository.d.ts.map +0 -1
- package/dist/db/InMemoryRepository.js +0 -41
- package/dist/db/InMemoryRepository.js.map +0 -1
- package/dist/db/RedisRepository.d.ts +0 -16
- package/dist/db/RedisRepository.d.ts.map +0 -1
- package/dist/db/RedisRepository.js +0 -87
- package/dist/db/RedisRepository.js.map +0 -1
- package/dist/demo/cli-demo.d.ts +0 -2
- package/dist/demo/cli-demo.d.ts.map +0 -1
- package/dist/demo/cli-demo.js +0 -146
- package/dist/demo/cli-demo.js.map +0 -1
- package/dist/demo/console-chat.d.ts +0 -2
- package/dist/demo/console-chat.d.ts.map +0 -1
- package/dist/demo/console-chat.js +0 -148
- package/dist/demo/console-chat.js.map +0 -1
- package/dist/demo/interactive-voice-chat.d.ts +0 -2
- package/dist/demo/interactive-voice-chat.d.ts.map +0 -1
- package/dist/demo/interactive-voice-chat.js +0 -180
- package/dist/demo/interactive-voice-chat.js.map +0 -1
- package/dist/demo/voice-demo.d.ts +0 -2
- package/dist/demo/voice-demo.d.ts.map +0 -1
- package/dist/demo/voice-demo.js +0 -188
- package/dist/demo/voice-demo.js.map +0 -1
- package/dist/domain/conversation/ConversationSession.js +0 -82
- package/dist/domain/conversation/Message.js +0 -33
- package/dist/domain/conversation/SessionState.js +0 -10
- package/dist/index.d.ts +0 -26
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -76
- package/dist/index.js.map +0 -1
- package/dist/intent/IntentService.d.ts +0 -17
- package/dist/intent/IntentService.d.ts.map +0 -1
- package/dist/intent/IntentService.js +0 -57
- package/dist/intent/IntentService.js.map +0 -1
- package/dist/intent/MockIntentService.d.ts +0 -7
- package/dist/intent/MockIntentService.d.ts.map +0 -1
- package/dist/intent/MockIntentService.js +0 -36
- package/dist/intent/MockIntentService.js.map +0 -1
- package/dist/interfaces.d.ts +0 -653
- package/dist/interfaces.d.ts.map +0 -1
- package/dist/interfaces.js +0 -36
- package/dist/interfaces.js.map +0 -1
- package/dist/llm/GeminiLLMAdapter.d.ts +0 -10
- package/dist/llm/GeminiLLMAdapter.d.ts.map +0 -1
- package/dist/llm/GeminiLLMAdapter.js +0 -102
- package/dist/llm/GeminiLLMAdapter.js.map +0 -1
- package/dist/llm/MockLLMAdapter.d.ts +0 -5
- package/dist/llm/MockLLMAdapter.d.ts.map +0 -1
- package/dist/llm/MockLLMAdapter.js +0 -31
- package/dist/llm/MockLLMAdapter.js.map +0 -1
- package/dist/orchestrator/Orchestrator.d.ts +0 -62
- package/dist/orchestrator/Orchestrator.d.ts.map +0 -1
- package/dist/orchestrator/Orchestrator.js +0 -697
- package/dist/orchestrator/Orchestrator.js.map +0 -1
- package/dist/ports/IIntentRepository.d.ts +0 -27
- package/dist/ports/IIntentRepository.d.ts.map +0 -1
- package/dist/ports/IIntentRepository.js +0 -3
- package/dist/ports/IIntentRepository.js.map +0 -1
- package/dist/ports/IntentPort.js +0 -2
- package/dist/ports/LLMPort.js +0 -2
- package/dist/ports/SessionRepository.js +0 -2
- package/dist/ports/WorkflowPort.js +0 -2
- package/dist/scripts/debug-redis.d.ts +0 -2
- package/dist/scripts/debug-redis.d.ts.map +0 -1
- package/dist/scripts/debug-redis.js +0 -55
- package/dist/scripts/debug-redis.js.map +0 -1
- package/dist/scripts/seed-collaborative-intents.d.ts +0 -2
- package/dist/scripts/seed-collaborative-intents.d.ts.map +0 -1
- package/dist/scripts/seed-collaborative-intents.js +0 -90
- package/dist/scripts/seed-collaborative-intents.js.map +0 -1
- package/dist/scripts/test-isolated-config.d.ts +0 -2
- package/dist/scripts/test-isolated-config.d.ts.map +0 -1
- package/dist/scripts/test-isolated-config.js +0 -80
- package/dist/scripts/test-isolated-config.js.map +0 -1
- package/dist/scripts/verify_memory_intents.d.ts +0 -2
- package/dist/scripts/verify_memory_intents.d.ts.map +0 -1
- package/dist/scripts/verify_memory_intents.js +0 -45
- package/dist/scripts/verify_memory_intents.js.map +0 -1
- package/dist/scripts/verify_redis_intents.d.ts +0 -2
- package/dist/scripts/verify_redis_intents.d.ts.map +0 -1
- package/dist/scripts/verify_redis_intents.js +0 -52
- package/dist/scripts/verify_redis_intents.js.map +0 -1
- package/dist/server/ChatFlowWebSocketServer.d.ts +0 -46
- package/dist/server/ChatFlowWebSocketServer.d.ts.map +0 -1
- package/dist/server/ChatFlowWebSocketServer.js +0 -344
- package/dist/server/ChatFlowWebSocketServer.js.map +0 -1
- package/dist/server/realtime-voice-server.d.ts +0 -2
- package/dist/server/realtime-voice-server.d.ts.map +0 -1
- package/dist/server/realtime-voice-server.js +0 -627
- package/dist/server/realtime-voice-server.js.map +0 -1
- package/dist/src/api/routes/tenants.d.ts +0 -3
- package/dist/src/api/routes/tenants.d.ts.map +0 -1
- package/dist/src/api/routes/tenants.js +0 -109
- package/dist/src/api/routes/tenants.js.map +0 -1
- package/dist/utils/crypto.d.ts +0 -7
- package/dist/utils/crypto.d.ts.map +0 -1
- package/dist/utils/crypto.js +0 -35
- package/dist/utils/crypto.js.map +0 -1
- package/dist/utils/encryption-helpers.d.ts +0 -14
- package/dist/utils/encryption-helpers.d.ts.map +0 -1
- package/dist/utils/encryption-helpers.js +0 -49
- package/dist/utils/encryption-helpers.js.map +0 -1
- package/dist/verify_memory_intents.js +0 -44
- package/dist/verify_redis_intents.js +0 -49
- package/dist/workflow/MockWorkflowAdapter.d.ts +0 -5
- package/dist/workflow/MockWorkflowAdapter.d.ts.map +0 -1
- package/dist/workflow/MockWorkflowAdapter.js +0 -162
- package/dist/workflow/MockWorkflowAdapter.js.map +0 -1
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LanguageDetector = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Language Detection Utility
|
|
6
|
-
*
|
|
7
|
-
* Detects the language of user messages using LLM analysis.
|
|
8
|
-
* Returns ISO 639-1 language codes (e.g., 'en', 'ar', 'fa', 'es').
|
|
9
|
-
*/
|
|
10
|
-
class LanguageDetector {
|
|
11
|
-
constructor(llm) {
|
|
12
|
-
this.llm = llm;
|
|
13
|
-
this.cache = new Map();
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Detect language from text
|
|
17
|
-
* @param text Text to analyze
|
|
18
|
-
* @param languageHints Optional array of preferred languages (e.g., from supportedLanguages config)
|
|
19
|
-
* @returns ISO 639-1 language code (e.g., 'en', 'ar', 'fa')
|
|
20
|
-
*/
|
|
21
|
-
async detectLanguage(text, languageHints) {
|
|
22
|
-
// Check cache first
|
|
23
|
-
const cacheKey = this.getCacheKey(text);
|
|
24
|
-
if (this.cache.has(cacheKey)) {
|
|
25
|
-
return this.cache.get(cacheKey);
|
|
26
|
-
}
|
|
27
|
-
// For very short ambiguous words in non-Latin script, use language hints
|
|
28
|
-
const characterSet = this.detectCharacterSet(text);
|
|
29
|
-
const isAmbiguousShortText = text.trim().split(/\s+/).length <= 2;
|
|
30
|
-
if (isAmbiguousShortText && characterSet !== 'latin' && languageHints && languageHints.length > 0) {
|
|
31
|
-
// Use first supported language for ambiguous cases like "سلام" (Salam)
|
|
32
|
-
const preferredLanguage = languageHints[0];
|
|
33
|
-
const preferredCharSet = this.getCharacterSetForLanguage(preferredLanguage);
|
|
34
|
-
// Only use hint if character sets match
|
|
35
|
-
if (preferredCharSet === characterSet || (characterSet === 'arabic' && preferredCharSet === 'persian') || (characterSet === 'persian' && preferredCharSet === 'arabic')) {
|
|
36
|
-
console.log(`[LanguageDetector] Ambiguous short text detected. Using preferred language: ${preferredLanguage}`);
|
|
37
|
-
this.cache.set(cacheKey, preferredLanguage);
|
|
38
|
-
return preferredLanguage;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
const prompt = `Identify the language of the following text and return ONLY the ISO 639-1 language code (2-letter code like 'en', 'ar', 'fa', 'es', 'fr', etc.).
|
|
42
|
-
|
|
43
|
-
Text: "${text}"
|
|
44
|
-
|
|
45
|
-
Response format: Just the 2-letter code, nothing else.`;
|
|
46
|
-
try {
|
|
47
|
-
const response = await this.llm.generateResponse(prompt, []);
|
|
48
|
-
const content = response.content?.trim() || '';
|
|
49
|
-
const languageCode = content.toLowerCase().substring(0, 2);
|
|
50
|
-
// Validate it's a 2-letter code
|
|
51
|
-
if (!/^[a-z]{2}$/.test(languageCode)) {
|
|
52
|
-
console.warn(`[LanguageDetector] Invalid language code detected: "${languageCode}". Defaulting to 'en'.`);
|
|
53
|
-
return 'en';
|
|
54
|
-
}
|
|
55
|
-
// Cache the result
|
|
56
|
-
this.cache.set(cacheKey, languageCode);
|
|
57
|
-
// Limit cache size to prevent memory issues
|
|
58
|
-
if (this.cache.size > 1000) {
|
|
59
|
-
const firstKey = this.cache.keys().next().value;
|
|
60
|
-
if (firstKey) {
|
|
61
|
-
this.cache.delete(firstKey);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return languageCode;
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
console.error('[LanguageDetector] Error detecting language:', error);
|
|
68
|
-
return 'en'; // Fallback to English
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Detect if text uses a specific character set (fast heuristic)
|
|
73
|
-
* This avoids expensive LLM calls when character set hasn't changed
|
|
74
|
-
* @param text Text to analyze
|
|
75
|
-
* @returns Character set type
|
|
76
|
-
*/
|
|
77
|
-
detectCharacterSet(text) {
|
|
78
|
-
// Arabic script (includes Persian)
|
|
79
|
-
if (/[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF]/.test(text)) {
|
|
80
|
-
// Check for Persian-specific characters
|
|
81
|
-
if (/[\u067E\u0686\u0698\u06AF]/.test(text)) {
|
|
82
|
-
return 'persian';
|
|
83
|
-
}
|
|
84
|
-
return 'arabic';
|
|
85
|
-
}
|
|
86
|
-
// CJK (Chinese, Japanese, Korean)
|
|
87
|
-
if (/[\u4E00-\u9FFF\u3040-\u309F\u30A0-\u30FF\uAC00-\uD7AF]/.test(text)) {
|
|
88
|
-
return 'cjk';
|
|
89
|
-
}
|
|
90
|
-
// Cyrillic (Russian, Ukrainian, etc.)
|
|
91
|
-
if (/[\u0400-\u04FF]/.test(text)) {
|
|
92
|
-
return 'cyrillic';
|
|
93
|
-
}
|
|
94
|
-
// Default to Latin
|
|
95
|
-
return 'latin';
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Check if character set changed from previous language
|
|
99
|
-
* @param text Current text
|
|
100
|
-
* @param previousLanguage Previously detected language code
|
|
101
|
-
* @returns True if character set changed, suggesting language might have changed
|
|
102
|
-
*/
|
|
103
|
-
hasCharacterSetChanged(text, previousLanguage) {
|
|
104
|
-
if (!previousLanguage)
|
|
105
|
-
return true; // First message
|
|
106
|
-
const currentCharSet = this.detectCharacterSet(text);
|
|
107
|
-
const previousCharSet = this.getCharacterSetForLanguage(previousLanguage);
|
|
108
|
-
return currentCharSet !== previousCharSet;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Get expected character set for a language code
|
|
112
|
-
*/
|
|
113
|
-
getCharacterSetForLanguage(languageCode) {
|
|
114
|
-
const arabicLangs = ['ar'];
|
|
115
|
-
const persianLangs = ['fa'];
|
|
116
|
-
const cjkLangs = ['zh', 'ja', 'ko'];
|
|
117
|
-
const cyrillicLangs = ['ru', 'uk', 'bg'];
|
|
118
|
-
if (arabicLangs.includes(languageCode))
|
|
119
|
-
return 'arabic';
|
|
120
|
-
if (persianLangs.includes(languageCode))
|
|
121
|
-
return 'persian';
|
|
122
|
-
if (cjkLangs.includes(languageCode))
|
|
123
|
-
return 'cjk';
|
|
124
|
-
if (cyrillicLangs.includes(languageCode))
|
|
125
|
-
return 'cyrillic';
|
|
126
|
-
return 'latin';
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get language name from code
|
|
130
|
-
* @param code ISO 639-1 language code
|
|
131
|
-
* @returns Human-readable language name
|
|
132
|
-
*/
|
|
133
|
-
getLanguageName(code) {
|
|
134
|
-
const languageNames = {
|
|
135
|
-
'en': 'English',
|
|
136
|
-
'ar': 'Arabic',
|
|
137
|
-
'fa': 'Persian',
|
|
138
|
-
'es': 'Spanish',
|
|
139
|
-
'fr': 'French',
|
|
140
|
-
'de': 'German',
|
|
141
|
-
'it': 'Italian',
|
|
142
|
-
'pt': 'Portuguese',
|
|
143
|
-
'ru': 'Russian',
|
|
144
|
-
'zh': 'Chinese',
|
|
145
|
-
'ja': 'Japanese',
|
|
146
|
-
'ko': 'Korean',
|
|
147
|
-
'hi': 'Hindi',
|
|
148
|
-
'tr': 'Turkish',
|
|
149
|
-
'nl': 'Dutch',
|
|
150
|
-
'pl': 'Polish',
|
|
151
|
-
'sv': 'Swedish',
|
|
152
|
-
'da': 'Danish',
|
|
153
|
-
'fi': 'Finnish',
|
|
154
|
-
'no': 'Norwegian'
|
|
155
|
-
};
|
|
156
|
-
return languageNames[code.toLowerCase()] || code.toUpperCase();
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Clear the cache
|
|
160
|
-
*/
|
|
161
|
-
clearCache() {
|
|
162
|
-
this.cache.clear();
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Generate cache key from text
|
|
166
|
-
*/
|
|
167
|
-
getCacheKey(text) {
|
|
168
|
-
// Use first 100 characters and normalize
|
|
169
|
-
return text.substring(0, 100).trim().toLowerCase();
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
exports.LanguageDetector = LanguageDetector;
|
|
173
|
-
//# sourceMappingURL=LanguageDetector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LanguageDetector.js","sourceRoot":"","sources":["../../../src/core/utils/LanguageDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WAV File Utilities
|
|
3
|
-
*/
|
|
4
|
-
export declare class WavUtils {
|
|
5
|
-
/**
|
|
6
|
-
* Create a WAV header for the given data length.
|
|
7
|
-
* Assumes 16kHz, 16-bit, Mono PCM.
|
|
8
|
-
* @param dataLength Length of the PCM data in bytes
|
|
9
|
-
* @param sampleRate Sample rate (default 16000)
|
|
10
|
-
* @returns Buffer containing the 44-byte WAV header
|
|
11
|
-
*/
|
|
12
|
-
static createWavHeader(dataLength: number, sampleRate?: number): Buffer;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=WavUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WavUtils.d.ts","sourceRoot":"","sources":["../../../src/core/utils/WavUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAQ;IACjB;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAc,GAAG,MAAM;CAwBjF"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WavUtils = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* WAV File Utilities
|
|
6
|
-
*/
|
|
7
|
-
class WavUtils {
|
|
8
|
-
/**
|
|
9
|
-
* Create a WAV header for the given data length.
|
|
10
|
-
* Assumes 16kHz, 16-bit, Mono PCM.
|
|
11
|
-
* @param dataLength Length of the PCM data in bytes
|
|
12
|
-
* @param sampleRate Sample rate (default 16000)
|
|
13
|
-
* @returns Buffer containing the 44-byte WAV header
|
|
14
|
-
*/
|
|
15
|
-
static createWavHeader(dataLength, sampleRate = 16000) {
|
|
16
|
-
const buffer = Buffer.alloc(44);
|
|
17
|
-
// RIFF
|
|
18
|
-
buffer.write('RIFF', 0);
|
|
19
|
-
buffer.writeUInt32LE(36 + dataLength, 4);
|
|
20
|
-
buffer.write('WAVE', 8);
|
|
21
|
-
// fmt
|
|
22
|
-
buffer.write('fmt ', 12);
|
|
23
|
-
buffer.writeUInt32LE(16, 16); // Subchunk1Size (16 for PCM)
|
|
24
|
-
buffer.writeUInt16LE(1, 20); // AudioFormat (1 = PCM)
|
|
25
|
-
buffer.writeUInt16LE(1, 22); // NumChannels (1 = Mono)
|
|
26
|
-
buffer.writeUInt32LE(sampleRate, 24); // SampleRate
|
|
27
|
-
buffer.writeUInt32LE(sampleRate * 2, 28); // ByteRate (SampleRate * NumChannels * BitsPerSample/8)
|
|
28
|
-
buffer.writeUInt16LE(2, 32); // BlockAlign (NumChannels * BitsPerSample/8)
|
|
29
|
-
buffer.writeUInt16LE(16, 34); // BitsPerSample
|
|
30
|
-
// data
|
|
31
|
-
buffer.write('data', 36);
|
|
32
|
-
buffer.writeUInt32LE(dataLength, 40);
|
|
33
|
-
return buffer;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
exports.WavUtils = WavUtils;
|
|
37
|
-
//# sourceMappingURL=WavUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WavUtils.js","sourceRoot":"","sources":["../../../src/core/utils/WavUtils.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,QAAQ;IACjB;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,UAAkB,EAAE,aAAqB,KAAK;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEhC,OAAO;QACP,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExB,MAAM;QACN,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,6BAA6B;QAC3D,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,wBAAwB;QACtD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAE,yBAAyB;QACvD,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;QACnD,MAAM,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wDAAwD;QAClG,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,6CAA6C;QAC1E,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB;QAE9C,OAAO;QACP,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAhCD,4BAgCC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { IRepository, Intent } from '../interfaces';
|
|
2
|
-
import { ConversationSession } from '../application/ConversationSession';
|
|
3
|
-
export declare class InMemoryRepository implements IRepository {
|
|
4
|
-
private sessions;
|
|
5
|
-
private intents;
|
|
6
|
-
saveSession(session: ConversationSession): Promise<void>;
|
|
7
|
-
findSessionById(sessionId: string): Promise<ConversationSession | null>;
|
|
8
|
-
saveIntent(intent: Intent): Promise<void>;
|
|
9
|
-
upsertIntents(intents: Intent[]): Promise<void>;
|
|
10
|
-
findIntentByName(name: string): Promise<Intent | null>;
|
|
11
|
-
getAllIntents(): Promise<Intent[]>;
|
|
12
|
-
deleteIntent(name: string): Promise<void>;
|
|
13
|
-
searchIntents(embedding: number[], topK?: number): Promise<Intent[]>;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=InMemoryRepository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryRepository.d.ts","sourceRoot":"","sources":["../../src/db/InMemoryRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,qBAAa,kBAAmB,YAAW,WAAW;IAClD,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,OAAO,CAAkC;IAE3C,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAKvE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKtD,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAKjF"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InMemoryRepository = void 0;
|
|
4
|
-
class InMemoryRepository {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.sessions = new Map();
|
|
7
|
-
this.intents = new Map();
|
|
8
|
-
}
|
|
9
|
-
async saveSession(session) {
|
|
10
|
-
this.sessions.set(session.sessionId, session);
|
|
11
|
-
}
|
|
12
|
-
async findSessionById(sessionId) {
|
|
13
|
-
return this.sessions.get(sessionId) || null;
|
|
14
|
-
}
|
|
15
|
-
// Intent Management
|
|
16
|
-
async saveIntent(intent) {
|
|
17
|
-
this.intents.set(intent.name, intent);
|
|
18
|
-
}
|
|
19
|
-
async upsertIntents(intents) {
|
|
20
|
-
for (const intent of intents) {
|
|
21
|
-
this.intents.set(intent.name, intent);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
async findIntentByName(name) {
|
|
25
|
-
const intent = this.intents.get(name);
|
|
26
|
-
return intent || null;
|
|
27
|
-
}
|
|
28
|
-
async getAllIntents() {
|
|
29
|
-
return Array.from(this.intents.values());
|
|
30
|
-
}
|
|
31
|
-
async deleteIntent(name) {
|
|
32
|
-
this.intents.delete(name);
|
|
33
|
-
}
|
|
34
|
-
async searchIntents(embedding, topK = 10) {
|
|
35
|
-
// Naive mock implementation: return all intents up to topK
|
|
36
|
-
// Real implementation would use cosine similarity between embedding and intent.embedding
|
|
37
|
-
return Array.from(this.intents.values()).slice(0, topK);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
exports.InMemoryRepository = InMemoryRepository;
|
|
41
|
-
//# sourceMappingURL=InMemoryRepository.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryRepository.js","sourceRoot":"","sources":["../../src/db/InMemoryRepository.ts"],"names":[],"mappings":";;;AAGA,MAAa,kBAAkB;IAA/B;QACY,aAAQ,GAAqC,IAAI,GAAG,EAAE,CAAC;QACvD,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAuCrD,CAAC;IArCG,KAAK,CAAC,WAAW,CAAC,OAA4B;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,UAAU,CAAC,MAAc;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiB;QACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,MAAM,IAAI,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,aAAa;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAmB,EAAE,OAAe,EAAE;QACtD,2DAA2D;QAC3D,yFAAyF;QACzF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;CACJ;AAzCD,gDAyCC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { IRepository as IRepository, Intent } from '../interfaces';
|
|
2
|
-
import { ConversationSession } from '../application/ConversationSession';
|
|
3
|
-
export declare class RedisRepository implements IRepository {
|
|
4
|
-
private client;
|
|
5
|
-
private readonly SESSION_TTL;
|
|
6
|
-
constructor(connectionString?: string);
|
|
7
|
-
saveSession(session: ConversationSession): Promise<void>;
|
|
8
|
-
findSessionById(sessionId: string): Promise<ConversationSession | null>;
|
|
9
|
-
saveIntent(intent: Intent): Promise<void>;
|
|
10
|
-
upsertIntents(intents: Intent[]): Promise<void>;
|
|
11
|
-
findIntentByName(name: string): Promise<Intent | null>;
|
|
12
|
-
deleteIntent(name: string): Promise<void>;
|
|
13
|
-
getAllIntents(): Promise<Intent[]>;
|
|
14
|
-
disconnect(): Promise<void>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=RedisRepository.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RedisRepository.d.ts","sourceRoot":"","sources":["../../src/db/RedisRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,qBAAa,eAAgB,YAAW,WAAW;IAC/C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAExB,gBAAgB,GAAE,MAAiC;IASzD,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAiBvE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOtD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RedisRepository = void 0;
|
|
7
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
8
|
-
const ConversationSession_1 = require("../application/ConversationSession");
|
|
9
|
-
class RedisRepository {
|
|
10
|
-
constructor(connectionString = 'redis://localhost:6379') {
|
|
11
|
-
this.SESSION_TTL = 3600; // 1 Hour
|
|
12
|
-
this.client = new ioredis_1.default(connectionString);
|
|
13
|
-
this.client.on('error', (err) => {
|
|
14
|
-
console.error('[Redis Error]', err);
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
// Session Management (Existing)
|
|
18
|
-
async saveSession(session) {
|
|
19
|
-
const key = `session:${session.sessionId}`;
|
|
20
|
-
const data = JSON.stringify(session.toSnapshot());
|
|
21
|
-
await this.client.set(key, data, 'EX', this.SESSION_TTL);
|
|
22
|
-
}
|
|
23
|
-
async findSessionById(sessionId) {
|
|
24
|
-
const key = `session:${sessionId}`;
|
|
25
|
-
const data = await this.client.get(key);
|
|
26
|
-
if (!data)
|
|
27
|
-
return null;
|
|
28
|
-
try {
|
|
29
|
-
const parsed = JSON.parse(data);
|
|
30
|
-
return ConversationSession_1.ConversationSession.reconstitute(parsed);
|
|
31
|
-
}
|
|
32
|
-
catch (err) {
|
|
33
|
-
console.error(`Failed to reconstitute session ${sessionId}`, err);
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// Intent Management (Data Access Only)
|
|
38
|
-
async saveIntent(intent) {
|
|
39
|
-
const key = `intent:${intent.name}`;
|
|
40
|
-
await this.client.call('JSON.SET', key, '$', JSON.stringify(intent));
|
|
41
|
-
}
|
|
42
|
-
async upsertIntents(intents) {
|
|
43
|
-
for (const intent of intents) {
|
|
44
|
-
// The embedding should be provided by the caller or handled externally
|
|
45
|
-
// This repository is now purely for data access.
|
|
46
|
-
await this.saveIntent(intent);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
async findIntentByName(name) {
|
|
50
|
-
const key = `intent:${name}`;
|
|
51
|
-
const data = await this.client.call('JSON.GET', key);
|
|
52
|
-
if (!data)
|
|
53
|
-
return null;
|
|
54
|
-
return typeof data === 'string' ? JSON.parse(data) : data;
|
|
55
|
-
}
|
|
56
|
-
async deleteIntent(name) {
|
|
57
|
-
const key = `intent:${name}`;
|
|
58
|
-
await this.client.del(key);
|
|
59
|
-
}
|
|
60
|
-
async getAllIntents() {
|
|
61
|
-
// Scan for keys with intent prefix
|
|
62
|
-
const keys = await this.client.keys('intent:*');
|
|
63
|
-
if (keys.length === 0)
|
|
64
|
-
return [];
|
|
65
|
-
// Use JSON.MGET to fetch all
|
|
66
|
-
// Note: JSON.MGET might not be supported in all ioredis versions directly, but call works
|
|
67
|
-
// However, standard MGET doesn't work for JSON types in some versions depending on module loading
|
|
68
|
-
// Safer to loop or use pipeline
|
|
69
|
-
const pipeline = this.client.pipeline();
|
|
70
|
-
keys.forEach(key => pipeline.call('JSON.GET', key));
|
|
71
|
-
const results = await pipeline.exec();
|
|
72
|
-
if (!results)
|
|
73
|
-
return [];
|
|
74
|
-
return results
|
|
75
|
-
.map(([err, res]) => {
|
|
76
|
-
if (err || !res)
|
|
77
|
-
return null;
|
|
78
|
-
return typeof res === 'string' ? JSON.parse(res) : res;
|
|
79
|
-
})
|
|
80
|
-
.filter((i) => i !== null);
|
|
81
|
-
}
|
|
82
|
-
async disconnect() {
|
|
83
|
-
await this.client.quit();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
exports.RedisRepository = RedisRepository;
|
|
87
|
-
//# sourceMappingURL=RedisRepository.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RedisRepository.js","sourceRoot":"","sources":["../../src/db/RedisRepository.ts"],"names":[],"mappings":"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"}
|
package/dist/demo/cli-demo.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-demo.d.ts","sourceRoot":"","sources":["../../src/demo/cli-demo.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
package/dist/demo/cli-demo.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("dotenv/config"); // Load env vars
|
|
4
|
-
const Orchestrator_1 = require("../orchestrator/Orchestrator");
|
|
5
|
-
const InMemoryRepository_1 = require("../adapters/repository/InMemoryRepository");
|
|
6
|
-
const RedisRepository_1 = require("../adapters/repository/RedisRepository");
|
|
7
|
-
const MockLLMAdapter_1 = require("../adapters/llm/MockLLMAdapter");
|
|
8
|
-
const GeminiLLMAdapter_1 = require("../adapters/llm/GeminiLLMAdapter");
|
|
9
|
-
const MockIntentService_1 = require("../adapters/intent/MockIntentService");
|
|
10
|
-
const MockWorkflowAdapter_1 = require("../adapters/workflow/MockWorkflowAdapter");
|
|
11
|
-
const IntentService_1 = require("../adapters/intent/IntentService");
|
|
12
|
-
const IntentMatcher_1 = require("../adapters/intent/IntentMatcher");
|
|
13
|
-
const interfaces_1 = require("../interfaces");
|
|
14
|
-
const WebhookService_1 = require("../adapters/webhook/WebhookService");
|
|
15
|
-
const uuid_1 = require("uuid");
|
|
16
|
-
async function runDemo() {
|
|
17
|
-
console.log('--- Chat-Flow Demo Start ---');
|
|
18
|
-
console.log(`[Env Check] VERSION: ${process.env.VERSION}`);
|
|
19
|
-
const redisUrl = process.env.REDIS_URL;
|
|
20
|
-
// 1. Initialize Adapters
|
|
21
|
-
const apiKey = process.env.GOOGLE_AI_API_KEY;
|
|
22
|
-
let llm;
|
|
23
|
-
if (apiKey) {
|
|
24
|
-
console.log(`[Init] Using Gemini Generative AI Adapter\n`);
|
|
25
|
-
llm = new GeminiLLMAdapter_1.GeminiLLMAdapter(apiKey);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
console.log(`[Init] Using Mock LLM Adapter (set GOOGLE_AI_API_KEY to use Gemini)\n`);
|
|
29
|
-
llm = new MockLLMAdapter_1.MockLLMAdapter();
|
|
30
|
-
}
|
|
31
|
-
let sessionRepo;
|
|
32
|
-
let intentAdapter;
|
|
33
|
-
if (redisUrl) {
|
|
34
|
-
console.log(`[Init] Using Redis Repository at ${redisUrl}\n`);
|
|
35
|
-
sessionRepo = new RedisRepository_1.RedisRepository(redisUrl);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
console.log(`[Init] Using In-Memory Repository (Set REDIS_URL to use Redis)\n`);
|
|
39
|
-
sessionRepo = new InMemoryRepository_1.InMemoryRepository();
|
|
40
|
-
}
|
|
41
|
-
// Setup Intent Adapter
|
|
42
|
-
// Only if we have Redis AND Gemini (for embeddings)
|
|
43
|
-
if (sessionRepo instanceof RedisRepository_1.RedisRepository && llm instanceof GeminiLLMAdapter_1.GeminiLLMAdapter) {
|
|
44
|
-
console.log(`[Init] Using Redis Repository for Real Intent Detection...`);
|
|
45
|
-
const intentMatcher = new IntentMatcher_1.IntentMatcher(llm);
|
|
46
|
-
const intentSvc = new IntentService_1.IntentService(sessionRepo, intentMatcher);
|
|
47
|
-
// IntentService now IS the intent adapter (implements IIntentService)
|
|
48
|
-
intentAdapter = intentSvc;
|
|
49
|
-
// Seed Intents
|
|
50
|
-
const intentsToSeed = [
|
|
51
|
-
{
|
|
52
|
-
name: 'FLIGHTS_INQUIRY',
|
|
53
|
-
description: 'User wants to search for flights or check availability between cities',
|
|
54
|
-
required_fields: [
|
|
55
|
-
{ name: 'origin', type: 'string' },
|
|
56
|
-
{ name: 'destination', type: 'string' }
|
|
57
|
-
],
|
|
58
|
-
optional_fields: [
|
|
59
|
-
{ name: 'date', type: 'string' }
|
|
60
|
-
]
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
name: 'SELECT_FLIGHT',
|
|
64
|
-
description: 'User selects a specific flight option from a list',
|
|
65
|
-
required_fields: [
|
|
66
|
-
{ name: 'flight_id', type: 'string' }
|
|
67
|
-
],
|
|
68
|
-
optional_fields: []
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
name: 'BOOK_FLIGHT',
|
|
72
|
-
description: 'User provides passenger details to complete the booking',
|
|
73
|
-
required_fields: [
|
|
74
|
-
{ name: 'first_name', type: 'string' },
|
|
75
|
-
{ name: 'last_name', type: 'string' },
|
|
76
|
-
{ name: 'email', type: 'string' }
|
|
77
|
-
],
|
|
78
|
-
optional_fields: [],
|
|
79
|
-
}
|
|
80
|
-
];
|
|
81
|
-
console.log(`[Init] Seeding ${intentsToSeed.length} intents...`);
|
|
82
|
-
await intentSvc.upsertIntents(intentsToSeed);
|
|
83
|
-
console.log(`[Init] Intents seeded.\n`);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
console.log(`[Init] Database/LLM not ready for Real Intent Detection, using Mock Intent Adapter\n`);
|
|
87
|
-
intentAdapter = new MockIntentService_1.MockIntentService();
|
|
88
|
-
}
|
|
89
|
-
const workflow = new MockWorkflowAdapter_1.MockWorkflowAdapter();
|
|
90
|
-
const webhookService = new WebhookService_1.WebhookService();
|
|
91
|
-
// 2. Initialize Orchestrator
|
|
92
|
-
const orchestrator = new Orchestrator_1.Orchestrator(sessionRepo, llm, intentAdapter, workflow, webhookService);
|
|
93
|
-
// 3. Create Session
|
|
94
|
-
const AIR_TRAVEL_PROMPT = `
|
|
95
|
-
You are 'SkyBot', a professional and friendly AI travel agent for 'AirConnect'.
|
|
96
|
-
Your goal is to help users book flights, check status, and manage reservations.
|
|
97
|
-
Always be polite, concise, and helpful.
|
|
98
|
-
|
|
99
|
-
IMPORTANT:
|
|
100
|
-
- If the system provides 'Workflow Results' (like available flights or booking confirmation), YOU MUST use that specific information to answer the user.
|
|
101
|
-
- Do not make up flight data. Only use what is provided by the system context.
|
|
102
|
-
- If you need more information (destination, dates), ask the user.
|
|
103
|
-
`.trim();
|
|
104
|
-
console.log('> Creating new session...');
|
|
105
|
-
const sessionId = (0, uuid_1.v4)();
|
|
106
|
-
const session = await orchestrator.createSession(sessionId, 'TEXT', AIR_TRAVEL_PROMPT);
|
|
107
|
-
console.log(`Session Created: ${session.sessionId}\n`);
|
|
108
|
-
// Helper to run turn
|
|
109
|
-
const runTurn = async (input) => {
|
|
110
|
-
console.log(`[User]: "${input}"`);
|
|
111
|
-
console.log(`... Processing ...`);
|
|
112
|
-
const { messages, metadata } = await orchestrator.processMessage(session.sessionId, input);
|
|
113
|
-
// Show metadata if available (similar to console-chat logic)
|
|
114
|
-
if (metadata?.intent) {
|
|
115
|
-
console.log(`[Meta] Intent Detected: ${metadata.intent} (Conf: ${metadata.confidence})`);
|
|
116
|
-
}
|
|
117
|
-
if (metadata?.workflowExecuted) {
|
|
118
|
-
console.log(`[Meta] Workflow Executed: ${metadata.workflowExecuted}`);
|
|
119
|
-
}
|
|
120
|
-
messages.forEach((msg) => {
|
|
121
|
-
if (msg.role === interfaces_1.Role.ASSISTANT) {
|
|
122
|
-
console.log(`[Assistant]: "${msg.content}"`);
|
|
123
|
-
}
|
|
124
|
-
else if (msg.role === interfaces_1.Role.USER && msg.content.includes("System Info")) {
|
|
125
|
-
console.log(`[System Log]: ${msg.content}`);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
console.log(''); // newline
|
|
129
|
-
};
|
|
130
|
-
// 4. Run Conversation Flow
|
|
131
|
-
// Turn 1: Handshake
|
|
132
|
-
await runTurn("Hello, I see you are a travel agent?");
|
|
133
|
-
// Turn 2: Intent Trigger
|
|
134
|
-
await runTurn("Yes, I want to book a flight to Paris");
|
|
135
|
-
// Turn 3: Follow up (Slot selection)
|
|
136
|
-
await runTurn("The morning flight at 10 AM looks good");
|
|
137
|
-
// Turn 4: Off-topic
|
|
138
|
-
await runTurn("Do you sell coffee?");
|
|
139
|
-
console.log('--- Chat-Flow Demo End ---');
|
|
140
|
-
// Cleanup Redis if used
|
|
141
|
-
if (sessionRepo instanceof RedisRepository_1.RedisRepository) {
|
|
142
|
-
await sessionRepo.disconnect();
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
runDemo().catch(err => console.error(err));
|
|
146
|
-
//# sourceMappingURL=cli-demo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-demo.js","sourceRoot":"","sources":["../../src/demo/cli-demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console-chat.d.ts","sourceRoot":"","sources":["../../src/demo/console-chat.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|