chat-flow-ardymalihi 1.0.2 → 3.0.0
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/README.md +2 -0
- package/dist/adapters/intent/IntentMatcher.d.ts +16 -0
- package/dist/adapters/intent/IntentMatcher.d.ts.map +1 -1
- package/dist/adapters/intent/IntentMatcher.js +93 -15
- package/dist/adapters/intent/IntentMatcher.js.map +1 -1
- package/dist/adapters/intent/IntentService.d.ts +4 -5
- package/dist/adapters/intent/IntentService.d.ts.map +1 -1
- package/dist/adapters/intent/IntentService.js +15 -9
- package/dist/adapters/intent/IntentService.js.map +1 -1
- package/dist/adapters/intent/MockIntentService.d.ts +7 -0
- package/dist/adapters/intent/MockIntentService.d.ts.map +1 -0
- package/dist/adapters/intent/MockIntentService.js +36 -0
- package/dist/adapters/intent/MockIntentService.js.map +1 -0
- package/dist/adapters/llm/OllamaLLMAdapter.d.ts +9 -0
- package/dist/adapters/llm/OllamaLLMAdapter.d.ts.map +1 -0
- package/dist/adapters/llm/OllamaLLMAdapter.js +74 -0
- package/dist/adapters/llm/OllamaLLMAdapter.js.map +1 -0
- package/dist/adapters/logger/ConsoleLogger.d.ts +12 -0
- package/dist/adapters/logger/ConsoleLogger.d.ts.map +1 -0
- package/dist/adapters/logger/ConsoleLogger.js +37 -0
- package/dist/adapters/logger/ConsoleLogger.js.map +1 -0
- package/dist/adapters/repository/InMemoryRepository.d.ts +35 -4
- package/dist/adapters/repository/InMemoryRepository.d.ts.map +1 -1
- package/dist/adapters/repository/InMemoryRepository.js +204 -10
- package/dist/adapters/repository/InMemoryRepository.js.map +1 -1
- package/dist/adapters/repository/RedisRepository.d.ts +52 -5
- package/dist/adapters/repository/RedisRepository.d.ts.map +1 -1
- package/dist/adapters/repository/RedisRepository.js +525 -26
- package/dist/adapters/repository/RedisRepository.js.map +1 -1
- package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts +33 -0
- package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts.map +1 -0
- package/dist/adapters/storage/RedisAudioStorageAdapter.js +121 -0
- package/dist/adapters/storage/RedisAudioStorageAdapter.js.map +1 -0
- package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts +14 -0
- package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts.map +1 -0
- package/dist/adapters/storage/RedisBufferStorageAdapter.js +94 -0
- package/dist/adapters/storage/RedisBufferStorageAdapter.js.map +1 -0
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts +29 -0
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.js +75 -0
- package/dist/adapters/voice/ElevenLabsVoiceAdapter.js.map +1 -0
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts +77 -0
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js +187 -0
- package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js.map +1 -0
- package/dist/adapters/voice/GeminiVoiceAdapter.d.ts +36 -0
- package/dist/adapters/voice/GeminiVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/GeminiVoiceAdapter.js +134 -0
- package/dist/adapters/voice/GeminiVoiceAdapter.js.map +1 -0
- package/dist/adapters/voice/GoogleTTSAdapter.d.ts +61 -0
- package/dist/adapters/voice/GoogleTTSAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/GoogleTTSAdapter.js +165 -0
- package/dist/adapters/voice/GoogleTTSAdapter.js.map +1 -0
- package/dist/adapters/voice/GoogleVoiceAdapter.d.ts +33 -0
- package/dist/adapters/voice/GoogleVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/GoogleVoiceAdapter.js +155 -0
- package/dist/adapters/voice/GoogleVoiceAdapter.js.map +1 -0
- package/dist/adapters/voice/HybridVoiceAdapter.d.ts +54 -0
- package/dist/adapters/voice/HybridVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/HybridVoiceAdapter.js +102 -0
- package/dist/adapters/voice/HybridVoiceAdapter.js.map +1 -0
- package/dist/adapters/voice/LanguageVoiceMapper.d.ts +60 -0
- package/dist/adapters/voice/LanguageVoiceMapper.d.ts.map +1 -0
- package/dist/adapters/voice/LanguageVoiceMapper.js +130 -0
- package/dist/adapters/voice/LanguageVoiceMapper.js.map +1 -0
- package/dist/adapters/voice/VertexVoiceAdapter.d.ts +32 -0
- package/dist/adapters/voice/VertexVoiceAdapter.d.ts.map +1 -0
- package/dist/adapters/voice/VertexVoiceAdapter.js +179 -0
- package/dist/adapters/voice/VertexVoiceAdapter.js.map +1 -0
- package/dist/adapters/webhook/WebhookService.d.ts +47 -0
- package/dist/adapters/webhook/WebhookService.d.ts.map +1 -0
- package/dist/adapters/webhook/WebhookService.js +265 -0
- package/dist/adapters/webhook/WebhookService.js.map +1 -0
- package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -1
- package/dist/adapters/workflow/MockWorkflowAdapter.js +12 -1
- package/dist/adapters/workflow/MockWorkflowAdapter.js.map +1 -1
- package/dist/adapters/workflow/WorkflowAdapter.d.ts +55 -0
- package/dist/adapters/workflow/WorkflowAdapter.d.ts.map +1 -0
- package/dist/adapters/workflow/WorkflowAdapter.js +242 -0
- package/dist/adapters/workflow/WorkflowAdapter.js.map +1 -0
- package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts +10 -0
- package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts.map +1 -0
- package/dist/adapters/workflow/actions/getSupportHoursAction.js +33 -0
- package/dist/adapters/workflow/actions/getSupportHoursAction.js.map +1 -0
- package/dist/adapters/workflow/actions/index.d.ts +6 -0
- package/dist/adapters/workflow/actions/index.d.ts.map +1 -0
- package/dist/adapters/workflow/actions/index.js +22 -0
- package/dist/adapters/workflow/actions/index.js.map +1 -0
- package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts +11 -0
- package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts.map +1 -0
- package/dist/adapters/workflow/actions/pushOutputResultAction.js +31 -0
- package/dist/adapters/workflow/actions/pushOutputResultAction.js.map +1 -0
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts +12 -0
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts.map +1 -0
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.js +32 -0
- package/dist/adapters/workflow/actions/setWorkflowMessageAction.js.map +1 -0
- package/dist/adapters/workflow/engine/constants.d.ts +3 -0
- package/dist/adapters/workflow/engine/constants.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/constants.js +6 -0
- package/dist/adapters/workflow/engine/constants.js.map +1 -0
- package/dist/adapters/workflow/engine/engine.d.ts +32 -0
- package/dist/adapters/workflow/engine/engine.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/engine.js +623 -0
- package/dist/adapters/workflow/engine/engine.js.map +1 -0
- package/dist/adapters/workflow/engine/event-registry.d.ts +12 -0
- package/dist/adapters/workflow/engine/event-registry.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/event-registry.js +33 -0
- package/dist/adapters/workflow/engine/event-registry.js.map +1 -0
- package/dist/adapters/workflow/engine/interpolator.d.ts +11 -0
- package/dist/adapters/workflow/engine/interpolator.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/interpolator.js +93 -0
- package/dist/adapters/workflow/engine/interpolator.js.map +1 -0
- package/dist/adapters/workflow/engine/registry.d.ts +12 -0
- package/dist/adapters/workflow/engine/registry.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/registry.js +39 -0
- package/dist/adapters/workflow/engine/registry.js.map +1 -0
- package/dist/adapters/workflow/engine/template-registry.d.ts +60 -0
- package/dist/adapters/workflow/engine/template-registry.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/template-registry.js +92 -0
- package/dist/adapters/workflow/engine/template-registry.js.map +1 -0
- package/dist/adapters/workflow/engine/types.d.ts +182 -0
- package/dist/adapters/workflow/engine/types.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/types.js +3 -0
- package/dist/adapters/workflow/engine/types.js.map +1 -0
- package/dist/adapters/workflow/engine/utils/format-utils.d.ts +43 -0
- package/dist/adapters/workflow/engine/utils/format-utils.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/utils/format-utils.js +137 -0
- package/dist/adapters/workflow/engine/utils/format-utils.js.map +1 -0
- package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts +7 -0
- package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/utils/layout-calculator.js +87 -0
- package/dist/adapters/workflow/engine/utils/layout-calculator.js.map +1 -0
- package/dist/adapters/workflow/engine/utils/slugify.d.ts +2 -0
- package/dist/adapters/workflow/engine/utils/slugify.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/utils/slugify.js +41 -0
- package/dist/adapters/workflow/engine/utils/slugify.js.map +1 -0
- package/dist/adapters/workflow/engine/validator.d.ts +9 -0
- package/dist/adapters/workflow/engine/validator.d.ts.map +1 -0
- package/dist/adapters/workflow/engine/validator.js +425 -0
- package/dist/adapters/workflow/engine/validator.js.map +1 -0
- package/dist/config/ChatFlowConfig.d.ts +7 -0
- package/dist/config/ChatFlowConfig.d.ts.map +1 -1
- package/dist/config/ChatFlowConfig.js +5 -0
- package/dist/config/ChatFlowConfig.js.map +1 -1
- package/dist/core/entities/ConversationSession.d.ts +36 -1
- package/dist/core/entities/ConversationSession.d.ts.map +1 -1
- package/dist/core/entities/ConversationSession.js +78 -1
- package/dist/core/entities/ConversationSession.js.map +1 -1
- package/dist/core/entities/Message.d.ts +5 -2
- package/dist/core/entities/Message.d.ts.map +1 -1
- package/dist/core/entities/Message.js +2 -0
- package/dist/core/entities/Message.js.map +1 -1
- package/dist/core/utils/AudioStreamBuffer.d.ts +33 -0
- package/dist/core/utils/AudioStreamBuffer.d.ts.map +1 -0
- package/dist/core/utils/AudioStreamBuffer.js +55 -0
- package/dist/core/utils/AudioStreamBuffer.js.map +1 -0
- package/dist/core/utils/AudioUtils.d.ts +41 -0
- package/dist/core/utils/AudioUtils.d.ts.map +1 -0
- package/dist/core/utils/AudioUtils.js +188 -0
- package/dist/core/utils/AudioUtils.js.map +1 -0
- package/dist/core/utils/LanguageDetector.d.ts +52 -0
- package/dist/core/utils/LanguageDetector.d.ts.map +1 -0
- package/dist/core/utils/LanguageDetector.js +173 -0
- package/dist/core/utils/LanguageDetector.js.map +1 -0
- package/dist/core/utils/WavUtils.d.ts +14 -0
- package/dist/core/utils/WavUtils.d.ts.map +1 -0
- package/dist/core/utils/WavUtils.js +37 -0
- package/dist/core/utils/WavUtils.js.map +1 -0
- package/dist/demo/cli-demo.js +10 -6
- package/dist/demo/cli-demo.js.map +1 -1
- package/dist/demo/console-chat.js +10 -6
- package/dist/demo/console-chat.js.map +1 -1
- package/dist/demo/interactive-voice-chat.d.ts +2 -0
- package/dist/demo/interactive-voice-chat.d.ts.map +1 -0
- package/dist/demo/interactive-voice-chat.js +180 -0
- package/dist/demo/interactive-voice-chat.js.map +1 -0
- package/dist/demo/voice-demo.d.ts +2 -0
- package/dist/demo/voice-demo.d.ts.map +1 -0
- package/dist/demo/voice-demo.js +188 -0
- package/dist/demo/voice-demo.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -8
- package/dist/index.js.map +1 -1
- package/dist/intent/IntentService.d.ts.map +1 -1
- package/dist/intent/IntentService.js +13 -7
- package/dist/intent/IntentService.js.map +1 -1
- package/dist/intent/MockIntentService.d.ts +2 -1
- package/dist/intent/MockIntentService.d.ts.map +1 -1
- package/dist/intent/MockIntentService.js +9 -3
- package/dist/intent/MockIntentService.js.map +1 -1
- package/dist/interfaces.d.ts +551 -6
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +19 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/orchestrator/Orchestrator.d.ts +48 -4
- package/dist/orchestrator/Orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/Orchestrator.js +650 -33
- package/dist/orchestrator/Orchestrator.js.map +1 -1
- package/dist/scripts/seed-collaborative-intents.d.ts +2 -0
- package/dist/scripts/seed-collaborative-intents.d.ts.map +1 -0
- package/dist/scripts/seed-collaborative-intents.js +90 -0
- package/dist/scripts/seed-collaborative-intents.js.map +1 -0
- package/dist/scripts/test-isolated-config.d.ts +2 -0
- package/dist/scripts/test-isolated-config.d.ts.map +1 -0
- package/dist/scripts/test-isolated-config.js +80 -0
- package/dist/scripts/test-isolated-config.js.map +1 -0
- package/dist/scripts/verify_redis_intents.js +4 -2
- package/dist/scripts/verify_redis_intents.js.map +1 -1
- package/dist/server/ChatFlowWebSocketServer.d.ts +46 -0
- package/dist/server/ChatFlowWebSocketServer.d.ts.map +1 -0
- package/dist/server/ChatFlowWebSocketServer.js +344 -0
- package/dist/server/ChatFlowWebSocketServer.js.map +1 -0
- package/dist/server/realtime-voice-server.d.ts +2 -0
- package/dist/server/realtime-voice-server.d.ts.map +1 -0
- package/dist/server/realtime-voice-server.js +627 -0
- package/dist/server/realtime-voice-server.js.map +1 -0
- package/dist/src/adapters/intent/IntentMatcher.d.ts +41 -0
- package/dist/src/adapters/intent/IntentMatcher.d.ts.map +1 -0
- package/dist/src/adapters/intent/IntentMatcher.js +167 -0
- package/dist/src/adapters/intent/IntentMatcher.js.map +1 -0
- package/dist/src/adapters/intent/IntentService.d.ts +26 -0
- package/dist/src/adapters/intent/IntentService.d.ts.map +1 -0
- package/dist/src/adapters/intent/IntentService.js +65 -0
- package/dist/src/adapters/intent/IntentService.js.map +1 -0
- package/dist/src/adapters/intent/MockIntentService.d.ts +7 -0
- package/dist/src/adapters/intent/MockIntentService.d.ts.map +1 -0
- package/dist/src/adapters/intent/MockIntentService.js +36 -0
- package/dist/src/adapters/intent/MockIntentService.js.map +1 -0
- package/dist/src/adapters/llm/GeminiLLMAdapter.d.ts +10 -0
- package/dist/src/adapters/llm/GeminiLLMAdapter.d.ts.map +1 -0
- package/dist/src/adapters/llm/GeminiLLMAdapter.js +102 -0
- package/dist/src/adapters/llm/GeminiLLMAdapter.js.map +1 -0
- package/dist/src/adapters/llm/MockLLMAdapter.d.ts +5 -0
- package/dist/src/adapters/llm/MockLLMAdapter.d.ts.map +1 -0
- package/dist/src/adapters/llm/MockLLMAdapter.js +31 -0
- package/dist/src/adapters/llm/MockLLMAdapter.js.map +1 -0
- package/dist/src/adapters/llm/OllamaLLMAdapter.d.ts +9 -0
- package/dist/src/adapters/llm/OllamaLLMAdapter.d.ts.map +1 -0
- package/dist/src/adapters/llm/OllamaLLMAdapter.js +74 -0
- package/dist/src/adapters/llm/OllamaLLMAdapter.js.map +1 -0
- package/dist/src/adapters/logger/ConsoleLogger.d.ts +12 -0
- package/dist/src/adapters/logger/ConsoleLogger.d.ts.map +1 -0
- package/dist/src/adapters/logger/ConsoleLogger.js +37 -0
- package/dist/src/adapters/logger/ConsoleLogger.js.map +1 -0
- package/dist/src/adapters/repository/InMemoryRepository.d.ts +57 -0
- package/dist/src/adapters/repository/InMemoryRepository.d.ts.map +1 -0
- package/dist/src/adapters/repository/InMemoryRepository.js +269 -0
- package/dist/src/adapters/repository/InMemoryRepository.js.map +1 -0
- package/dist/src/adapters/repository/RedisRepository.d.ts +72 -0
- package/dist/src/adapters/repository/RedisRepository.d.ts.map +1 -0
- package/dist/src/adapters/repository/RedisRepository.js +700 -0
- package/dist/src/adapters/repository/RedisRepository.js.map +1 -0
- package/dist/src/adapters/repository/SupabaseRepository.d.ts +60 -0
- package/dist/src/adapters/repository/SupabaseRepository.d.ts.map +1 -0
- package/dist/src/adapters/repository/SupabaseRepository.js +774 -0
- package/dist/src/adapters/repository/SupabaseRepository.js.map +1 -0
- package/dist/src/adapters/storage/RedisAudioStorageAdapter.d.ts +33 -0
- package/dist/src/adapters/storage/RedisAudioStorageAdapter.d.ts.map +1 -0
- package/dist/src/adapters/storage/RedisAudioStorageAdapter.js +121 -0
- package/dist/src/adapters/storage/RedisAudioStorageAdapter.js.map +1 -0
- package/dist/src/adapters/voice/GoogleVoiceAdapter.d.ts +33 -0
- package/dist/src/adapters/voice/GoogleVoiceAdapter.d.ts.map +1 -0
- package/dist/src/adapters/voice/GoogleVoiceAdapter.js +155 -0
- package/dist/src/adapters/voice/GoogleVoiceAdapter.js.map +1 -0
- package/dist/src/adapters/voice/LanguageVoiceMapper.d.ts +60 -0
- package/dist/src/adapters/voice/LanguageVoiceMapper.d.ts.map +1 -0
- package/dist/src/adapters/voice/LanguageVoiceMapper.js +130 -0
- package/dist/src/adapters/voice/LanguageVoiceMapper.js.map +1 -0
- package/dist/src/adapters/voice/VertexVoiceAdapter.d.ts +32 -0
- package/dist/src/adapters/voice/VertexVoiceAdapter.d.ts.map +1 -0
- package/dist/src/adapters/voice/VertexVoiceAdapter.js +179 -0
- package/dist/src/adapters/voice/VertexVoiceAdapter.js.map +1 -0
- package/dist/src/adapters/webhook/WebhookService.d.ts +47 -0
- package/dist/src/adapters/webhook/WebhookService.d.ts.map +1 -0
- package/dist/src/adapters/webhook/WebhookService.js +265 -0
- package/dist/src/adapters/webhook/WebhookService.js.map +1 -0
- package/dist/src/adapters/workflow/MockWorkflowAdapter.d.ts +5 -0
- package/dist/src/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -0
- package/dist/src/adapters/workflow/MockWorkflowAdapter.js +173 -0
- package/dist/src/adapters/workflow/MockWorkflowAdapter.js.map +1 -0
- package/dist/src/adapters/workflow/WorkflowAdapter.d.ts +55 -0
- package/dist/src/adapters/workflow/WorkflowAdapter.d.ts.map +1 -0
- package/dist/src/adapters/workflow/WorkflowAdapter.js +203 -0
- package/dist/src/adapters/workflow/WorkflowAdapter.js.map +1 -0
- package/dist/src/adapters/workflow/actions/index.d.ts +6 -0
- package/dist/src/adapters/workflow/actions/index.d.ts.map +1 -0
- package/dist/src/adapters/workflow/actions/index.js +22 -0
- package/dist/src/adapters/workflow/actions/index.js.map +1 -0
- package/dist/src/adapters/workflow/actions/pushOutputResultAction.d.ts +11 -0
- package/dist/src/adapters/workflow/actions/pushOutputResultAction.d.ts.map +1 -0
- package/dist/src/adapters/workflow/actions/pushOutputResultAction.js +31 -0
- package/dist/src/adapters/workflow/actions/pushOutputResultAction.js.map +1 -0
- package/dist/src/adapters/workflow/engine/constants.d.ts +3 -0
- package/dist/src/adapters/workflow/engine/constants.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/constants.js +6 -0
- package/dist/src/adapters/workflow/engine/constants.js.map +1 -0
- package/dist/src/adapters/workflow/engine/engine.d.ts +32 -0
- package/dist/src/adapters/workflow/engine/engine.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/engine.js +622 -0
- package/dist/src/adapters/workflow/engine/engine.js.map +1 -0
- package/dist/src/adapters/workflow/engine/event-registry.d.ts +12 -0
- package/dist/src/adapters/workflow/engine/event-registry.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/event-registry.js +33 -0
- package/dist/src/adapters/workflow/engine/event-registry.js.map +1 -0
- package/dist/src/adapters/workflow/engine/interpolator.d.ts +11 -0
- package/dist/src/adapters/workflow/engine/interpolator.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/interpolator.js +93 -0
- package/dist/src/adapters/workflow/engine/interpolator.js.map +1 -0
- package/dist/src/adapters/workflow/engine/registry.d.ts +12 -0
- package/dist/src/adapters/workflow/engine/registry.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/registry.js +39 -0
- package/dist/src/adapters/workflow/engine/registry.js.map +1 -0
- package/dist/src/adapters/workflow/engine/template-registry.d.ts +60 -0
- package/dist/src/adapters/workflow/engine/template-registry.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/template-registry.js +92 -0
- package/dist/src/adapters/workflow/engine/template-registry.js.map +1 -0
- package/dist/src/adapters/workflow/engine/utils/format-utils.d.ts +43 -0
- package/dist/src/adapters/workflow/engine/utils/format-utils.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/utils/format-utils.js +137 -0
- package/dist/src/adapters/workflow/engine/utils/format-utils.js.map +1 -0
- package/dist/src/adapters/workflow/engine/utils/layout-calculator.d.ts +7 -0
- package/dist/src/adapters/workflow/engine/utils/layout-calculator.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/utils/layout-calculator.js +87 -0
- package/dist/src/adapters/workflow/engine/utils/layout-calculator.js.map +1 -0
- package/dist/src/adapters/workflow/engine/utils/slugify.d.ts +2 -0
- package/dist/src/adapters/workflow/engine/utils/slugify.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/utils/slugify.js +41 -0
- package/dist/src/adapters/workflow/engine/utils/slugify.js.map +1 -0
- package/dist/src/adapters/workflow/engine/validator.d.ts +9 -0
- package/dist/src/adapters/workflow/engine/validator.d.ts.map +1 -0
- package/dist/src/adapters/workflow/engine/validator.js +425 -0
- package/dist/src/adapters/workflow/engine/validator.js.map +1 -0
- package/dist/src/api/router.d.ts +3 -0
- package/dist/src/api/router.d.ts.map +1 -0
- package/dist/src/api/router.js +27 -0
- package/dist/src/api/router.js.map +1 -0
- package/dist/src/api/routes/configs.d.ts +3 -0
- package/dist/src/api/routes/configs.d.ts.map +1 -0
- package/dist/src/api/routes/configs.js +110 -0
- package/dist/src/api/routes/configs.js.map +1 -0
- package/dist/src/api/routes/executions.d.ts +3 -0
- package/dist/src/api/routes/executions.d.ts.map +1 -0
- package/dist/src/api/routes/executions.js +77 -0
- package/dist/src/api/routes/executions.js.map +1 -0
- package/dist/src/api/routes/intents.d.ts +3 -0
- package/dist/src/api/routes/intents.d.ts.map +1 -0
- package/dist/src/api/routes/intents.js +128 -0
- package/dist/src/api/routes/intents.js.map +1 -0
- package/dist/src/api/routes/sessions.d.ts +3 -0
- package/dist/src/api/routes/sessions.d.ts.map +1 -0
- package/dist/src/api/routes/sessions.js +105 -0
- package/dist/src/api/routes/sessions.js.map +1 -0
- package/dist/src/api/routes/tenants.d.ts +3 -0
- package/dist/src/api/routes/tenants.d.ts.map +1 -0
- package/dist/src/api/routes/tenants.js +109 -0
- package/dist/src/api/routes/tenants.js.map +1 -0
- package/dist/src/api/routes/users.d.ts +3 -0
- package/dist/src/api/routes/users.d.ts.map +1 -0
- package/dist/src/api/routes/users.js +51 -0
- package/dist/src/api/routes/users.js.map +1 -0
- package/dist/src/api/routes/workflows.d.ts +3 -0
- package/dist/src/api/routes/workflows.d.ts.map +1 -0
- package/dist/src/api/routes/workflows.js +132 -0
- package/dist/src/api/routes/workflows.js.map +1 -0
- package/dist/src/config/ChatFlowConfig.d.ts +66 -0
- package/dist/src/config/ChatFlowConfig.d.ts.map +1 -0
- package/dist/src/config/ChatFlowConfig.js +54 -0
- package/dist/src/config/ChatFlowConfig.js.map +1 -0
- package/dist/src/config/index.d.ts +2 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +7 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/swagger.d.ts +2 -0
- package/dist/src/config/swagger.d.ts.map +1 -0
- package/dist/src/config/swagger.js +136 -0
- package/dist/src/config/swagger.js.map +1 -0
- package/dist/src/core/entities/ConversationSession.d.ts +58 -0
- package/dist/src/core/entities/ConversationSession.d.ts.map +1 -0
- package/dist/src/core/entities/ConversationSession.js +160 -0
- package/dist/src/core/entities/ConversationSession.js.map +1 -0
- package/dist/src/core/entities/Message.d.ts +14 -0
- package/dist/src/core/entities/Message.d.ts.map +1 -0
- package/dist/src/core/entities/Message.js +32 -0
- package/dist/src/core/entities/Message.js.map +1 -0
- package/dist/src/core/errors/ChatFlowError.d.ts +71 -0
- package/dist/src/core/errors/ChatFlowError.d.ts.map +1 -0
- package/dist/src/core/errors/ChatFlowError.js +108 -0
- package/dist/src/core/errors/ChatFlowError.js.map +1 -0
- package/dist/src/core/errors/index.d.ts +2 -0
- package/dist/src/core/errors/index.d.ts.map +1 -0
- package/dist/src/core/errors/index.js +15 -0
- package/dist/src/core/errors/index.js.map +1 -0
- package/dist/src/core/utils/AudioUtils.d.ts +41 -0
- package/dist/src/core/utils/AudioUtils.d.ts.map +1 -0
- package/dist/src/core/utils/AudioUtils.js +188 -0
- package/dist/src/core/utils/AudioUtils.js.map +1 -0
- package/dist/src/core/utils/LanguageDetector.d.ts +52 -0
- package/dist/src/core/utils/LanguageDetector.d.ts.map +1 -0
- package/dist/src/core/utils/LanguageDetector.js +173 -0
- package/dist/src/core/utils/LanguageDetector.js.map +1 -0
- package/dist/src/demo/cli-demo.d.ts +2 -0
- package/dist/src/demo/cli-demo.d.ts.map +1 -0
- package/dist/src/demo/cli-demo.js +146 -0
- package/dist/src/demo/cli-demo.js.map +1 -0
- package/dist/src/demo/console-chat.d.ts +2 -0
- package/dist/src/demo/console-chat.d.ts.map +1 -0
- package/dist/src/demo/console-chat.js +148 -0
- package/dist/src/demo/console-chat.js.map +1 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +78 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces.d.ts +663 -0
- package/dist/src/interfaces.d.ts.map +1 -0
- package/dist/src/interfaces.js +36 -0
- package/dist/src/interfaces.js.map +1 -0
- package/dist/src/orchestrator/Orchestrator.d.ts +62 -0
- package/dist/src/orchestrator/Orchestrator.d.ts.map +1 -0
- package/dist/src/orchestrator/Orchestrator.js +697 -0
- package/dist/src/orchestrator/Orchestrator.js.map +1 -0
- package/dist/src/scripts/debug-redis.d.ts +2 -0
- package/dist/src/scripts/debug-redis.d.ts.map +1 -0
- package/dist/src/scripts/debug-redis.js +55 -0
- package/dist/src/scripts/debug-redis.js.map +1 -0
- package/dist/src/scripts/seed-collaborative-intents.d.ts +2 -0
- package/dist/src/scripts/seed-collaborative-intents.d.ts.map +1 -0
- package/dist/src/scripts/seed-collaborative-intents.js +90 -0
- package/dist/src/scripts/seed-collaborative-intents.js.map +1 -0
- package/dist/src/scripts/test-isolated-config.d.ts +2 -0
- package/dist/src/scripts/test-isolated-config.d.ts.map +1 -0
- package/dist/src/scripts/test-isolated-config.js +80 -0
- package/dist/src/scripts/test-isolated-config.js.map +1 -0
- package/dist/src/scripts/verify_memory_intents.d.ts +2 -0
- package/dist/src/scripts/verify_memory_intents.d.ts.map +1 -0
- package/dist/src/scripts/verify_memory_intents.js +45 -0
- package/dist/src/scripts/verify_memory_intents.js.map +1 -0
- package/dist/src/scripts/verify_redis_intents.d.ts +2 -0
- package/dist/src/scripts/verify_redis_intents.d.ts.map +1 -0
- package/dist/src/scripts/verify_redis_intents.js +52 -0
- package/dist/src/scripts/verify_redis_intents.js.map +1 -0
- package/dist/src/server/ChatFlowWebSocketServer.d.ts +42 -0
- package/dist/src/server/ChatFlowWebSocketServer.d.ts.map +1 -0
- package/dist/src/server/ChatFlowWebSocketServer.js +355 -0
- package/dist/src/server/ChatFlowWebSocketServer.js.map +1 -0
- package/dist/src/utils/crypto.d.ts +7 -0
- package/dist/src/utils/crypto.d.ts.map +1 -0
- package/dist/src/utils/crypto.js +35 -0
- package/dist/src/utils/crypto.js.map +1 -0
- package/dist/src/utils/encryption-helpers.d.ts +14 -0
- package/dist/src/utils/encryption-helpers.d.ts.map +1 -0
- package/dist/src/utils/encryption-helpers.js +49 -0
- package/dist/src/utils/encryption-helpers.js.map +1 -0
- package/dist/utils/crypto.d.ts +7 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +35 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/encryption-helpers.d.ts +14 -0
- package/dist/utils/encryption-helpers.d.ts.map +1 -0
- package/dist/utils/encryption-helpers.js +49 -0
- package/dist/utils/encryption-helpers.js.map +1 -0
- package/dist/web/seed-demo-data.d.ts +2 -0
- package/dist/web/seed-demo-data.d.ts.map +1 -0
- package/dist/web/seed-demo-data.js +267 -0
- package/dist/web/seed-demo-data.js.map +1 -0
- package/dist/web/web-server.d.ts +2 -0
- package/dist/web/web-server.d.ts.map +1 -0
- package/dist/web/web-server.js +165 -0
- package/dist/web/web-server.js.map +1 -0
- package/package.json +32 -3
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Hybrid Voice Adapter
|
|
4
|
+
* Combines multiple voice providers:
|
|
5
|
+
* - STT: Gemini (free with Gemini API key, supports 125+ languages with auto-detection)
|
|
6
|
+
* - TTS: ElevenLabs (supports 70+ languages with multilingual voice cloning)
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Automatic language detection
|
|
10
|
+
* - Dynamic voice switching based on detected language
|
|
11
|
+
* - Language-to-voice mapping
|
|
12
|
+
*/
|
|
13
|
+
export declare class HybridVoiceAdapter implements IVoiceAdapter {
|
|
14
|
+
private sttAdapter;
|
|
15
|
+
private ttsAdapter;
|
|
16
|
+
private voiceMapper;
|
|
17
|
+
private currentLanguage;
|
|
18
|
+
private voiceConfig?;
|
|
19
|
+
constructor(geminiApiKey: string, elevenLabsApiKey: string, voiceConfig?: VoiceConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Speech-to-text using Gemini with auto language detection
|
|
22
|
+
*/
|
|
23
|
+
speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Text-to-speech using ElevenLabs with dynamic voice selection
|
|
26
|
+
*/
|
|
27
|
+
textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
|
|
28
|
+
/**
|
|
29
|
+
* Declare the audio format produced by the TTS adapter (ElevenLabs)
|
|
30
|
+
*/
|
|
31
|
+
getTTSOutputFormat(): AudioFormatMetadata;
|
|
32
|
+
/**
|
|
33
|
+
* Declare the expected audio format for the STT adapter (Gemini)
|
|
34
|
+
*/
|
|
35
|
+
getSTTInputFormat(): AudioFormatMetadata;
|
|
36
|
+
/**
|
|
37
|
+
* Set current language for TTS voice selection
|
|
38
|
+
* @param languageCode ISO 639-1 language code (e.g., 'en', 'ar', 'fa')
|
|
39
|
+
*/
|
|
40
|
+
setLanguage(languageCode: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get current language
|
|
43
|
+
*/
|
|
44
|
+
getCurrentLanguage(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get supported languages
|
|
47
|
+
*/
|
|
48
|
+
getSupportedLanguages(): string[];
|
|
49
|
+
/**
|
|
50
|
+
* Add custom voice mapping for a language
|
|
51
|
+
*/
|
|
52
|
+
addVoiceMapping(languageCode: string, voiceId: string, name: string): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=HybridVoiceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/HybridVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKnF;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAC,CAAc;gBAG9B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,WAAW;IAwB7B;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBlF;;OAEG;IACH,kBAAkB,IAAI,mBAAmB;IAIzC;;OAEG;IACH,iBAAiB,IAAI,mBAAmB;IAIxC;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQvC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAG7E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HybridVoiceAdapter = void 0;
|
|
4
|
+
const GeminiVoiceAdapter_1 = require("./GeminiVoiceAdapter");
|
|
5
|
+
const ElevenLabsVoiceAdapter_1 = require("./ElevenLabsVoiceAdapter");
|
|
6
|
+
const LanguageVoiceMapper_1 = require("./LanguageVoiceMapper");
|
|
7
|
+
/**
|
|
8
|
+
* Hybrid Voice Adapter
|
|
9
|
+
* Combines multiple voice providers:
|
|
10
|
+
* - STT: Gemini (free with Gemini API key, supports 125+ languages with auto-detection)
|
|
11
|
+
* - TTS: ElevenLabs (supports 70+ languages with multilingual voice cloning)
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Automatic language detection
|
|
15
|
+
* - Dynamic voice switching based on detected language
|
|
16
|
+
* - Language-to-voice mapping
|
|
17
|
+
*/
|
|
18
|
+
class HybridVoiceAdapter {
|
|
19
|
+
constructor(geminiApiKey, elevenLabsApiKey, voiceConfig) {
|
|
20
|
+
this.currentLanguage = 'en';
|
|
21
|
+
this.voiceConfig = voiceConfig;
|
|
22
|
+
// Use Gemini for STT
|
|
23
|
+
this.sttAdapter = new GeminiVoiceAdapter_1.GeminiVoiceAdapter(geminiApiKey, voiceConfig);
|
|
24
|
+
// Use ElevenLabs for TTS
|
|
25
|
+
this.ttsAdapter = new ElevenLabsVoiceAdapter_1.ElevenLabsVoiceAdapter(elevenLabsApiKey, voiceConfig);
|
|
26
|
+
// Initialize voice mapper with custom mappings from config
|
|
27
|
+
const customVoiceMappings = voiceConfig?.tts?.multiLingualVoices;
|
|
28
|
+
let transformedMappings;
|
|
29
|
+
if (customVoiceMappings) {
|
|
30
|
+
transformedMappings = {};
|
|
31
|
+
for (const [lang, voiceId] of Object.entries(customVoiceMappings)) {
|
|
32
|
+
transformedMappings[lang] = { voiceId, name: `Custom ${lang.toUpperCase()} Voice` };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.voiceMapper = new LanguageVoiceMapper_1.LanguageVoiceMapper(transformedMappings);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Speech-to-text using Gemini with auto language detection
|
|
39
|
+
*/
|
|
40
|
+
async speechToText(audioBase64, config) {
|
|
41
|
+
return await this.sttAdapter.speechToText(audioBase64, config);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Text-to-speech using ElevenLabs with dynamic voice selection
|
|
45
|
+
*/
|
|
46
|
+
async textToSpeech(text, config) {
|
|
47
|
+
// Use language-specific voice if available
|
|
48
|
+
const voiceId = this.voiceMapper.getVoiceForLanguage(this.currentLanguage);
|
|
49
|
+
// Build language-specific config
|
|
50
|
+
const languageConfig = {
|
|
51
|
+
provider: (config?.provider || this.voiceConfig?.tts?.provider || 'elevenlabs'),
|
|
52
|
+
voice: voiceId,
|
|
53
|
+
language: this.currentLanguage,
|
|
54
|
+
speakingRate: config?.speakingRate || this.voiceConfig?.tts?.speakingRate,
|
|
55
|
+
pitch: config?.pitch || this.voiceConfig?.tts?.pitch
|
|
56
|
+
};
|
|
57
|
+
return await this.ttsAdapter.textToSpeech(text, languageConfig);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Declare the audio format produced by the TTS adapter (ElevenLabs)
|
|
61
|
+
*/
|
|
62
|
+
getTTSOutputFormat() {
|
|
63
|
+
return this.ttsAdapter.getTTSOutputFormat();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Declare the expected audio format for the STT adapter (Gemini)
|
|
67
|
+
*/
|
|
68
|
+
getSTTInputFormat() {
|
|
69
|
+
return this.sttAdapter.getSTTInputFormat();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Set current language for TTS voice selection
|
|
73
|
+
* @param languageCode ISO 639-1 language code (e.g., 'en', 'ar', 'fa')
|
|
74
|
+
*/
|
|
75
|
+
setLanguage(languageCode) {
|
|
76
|
+
if (this.currentLanguage !== languageCode) {
|
|
77
|
+
const voiceMapping = this.voiceMapper.getVoiceMapping(languageCode);
|
|
78
|
+
console.log(`[HybridVoiceAdapter] Language switched to '${languageCode}' using voice: ${voiceMapping.name} (${voiceMapping.voiceId})`);
|
|
79
|
+
}
|
|
80
|
+
this.currentLanguage = languageCode;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get current language
|
|
84
|
+
*/
|
|
85
|
+
getCurrentLanguage() {
|
|
86
|
+
return this.currentLanguage;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get supported languages
|
|
90
|
+
*/
|
|
91
|
+
getSupportedLanguages() {
|
|
92
|
+
return this.voiceMapper.getSupportedLanguages();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Add custom voice mapping for a language
|
|
96
|
+
*/
|
|
97
|
+
addVoiceMapping(languageCode, voiceId, name) {
|
|
98
|
+
this.voiceMapper.setVoiceMapping(languageCode, { voiceId, name });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.HybridVoiceAdapter = HybridVoiceAdapter;
|
|
102
|
+
//# sourceMappingURL=HybridVoiceAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/HybridVoiceAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language to Voice ID Mapping
|
|
3
|
+
*
|
|
4
|
+
* Maps ISO 639-1 language codes to ElevenLabs voice IDs.
|
|
5
|
+
* Provides default voices for common languages and supports custom mappings.
|
|
6
|
+
*
|
|
7
|
+
* VOICE PREFERENCE POLICY:
|
|
8
|
+
* - Female voices are preferred by default for better user experience
|
|
9
|
+
* - Only use male voices when female voices are not available for a language
|
|
10
|
+
* - Default voice: Rachel (female, multilingual, supports 29 languages)
|
|
11
|
+
*/
|
|
12
|
+
export interface VoiceMapping {
|
|
13
|
+
voiceId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
gender?: 'female' | 'male' | 'neutral';
|
|
17
|
+
}
|
|
18
|
+
export declare class LanguageVoiceMapper {
|
|
19
|
+
private static readonly DEFAULT_VOICES;
|
|
20
|
+
/**
|
|
21
|
+
* VOICE PREFERENCE POLICY:
|
|
22
|
+
* All default voices use Rachel (21m00Tcm4TlvDq8ikWAM) - a female multilingual voice.
|
|
23
|
+
*
|
|
24
|
+
* To add language-specific female voices:
|
|
25
|
+
* 1. Use customMappings in constructor, OR
|
|
26
|
+
* 2. Configure via ConversationConfig.languageVoiceMapping
|
|
27
|
+
*
|
|
28
|
+
* Example female ElevenLabs voices (update with actual voice IDs):
|
|
29
|
+
* - Rachel: 21m00Tcm4TlvDq8ikWAM (multilingual, female)
|
|
30
|
+
* - Bella: EXAVITQu4vr4xnSDxMaL (English, female)
|
|
31
|
+
* - Elli: MF3mGyEYCl7XYWbV9V6O (English, female)
|
|
32
|
+
*
|
|
33
|
+
* Always prefer female voices unless specifically unavailable for a language.
|
|
34
|
+
*/
|
|
35
|
+
private customMappings;
|
|
36
|
+
constructor(customMappings?: Record<string, VoiceMapping>);
|
|
37
|
+
/**
|
|
38
|
+
* Get voice ID for a language
|
|
39
|
+
* @param languageCode ISO 639-1 language code
|
|
40
|
+
* @returns Voice ID for the language
|
|
41
|
+
*/
|
|
42
|
+
getVoiceForLanguage(languageCode: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Get voice mapping details
|
|
45
|
+
*/
|
|
46
|
+
getVoiceMapping(languageCode: string): VoiceMapping;
|
|
47
|
+
/**
|
|
48
|
+
* Add or update custom voice mapping
|
|
49
|
+
*/
|
|
50
|
+
setVoiceMapping(languageCode: string, voiceMapping: VoiceMapping): void;
|
|
51
|
+
/**
|
|
52
|
+
* Get all supported languages
|
|
53
|
+
*/
|
|
54
|
+
getSupportedLanguages(): string[];
|
|
55
|
+
/**
|
|
56
|
+
* Check if a language is supported
|
|
57
|
+
*/
|
|
58
|
+
isLanguageSupported(languageCode: string): boolean;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=LanguageVoiceMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageVoiceMapper.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/LanguageVoiceMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,mBAAmB;IAG5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAwDpC;IAEF;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,cAAc,CAA+B;gBAEzC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIzD;;;;OAIG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAkBjD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY;IAOnD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI;IAIvE;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAOjC;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;CAIrD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Language to Voice ID Mapping
|
|
4
|
+
*
|
|
5
|
+
* Maps ISO 639-1 language codes to ElevenLabs voice IDs.
|
|
6
|
+
* Provides default voices for common languages and supports custom mappings.
|
|
7
|
+
*
|
|
8
|
+
* VOICE PREFERENCE POLICY:
|
|
9
|
+
* - Female voices are preferred by default for better user experience
|
|
10
|
+
* - Only use male voices when female voices are not available for a language
|
|
11
|
+
* - Default voice: Rachel (female, multilingual, supports 29 languages)
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.LanguageVoiceMapper = void 0;
|
|
15
|
+
class LanguageVoiceMapper {
|
|
16
|
+
constructor(customMappings) {
|
|
17
|
+
this.customMappings = customMappings || {};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get voice ID for a language
|
|
21
|
+
* @param languageCode ISO 639-1 language code
|
|
22
|
+
* @returns Voice ID for the language
|
|
23
|
+
*/
|
|
24
|
+
getVoiceForLanguage(languageCode) {
|
|
25
|
+
const code = languageCode.toLowerCase();
|
|
26
|
+
// Check custom mappings first
|
|
27
|
+
if (this.customMappings[code]) {
|
|
28
|
+
return this.customMappings[code].voiceId;
|
|
29
|
+
}
|
|
30
|
+
// Check default mappings
|
|
31
|
+
if (LanguageVoiceMapper.DEFAULT_VOICES[code]) {
|
|
32
|
+
return LanguageVoiceMapper.DEFAULT_VOICES[code].voiceId;
|
|
33
|
+
}
|
|
34
|
+
// Fallback to default English voice
|
|
35
|
+
console.warn(`[LanguageVoiceMapper] No voice mapping found for language '${code}'. Using default English voice.`);
|
|
36
|
+
return LanguageVoiceMapper.DEFAULT_VOICES['en'].voiceId;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get voice mapping details
|
|
40
|
+
*/
|
|
41
|
+
getVoiceMapping(languageCode) {
|
|
42
|
+
const code = languageCode.toLowerCase();
|
|
43
|
+
return this.customMappings[code] ||
|
|
44
|
+
LanguageVoiceMapper.DEFAULT_VOICES[code] ||
|
|
45
|
+
LanguageVoiceMapper.DEFAULT_VOICES['en'];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Add or update custom voice mapping
|
|
49
|
+
*/
|
|
50
|
+
setVoiceMapping(languageCode, voiceMapping) {
|
|
51
|
+
this.customMappings[languageCode.toLowerCase()] = voiceMapping;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get all supported languages
|
|
55
|
+
*/
|
|
56
|
+
getSupportedLanguages() {
|
|
57
|
+
return [
|
|
58
|
+
...Object.keys(LanguageVoiceMapper.DEFAULT_VOICES),
|
|
59
|
+
...Object.keys(this.customMappings)
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if a language is supported
|
|
64
|
+
*/
|
|
65
|
+
isLanguageSupported(languageCode) {
|
|
66
|
+
const code = languageCode.toLowerCase();
|
|
67
|
+
return !!(LanguageVoiceMapper.DEFAULT_VOICES[code] || this.customMappings[code]);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.LanguageVoiceMapper = LanguageVoiceMapper;
|
|
71
|
+
// Default voice mappings for common languages
|
|
72
|
+
// These are example ElevenLabs voice IDs - replace with actual production voices
|
|
73
|
+
LanguageVoiceMapper.DEFAULT_VOICES = {
|
|
74
|
+
'en': {
|
|
75
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM', // Rachel (default English voice)
|
|
76
|
+
name: 'Rachel',
|
|
77
|
+
description: 'Clear American English'
|
|
78
|
+
},
|
|
79
|
+
'ar': {
|
|
80
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM', // Same voice - ElevenLabs supports multilingual
|
|
81
|
+
name: 'Rachel (Arabic)',
|
|
82
|
+
description: 'Multilingual voice for Arabic'
|
|
83
|
+
},
|
|
84
|
+
'fa': {
|
|
85
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM', // Same voice - supports Persian
|
|
86
|
+
name: 'Rachel (Persian)',
|
|
87
|
+
description: 'Multilingual voice for Persian'
|
|
88
|
+
},
|
|
89
|
+
'es': {
|
|
90
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
91
|
+
name: 'Rachel (Spanish)',
|
|
92
|
+
description: 'Multilingual voice for Spanish'
|
|
93
|
+
},
|
|
94
|
+
'fr': {
|
|
95
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
96
|
+
name: 'Rachel (French)',
|
|
97
|
+
description: 'Multilingual voice for French'
|
|
98
|
+
},
|
|
99
|
+
'de': {
|
|
100
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
101
|
+
name: 'Rachel (German)',
|
|
102
|
+
description: 'Multilingual voice for German'
|
|
103
|
+
},
|
|
104
|
+
'it': {
|
|
105
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
106
|
+
name: 'Rachel (Italian)',
|
|
107
|
+
description: 'Multilingual voice for Italian'
|
|
108
|
+
},
|
|
109
|
+
'pt': {
|
|
110
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
111
|
+
name: 'Rachel (Portuguese)',
|
|
112
|
+
description: 'Multilingual voice for Portuguese'
|
|
113
|
+
},
|
|
114
|
+
'zh': {
|
|
115
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
116
|
+
name: 'Rachel (Chinese)',
|
|
117
|
+
description: 'Multilingual voice for Chinese'
|
|
118
|
+
},
|
|
119
|
+
'ja': {
|
|
120
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
121
|
+
name: 'Rachel (Japanese)',
|
|
122
|
+
description: 'Multilingual voice for Japanese'
|
|
123
|
+
},
|
|
124
|
+
'ko': {
|
|
125
|
+
voiceId: '21m00Tcm4TlvDq8ikWAM',
|
|
126
|
+
name: 'Rachel (Korean)',
|
|
127
|
+
description: 'Multilingual voice for Korean'
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=LanguageVoiceMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageVoiceMapper.js","sourceRoot":"","sources":["../../../src/adapters/voice/LanguageVoiceMapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Vertex Voice Adapter - Gemini 2.0 / 2.5
|
|
4
|
+
* Uses the Generative Language API (Multimodal) for both STT and TTS.
|
|
5
|
+
*/
|
|
6
|
+
export declare class VertexVoiceAdapter implements IVoiceAdapter {
|
|
7
|
+
private apiKey;
|
|
8
|
+
private voiceConfig?;
|
|
9
|
+
private sttModelId;
|
|
10
|
+
private ttsModelId;
|
|
11
|
+
constructor(apiKey: string, voiceConfig?: VoiceConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Speech-to-Text via Gemini 2.0
|
|
14
|
+
* Uses multimodal input to transcribe audio.
|
|
15
|
+
*/
|
|
16
|
+
speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Text-to-Speech via Gemini 2.5
|
|
19
|
+
* Requests "AUDIO" modality in the response.
|
|
20
|
+
*/
|
|
21
|
+
textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
|
|
22
|
+
private base64ToUint8Array;
|
|
23
|
+
/**
|
|
24
|
+
* Wrap raw PCM data in a WAV container.
|
|
25
|
+
* Gemini output: 24kHz, 1 channel, 16-bit
|
|
26
|
+
*/
|
|
27
|
+
private wrapInWav;
|
|
28
|
+
private writeString;
|
|
29
|
+
getTTSOutputFormat(): AudioFormatMetadata;
|
|
30
|
+
getSTTInputFormat(): AudioFormatMetadata;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=VertexVoiceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VertexVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/VertexVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnF;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;IAGlC,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,UAAU,CAAkC;gBAExC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAoDrF;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAkDlF,OAAO,CAAC,kBAAkB;IAc1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,WAAW;IAMnB,kBAAkB,IAAI,mBAAmB;IAIzC,iBAAiB,IAAI,mBAAmB;CAG3C"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VertexVoiceAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Vertex Voice Adapter - Gemini 2.0 / 2.5
|
|
6
|
+
* Uses the Generative Language API (Multimodal) for both STT and TTS.
|
|
7
|
+
*/
|
|
8
|
+
class VertexVoiceAdapter {
|
|
9
|
+
constructor(apiKey, voiceConfig) {
|
|
10
|
+
// Using lite model for STT (known to work with inline audio)
|
|
11
|
+
this.sttModelId = 'gemini-2.0-flash-lite';
|
|
12
|
+
// Using specific preview model for TTS support
|
|
13
|
+
this.ttsModelId = 'gemini-2.5-flash-preview-tts';
|
|
14
|
+
this.apiKey = apiKey;
|
|
15
|
+
this.voiceConfig = voiceConfig;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Speech-to-Text via Gemini 2.0
|
|
19
|
+
* Uses multimodal input to transcribe audio.
|
|
20
|
+
*/
|
|
21
|
+
async speechToText(audioBase64, config) {
|
|
22
|
+
const url = `https://generativelanguage.googleapis.com/v1beta/models/${this.sttModelId}:generateContent?key=${this.apiKey}`;
|
|
23
|
+
// STT uses camelCase for gemini-2.0-flash-exp standard parts (or snake_case? exp usually supports snake_case but let's stick to standard if possible or try likely variants)
|
|
24
|
+
// Trying camelCase based on standard JSON API behavior.
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch(url, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify({
|
|
30
|
+
contents: [{
|
|
31
|
+
role: 'user',
|
|
32
|
+
parts: [
|
|
33
|
+
// System instruction via prompt
|
|
34
|
+
{ text: "Transcribe the audio exactly as spoken. Do not add timestamps, speaker labels, or conversational filler." },
|
|
35
|
+
{
|
|
36
|
+
inlineData: {
|
|
37
|
+
mimeType: config?.encoding === 'FLAC' ? 'audio/flac' :
|
|
38
|
+
config?.encoding === 'LINEAR16' ? 'audio/l16' :
|
|
39
|
+
'audio/wav',
|
|
40
|
+
data: audioBase64
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}],
|
|
45
|
+
generationConfig: {
|
|
46
|
+
temperature: 0,
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
const errorText = await response.text();
|
|
52
|
+
throw new Error(`Gemini STT Error (${response.status}): ${errorText}`);
|
|
53
|
+
}
|
|
54
|
+
const json = await response.json();
|
|
55
|
+
const text = json.candidates?.[0]?.content?.parts?.[0]?.text;
|
|
56
|
+
if (!text) {
|
|
57
|
+
console.warn('Gemini STT returned no text content.');
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
return text.trim();
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error('Vertex STT Exception:', error);
|
|
64
|
+
throw new Error(`STT failed: ${error.message}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Text-to-Speech via Gemini 2.5
|
|
69
|
+
* Requests "AUDIO" modality in the response.
|
|
70
|
+
*/
|
|
71
|
+
async textToSpeech(text, config) {
|
|
72
|
+
const ttsConfig = config || this.voiceConfig?.tts;
|
|
73
|
+
const voiceName = ttsConfig?.voice || 'Puck';
|
|
74
|
+
const url = `https://generativelanguage.googleapis.com/v1beta/models/${this.ttsModelId}:generateContent?key=${this.apiKey}`;
|
|
75
|
+
// Uses snake_case for TTS preview model as established by working attempts initially (Step 231)
|
|
76
|
+
try {
|
|
77
|
+
const response = await fetch(url, {
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: { 'Content-Type': 'application/json' },
|
|
80
|
+
body: JSON.stringify({
|
|
81
|
+
contents: [{
|
|
82
|
+
parts: [{ text: `Please speak the following text: ${text}` }]
|
|
83
|
+
}],
|
|
84
|
+
generation_config: {
|
|
85
|
+
response_modalities: ["AUDIO"],
|
|
86
|
+
speech_config: {
|
|
87
|
+
voice_config: {
|
|
88
|
+
prebuilt_voice_config: {
|
|
89
|
+
voice_name: voiceName
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
const errorText = await response.text();
|
|
98
|
+
if (response.status === 401)
|
|
99
|
+
throw new Error("Unauthorized: Invalid API Key.");
|
|
100
|
+
throw new Error(`Gemini TTS Error (${response.status}): ${errorText}`);
|
|
101
|
+
}
|
|
102
|
+
const json = await response.json();
|
|
103
|
+
// Extract the base64 audio data
|
|
104
|
+
const audioPart = json.candidates?.[0]?.content?.parts?.find((p) => p.inlineData || p.inline_data);
|
|
105
|
+
const audioBase64 = audioPart?.inlineData?.data || audioPart?.inline_data?.data;
|
|
106
|
+
if (!audioBase64) {
|
|
107
|
+
throw new Error('Model generated response but did not return audio data. Ensure "AUDIO" modality is supported by your key/region.');
|
|
108
|
+
}
|
|
109
|
+
return this.wrapInWav(this.base64ToUint8Array(audioBase64));
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('Vertex TTS Exception:', error);
|
|
113
|
+
throw new Error(`TTS failed: ${error.message}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
base64ToUint8Array(base64) {
|
|
117
|
+
if (typeof Buffer !== 'undefined') {
|
|
118
|
+
return new Uint8Array(Buffer.from(base64, 'base64'));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const binaryString = atob(base64);
|
|
122
|
+
const len = binaryString.length;
|
|
123
|
+
const bytes = new Uint8Array(len);
|
|
124
|
+
for (let i = 0; i < len; i++) {
|
|
125
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
126
|
+
}
|
|
127
|
+
return bytes;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Wrap raw PCM data in a WAV container.
|
|
132
|
+
* Gemini output: 24kHz, 1 channel, 16-bit
|
|
133
|
+
*/
|
|
134
|
+
wrapInWav(pcmData) {
|
|
135
|
+
const sampleRate = 24000;
|
|
136
|
+
const channels = 1;
|
|
137
|
+
const bitDepth = 16;
|
|
138
|
+
const byteRate = sampleRate * channels * (bitDepth / 8);
|
|
139
|
+
const blockAlign = channels * (bitDepth / 8);
|
|
140
|
+
const dataSize = pcmData.length;
|
|
141
|
+
const fileSize = 36 + dataSize;
|
|
142
|
+
const header = new Uint8Array(44);
|
|
143
|
+
const view = new DataView(header.buffer);
|
|
144
|
+
// RIFF chunk descriptor
|
|
145
|
+
this.writeString(view, 0, 'RIFF');
|
|
146
|
+
view.setUint32(4, fileSize, true); // true = little-endian
|
|
147
|
+
this.writeString(view, 8, 'WAVE');
|
|
148
|
+
// fmt sub-chunk
|
|
149
|
+
this.writeString(view, 12, 'fmt ');
|
|
150
|
+
view.setUint32(16, 16, true); // Subchunk1Size (16 for PCM)
|
|
151
|
+
view.setUint16(20, 1, true); // AudioFormat (1 for PCM)
|
|
152
|
+
view.setUint16(22, channels, true);
|
|
153
|
+
view.setUint32(24, sampleRate, true);
|
|
154
|
+
view.setUint32(28, byteRate, true);
|
|
155
|
+
view.setUint16(32, blockAlign, true);
|
|
156
|
+
view.setUint16(34, bitDepth, true);
|
|
157
|
+
// data sub-chunk
|
|
158
|
+
this.writeString(view, 36, 'data');
|
|
159
|
+
view.setUint32(40, dataSize, true);
|
|
160
|
+
// Concatenate header and PCM data
|
|
161
|
+
const wavFile = new Uint8Array(header.length + pcmData.length);
|
|
162
|
+
wavFile.set(header);
|
|
163
|
+
wavFile.set(pcmData, header.length);
|
|
164
|
+
return wavFile;
|
|
165
|
+
}
|
|
166
|
+
writeString(view, offset, string) {
|
|
167
|
+
for (let i = 0; i < string.length; i++) {
|
|
168
|
+
view.setUint8(offset + i, string.charCodeAt(i));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
getTTSOutputFormat() {
|
|
172
|
+
return { format: 'wav', sampleRate: 24000, channels: 1, bitDepth: 16 };
|
|
173
|
+
}
|
|
174
|
+
getSTTInputFormat() {
|
|
175
|
+
return { format: 'wav', sampleRate: 16000, channels: 1, bitDepth: 16 };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.VertexVoiceAdapter = VertexVoiceAdapter;
|
|
179
|
+
//# sourceMappingURL=VertexVoiceAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VertexVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/VertexVoiceAdapter.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,kBAAkB;IAS3B,YAAY,MAAc,EAAE,WAAyB;QALrD,6DAA6D;QACrD,eAAU,GAAG,uBAAuB,CAAC;QAC7C,+CAA+C;QACvC,eAAU,GAAG,8BAA8B,CAAC;QAGhD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,MAA2B;QAC/D,MAAM,GAAG,GAAG,2DAA2D,IAAI,CAAC,UAAU,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5H,6KAA6K;QAC7K,wDAAwD;QACxD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC9B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,QAAQ,EAAE,CAAC;4BACP,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE;gCACH,gCAAgC;gCAChC,EAAE,IAAI,EAAE,0GAA0G,EAAE;gCACpH;oCACI,UAAU,EAAE;wCACR,QAAQ,EAAE,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;4CAClD,MAAM,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gDAC3C,WAAW;wCACnB,IAAI,EAAE,WAAW;qCACpB;iCACJ;6BACJ;yBACJ,CAAC;oBACF,gBAAgB,EAAE;wBACd,WAAW,EAAE,CAAC;qBACjB;iBACJ,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAExC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAE7D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACrD,OAAO,EAAE,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAA2B;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAClD,MAAM,SAAS,GAAG,SAAS,EAAE,KAAK,IAAI,MAAM,CAAC;QAC7C,MAAM,GAAG,GAAG,2DAA2D,IAAI,CAAC,UAAU,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5H,gGAAgG;QAChG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC9B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,QAAQ,EAAE,CAAC;4BACP,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,oCAAoC,IAAI,EAAE,EAAE,CAAC;yBAChE,CAAC;oBACF,iBAAiB,EAAE;wBACf,mBAAmB,EAAE,CAAC,OAAO,CAAC;wBAC9B,aAAa,EAAE;4BACX,YAAY,EAAE;gCACV,qBAAqB,EAAE;oCACnB,UAAU,EAAE,SAAS;iCACxB;6BACJ;yBACJ;qBACJ;iBACJ,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAC/E,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAExC,gCAAgC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;YACxG,MAAM,WAAW,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC;YAEhF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,kHAAkH,CAAC,CAAC;YACxI,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,MAAc;QACrC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACJ,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,SAAS,CAAC,OAAmB;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC;QACzB,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAChC,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEzC,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB;QAC1D,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAElC,gBAAgB;QAChB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B;QAC3D,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAE,0BAA0B;QACxD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEnC,iBAAiB;QACjB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEnC,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,WAAW,CAAC,IAAc,EAAE,MAAc,EAAE,MAAc;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED,kBAAkB;QACd,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3E,CAAC;IAED,iBAAiB;QACb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3E,CAAC;CACJ;AAlMD,gDAkMC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { IWebhookService, Message, IntentResult, WorkflowResult } from '../../interfaces';
|
|
2
|
+
import { ConversationSession } from '../../core/entities/ConversationSession';
|
|
3
|
+
/**
|
|
4
|
+
* WebhookService
|
|
5
|
+
*
|
|
6
|
+
* Handles HTTP POST delivery of webhook events to configured endpoints.
|
|
7
|
+
* Features:
|
|
8
|
+
* - Event filtering (only sends subscribed events)
|
|
9
|
+
* - Event-specific payload construction
|
|
10
|
+
* - Custom headers support
|
|
11
|
+
* - Async fire-and-forget delivery
|
|
12
|
+
* - Error logging without blocking conversation flow
|
|
13
|
+
* - Wraps internal session data extraction
|
|
14
|
+
*/
|
|
15
|
+
export declare class WebhookService implements IWebhookService {
|
|
16
|
+
constructor();
|
|
17
|
+
triggerSessionStarted(session: ConversationSession): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Get webhook config from session metadata
|
|
20
|
+
*/
|
|
21
|
+
private getWebhookConfig;
|
|
22
|
+
triggerSessionEnded(session: ConversationSession, recordingUrl?: string): Promise<void>;
|
|
23
|
+
triggerUserMessage(session: ConversationSession, message: Message): Promise<void>;
|
|
24
|
+
triggerBotMessage(session: ConversationSession, message: Message): Promise<void>;
|
|
25
|
+
triggerIntentDetected(session: ConversationSession, intent: IntentResult): Promise<void>;
|
|
26
|
+
triggerIntentFailed(session: ConversationSession, intent: IntentResult): Promise<void>;
|
|
27
|
+
triggerWorkflowExecuted(session: ConversationSession, workflow: {
|
|
28
|
+
workflowName: string;
|
|
29
|
+
parameters: any;
|
|
30
|
+
result: WorkflowResult;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
triggerWorkflowFailed(session: ConversationSession, workflow: {
|
|
33
|
+
workflowName: string;
|
|
34
|
+
parameters: any;
|
|
35
|
+
error?: string;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
triggerErrorOccurred(session: ConversationSession, error: Error): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Internal method to send webhook via HTTP POST
|
|
40
|
+
*/
|
|
41
|
+
private sendWebhook;
|
|
42
|
+
/**
|
|
43
|
+
* Build base session data for webhooks
|
|
44
|
+
*/
|
|
45
|
+
private getSessionData;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=WebhookService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebhookService.d.ts","sourceRoot":"","sources":["../../../src/adapters/webhook/WebhookService.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EAiBf,OAAO,EACP,YAAY,EACZ,cAAc,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,YAAW,eAAe;;IAI5C,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxE;;OAEG;YACW,gBAAgB;IAKxB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CvF,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjF,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhF,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBxF,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtF,uBAAuB,CACzB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,GAC5E,OAAO,CAAC,IAAI,CAAC;IAgBV,qBAAqB,CACvB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACpE,OAAO,CAAC,IAAI,CAAC;IAgBV,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBrF;;OAEG;YACW,WAAW;IAoCzB;;OAEG;IACH,OAAO,CAAC,cAAc;CA2BzB"}
|