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 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiMultimodalLiveAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/GeminiMultimodalLiveAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Gemini Voice Adapter
|
|
4
|
+
* Implements voice capabilities using Google's Gemini API
|
|
5
|
+
* Can be used independently of GeminiLLMAdapter
|
|
6
|
+
*/
|
|
7
|
+
export declare class GeminiVoiceAdapter implements IVoiceAdapter {
|
|
8
|
+
private apiKey;
|
|
9
|
+
private voiceConfig?;
|
|
10
|
+
constructor(apiKey: string, voiceConfig?: VoiceConfig);
|
|
11
|
+
/**
|
|
12
|
+
* Convert speech (audio) to text using Gemini's audio input capability
|
|
13
|
+
* @param audioBase64 Base64-encoded audio data (WAV format recommended)
|
|
14
|
+
* @param config Optional STT configuration (overrides constructor config)
|
|
15
|
+
* @returns Transcribed text
|
|
16
|
+
*/
|
|
17
|
+
speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Convert text to speech (audio) using Gemini's native audio output
|
|
20
|
+
* @param text Text to convert to speech
|
|
21
|
+
* @param config Optional TTS configuration (overrides constructor config)
|
|
22
|
+
* @returns Audio data as Uint8Array (PCM format)
|
|
23
|
+
*/
|
|
24
|
+
textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
|
|
25
|
+
/**
|
|
26
|
+
* Declare the audio format produced by Gemini TTS
|
|
27
|
+
* Used by IAudioStorage for format conversion
|
|
28
|
+
*/
|
|
29
|
+
getTTSOutputFormat(): AudioFormatMetadata;
|
|
30
|
+
/**
|
|
31
|
+
* Declare the expected audio format for Gemini STT
|
|
32
|
+
* Used by IAudioStorage for format conversion
|
|
33
|
+
*/
|
|
34
|
+
getSTTInputFormat(): AudioFormatMetadata;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=GeminiVoiceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/GeminiVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnF;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;gBAEtB,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;;;;OAKG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDrF;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDlF;;;OAGG;IACH,kBAAkB,IAAI,mBAAmB;IASzC;;;OAGG;IACH,iBAAiB,IAAI,mBAAmB;CAQ3C"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GeminiVoiceAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Gemini Voice Adapter
|
|
6
|
+
* Implements voice capabilities using Google's Gemini API
|
|
7
|
+
* Can be used independently of GeminiLLMAdapter
|
|
8
|
+
*/
|
|
9
|
+
class GeminiVoiceAdapter {
|
|
10
|
+
constructor(apiKey, voiceConfig) {
|
|
11
|
+
this.apiKey = apiKey;
|
|
12
|
+
this.voiceConfig = voiceConfig;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Convert speech (audio) to text using Gemini's audio input capability
|
|
16
|
+
* @param audioBase64 Base64-encoded audio data (WAV format recommended)
|
|
17
|
+
* @param config Optional STT configuration (overrides constructor config)
|
|
18
|
+
* @returns Transcribed text
|
|
19
|
+
*/
|
|
20
|
+
async speechToText(audioBase64, config) {
|
|
21
|
+
const sttConfig = config || this.voiceConfig?.stt;
|
|
22
|
+
const language = sttConfig?.language || 'en-US';
|
|
23
|
+
try {
|
|
24
|
+
const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-lite:generateContent?key=${this.apiKey}`, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: { 'Content-Type': 'application/json' },
|
|
27
|
+
body: JSON.stringify({
|
|
28
|
+
contents: [{
|
|
29
|
+
role: 'user',
|
|
30
|
+
parts: [
|
|
31
|
+
{ text: "Transcribe the following audio exactly. Do not respond to the audio, just output the transcription." },
|
|
32
|
+
{
|
|
33
|
+
inlineData: {
|
|
34
|
+
mimeType: 'audio/wav',
|
|
35
|
+
data: audioBase64
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}],
|
|
40
|
+
generationConfig: {
|
|
41
|
+
temperature: 0.1, // Lower temperature for transcription accuracy
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
const errorText = await response.text();
|
|
47
|
+
throw new Error(`Gemini STT API Error: ${response.status} - ${errorText}`);
|
|
48
|
+
}
|
|
49
|
+
const json = await response.json();
|
|
50
|
+
const transcript = json.candidates?.[0]?.content?.parts?.[0]?.text || '';
|
|
51
|
+
if (!transcript) {
|
|
52
|
+
throw new Error('No transcript returned from Gemini STT');
|
|
53
|
+
}
|
|
54
|
+
return transcript;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.error('Speech-to-Text Error:', error);
|
|
58
|
+
throw new Error(`STT failed: ${error.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convert text to speech (audio) using Gemini's native audio output
|
|
63
|
+
* @param text Text to convert to speech
|
|
64
|
+
* @param config Optional TTS configuration (overrides constructor config)
|
|
65
|
+
* @returns Audio data as Uint8Array (PCM format)
|
|
66
|
+
*/
|
|
67
|
+
async textToSpeech(text, config) {
|
|
68
|
+
const ttsConfig = config || this.voiceConfig?.tts;
|
|
69
|
+
const voice = ttsConfig?.voice || 'Puck'; // Gemini's default voice
|
|
70
|
+
try {
|
|
71
|
+
// Use v1alpha API which supports audio modalities
|
|
72
|
+
const response = await fetch(`https://generativelanguage.googleapis.com/v1alpha/models/gemini-2.0-flash-exp:generateContent?key=${this.apiKey}`, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: { 'Content-Type': 'application/json' },
|
|
75
|
+
body: JSON.stringify({
|
|
76
|
+
contents: [{
|
|
77
|
+
role: 'user',
|
|
78
|
+
parts: [{ text }]
|
|
79
|
+
}],
|
|
80
|
+
generationConfig: {
|
|
81
|
+
responseModalities: ['AUDIO'],
|
|
82
|
+
speechConfig: {
|
|
83
|
+
voiceConfig: {
|
|
84
|
+
prebuiltVoiceConfig: {
|
|
85
|
+
voiceName: voice
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
const errorText = await response.text();
|
|
94
|
+
throw new Error(`Gemini TTS API Error: ${response.status} - ${errorText}`);
|
|
95
|
+
}
|
|
96
|
+
const json = await response.json();
|
|
97
|
+
const audioBase64 = json.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
|
|
98
|
+
if (!audioBase64) {
|
|
99
|
+
throw new Error('No audio data received from Gemini TTS');
|
|
100
|
+
}
|
|
101
|
+
return Uint8Array.from(Buffer.from(audioBase64, 'base64'));
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error('Text-to-Speech Error:', error);
|
|
105
|
+
throw new Error(`TTS failed: ${error.message}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Declare the audio format produced by Gemini TTS
|
|
110
|
+
* Used by IAudioStorage for format conversion
|
|
111
|
+
*/
|
|
112
|
+
getTTSOutputFormat() {
|
|
113
|
+
return {
|
|
114
|
+
format: 'pcm',
|
|
115
|
+
sampleRate: 24000,
|
|
116
|
+
channels: 1,
|
|
117
|
+
bitDepth: 16
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Declare the expected audio format for Gemini STT
|
|
122
|
+
* Used by IAudioStorage for format conversion
|
|
123
|
+
*/
|
|
124
|
+
getSTTInputFormat() {
|
|
125
|
+
return {
|
|
126
|
+
format: 'wav',
|
|
127
|
+
sampleRate: 16000,
|
|
128
|
+
channels: 1,
|
|
129
|
+
bitDepth: 16
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.GeminiVoiceAdapter = GeminiVoiceAdapter;
|
|
134
|
+
//# sourceMappingURL=GeminiVoiceAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/GeminiVoiceAdapter.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,MAAa,kBAAkB;IAI3B,YAAY,MAAc,EAAE,WAAyB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,MAA2B;QAC/D,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAClD,MAAM,QAAQ,GAAG,SAAS,EAAE,QAAQ,IAAI,OAAO,CAAC;QAEhD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,qGAAqG,IAAI,CAAC,MAAM,EAAE,EAClH;gBACI,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,EAAE,IAAI,EAAE,qGAAqG,EAAE;gCAC/G;oCACI,UAAU,EAAE;wCACR,QAAQ,EAAE,WAAW;wCACrB,IAAI,EAAE,WAAW;qCACpB;iCACJ;6BACJ;yBACJ,CAAC;oBACF,gBAAgB,EAAE;wBACd,WAAW,EAAE,GAAG,EAAE,+CAA+C;qBACpE;iBACJ,CAAC;aACL,CACJ,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAEzE,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,UAAU,CAAC;QACtB,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;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAA2B;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAClD,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,MAAM,CAAC,CAAC,yBAAyB;QAEnE,IAAI,CAAC;YACD,kDAAkD;YAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,qGAAqG,IAAI,CAAC,MAAM,EAAE,EAClH;gBACI,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,CAAC,EAAE,IAAI,EAAE,CAAC;yBACpB,CAAC;oBACF,gBAAgB,EAAE;wBACd,kBAAkB,EAAE,CAAC,OAAO,CAAC;wBAC7B,YAAY,EAAE;4BACV,WAAW,EAAE;gCACT,mBAAmB,EAAE;oCACjB,SAAS,EAAE,KAAK;iCACnB;6BACJ;yBACJ;qBACJ;iBACJ,CAAC;aACL,CACJ,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC;YAEhF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/D,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,kBAAkB;QACd,OAAO;YACH,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;SACf,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,iBAAiB;QACb,OAAO;YACH,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;SACf,CAAC;IACN,CAAC;CACJ;AAhJD,gDAgJC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { IVoiceAdapter, VoiceConfig } from '../../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Google Cloud Text-to-Speech Adapter
|
|
4
|
+
*
|
|
5
|
+
* Production-ready TTS using Google Cloud Text-to-Speech API
|
|
6
|
+
* - Supports 70+ languages with 400+ voices
|
|
7
|
+
* - Male/female voice options
|
|
8
|
+
* - WaveNet & Neural2 premium voices
|
|
9
|
+
* - SSML support for advanced control
|
|
10
|
+
* - Perfect for Persian, Arabic, Asian languages
|
|
11
|
+
*
|
|
12
|
+
* Pricing:
|
|
13
|
+
* - Standard voices: $4 per 1M characters
|
|
14
|
+
* - WaveNet/Neural2: $16 per 1M characters
|
|
15
|
+
*/
|
|
16
|
+
export declare class GoogleTTSAdapter implements IVoiceAdapter {
|
|
17
|
+
private apiKey;
|
|
18
|
+
private voiceConfig?;
|
|
19
|
+
constructor(apiKey: string, voiceConfig?: VoiceConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Speech-to-text (not implemented - use GeminiVoiceAdapter)
|
|
22
|
+
*/
|
|
23
|
+
speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Text-to-speech using Google Cloud TTS
|
|
26
|
+
*
|
|
27
|
+
* Features:
|
|
28
|
+
* - Multiple audio formats (LINEAR16, MP3, OGG)
|
|
29
|
+
* - Pitch and speaking rate control
|
|
30
|
+
* - SSML support
|
|
31
|
+
* - Volume gain control
|
|
32
|
+
*
|
|
33
|
+
* @param text Text to convert to speech (or SSML)
|
|
34
|
+
* @param config Optional TTS configuration
|
|
35
|
+
* @returns Audio data as Uint8Array
|
|
36
|
+
*/
|
|
37
|
+
textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
|
|
38
|
+
/**
|
|
39
|
+
* Extract language code from voice ID
|
|
40
|
+
* Examples: 'fa-IR-Standard-A' → 'fa-IR', 'ar-XA-Wavenet-B' → 'ar-XA'
|
|
41
|
+
*/
|
|
42
|
+
private extractLanguageCode;
|
|
43
|
+
/**
|
|
44
|
+
* Validate voice ID format (basic check)
|
|
45
|
+
*/
|
|
46
|
+
private isValidVoiceId;
|
|
47
|
+
/**
|
|
48
|
+
* Check if text is SSML (Speech Synthesis Markup Language)
|
|
49
|
+
*/
|
|
50
|
+
private isSSML;
|
|
51
|
+
/**
|
|
52
|
+
* Extract gender hint from voice variant (A-D typically female, E+ typically male)
|
|
53
|
+
* This is a heuristic and may not always be accurate
|
|
54
|
+
*/
|
|
55
|
+
private extractGender;
|
|
56
|
+
/**
|
|
57
|
+
* Clamp value between min and max
|
|
58
|
+
*/
|
|
59
|
+
private clamp;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=GoogleTTSAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleTTSAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/GoogleTTSAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;gBAEtB,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAiFlF;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGhB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoogleTTSAdapter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Google Cloud Text-to-Speech Adapter
|
|
6
|
+
*
|
|
7
|
+
* Production-ready TTS using Google Cloud Text-to-Speech API
|
|
8
|
+
* - Supports 70+ languages with 400+ voices
|
|
9
|
+
* - Male/female voice options
|
|
10
|
+
* - WaveNet & Neural2 premium voices
|
|
11
|
+
* - SSML support for advanced control
|
|
12
|
+
* - Perfect for Persian, Arabic, Asian languages
|
|
13
|
+
*
|
|
14
|
+
* Pricing:
|
|
15
|
+
* - Standard voices: $4 per 1M characters
|
|
16
|
+
* - WaveNet/Neural2: $16 per 1M characters
|
|
17
|
+
*/
|
|
18
|
+
class GoogleTTSAdapter {
|
|
19
|
+
constructor(apiKey, voiceConfig) {
|
|
20
|
+
this.apiKey = apiKey;
|
|
21
|
+
this.voiceConfig = voiceConfig;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Speech-to-text (not implemented - use GeminiVoiceAdapter)
|
|
25
|
+
*/
|
|
26
|
+
async speechToText(audioBase64, config) {
|
|
27
|
+
throw new Error('GoogleTTSAdapter does not support STT. Use GeminiVoiceAdapter for STT.');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Text-to-speech using Google Cloud TTS
|
|
31
|
+
*
|
|
32
|
+
* Features:
|
|
33
|
+
* - Multiple audio formats (LINEAR16, MP3, OGG)
|
|
34
|
+
* - Pitch and speaking rate control
|
|
35
|
+
* - SSML support
|
|
36
|
+
* - Volume gain control
|
|
37
|
+
*
|
|
38
|
+
* @param text Text to convert to speech (or SSML)
|
|
39
|
+
* @param config Optional TTS configuration
|
|
40
|
+
* @returns Audio data as Uint8Array
|
|
41
|
+
*/
|
|
42
|
+
async textToSpeech(text, config) {
|
|
43
|
+
const ttsConfig = config || this.voiceConfig?.tts;
|
|
44
|
+
const voiceId = ttsConfig?.voice || 'en-US-Standard-A';
|
|
45
|
+
const languageCode = this.extractLanguageCode(voiceId);
|
|
46
|
+
const startTime = Date.now();
|
|
47
|
+
try {
|
|
48
|
+
// Validate text
|
|
49
|
+
if (!text || text.trim().length === 0) {
|
|
50
|
+
throw new Error('Text input is empty');
|
|
51
|
+
}
|
|
52
|
+
// Validate voice ID format
|
|
53
|
+
if (!this.isValidVoiceId(voiceId)) {
|
|
54
|
+
console.warn(`[GoogleTTSAdapter] Invalid voice ID format: ${voiceId}. Using default.`);
|
|
55
|
+
}
|
|
56
|
+
// Build request payload
|
|
57
|
+
const payload = {
|
|
58
|
+
input: this.isSSML(text) ? { ssml: text } : { text },
|
|
59
|
+
voice: {
|
|
60
|
+
languageCode: languageCode,
|
|
61
|
+
name: voiceId,
|
|
62
|
+
// Optional: Add SSML gender hint for better selection
|
|
63
|
+
...(this.extractGender(voiceId) && { ssmlGender: this.extractGender(voiceId) })
|
|
64
|
+
},
|
|
65
|
+
audioConfig: {
|
|
66
|
+
audioEncoding: 'LINEAR16', // PCM 16-bit (compatible with most systems)
|
|
67
|
+
speakingRate: this.clamp(ttsConfig?.speakingRate || 1.0, 0.25, 4.0),
|
|
68
|
+
pitch: this.clamp(ttsConfig?.pitch || 0.0, -20.0, 20.0),
|
|
69
|
+
volumeGainDb: 0.0, // Default volume
|
|
70
|
+
sampleRateHertz: 24000 // High quality
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const response = await fetch(`https://texttospeech.googleapis.com/v1/text:synthesize?key=${this.apiKey}`, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers: { 'Content-Type': 'application/json' },
|
|
76
|
+
body: JSON.stringify(payload)
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
const errorData = await response.json().catch(() => ({ error: { message: 'Unknown error' } }));
|
|
80
|
+
const errorMessage = errorData.error?.message || `HTTP ${response.status}`;
|
|
81
|
+
// Provide helpful error messages
|
|
82
|
+
if (response.status === 400) {
|
|
83
|
+
throw new Error(`Invalid request: ${errorMessage}. Check voice ID and language code.`);
|
|
84
|
+
}
|
|
85
|
+
else if (response.status === 403) {
|
|
86
|
+
throw new Error(`API not enabled or invalid key: ${errorMessage}. Enable Cloud Text-to-Speech API.`);
|
|
87
|
+
}
|
|
88
|
+
else if (response.status === 429) {
|
|
89
|
+
throw new Error(`Quota exceeded: ${errorMessage}. Check your Google Cloud quota.`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
throw new Error(`Google TTS API Error (${response.status}): ${errorMessage}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const json = await response.json();
|
|
96
|
+
const audioBase64 = json.audioContent;
|
|
97
|
+
if (!audioBase64) {
|
|
98
|
+
throw new Error('No audio data received from Google TTS');
|
|
99
|
+
}
|
|
100
|
+
const audioData = Uint8Array.from(Buffer.from(audioBase64, 'base64'));
|
|
101
|
+
const duration = Date.now() - startTime;
|
|
102
|
+
console.log(`[GoogleTTSAdapter] TTS successful: ${audioData.length} bytes, ${text.length} chars, ${duration}ms (voice: ${voiceId})`);
|
|
103
|
+
return audioData;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const duration = Date.now() - startTime;
|
|
107
|
+
console.error(`[GoogleTTSAdapter] TTS Error after ${duration}ms:`, error.message);
|
|
108
|
+
throw new Error(`Google TTS failed: ${error.message}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Extract language code from voice ID
|
|
113
|
+
* Examples: 'fa-IR-Standard-A' → 'fa-IR', 'ar-XA-Wavenet-B' → 'ar-XA'
|
|
114
|
+
*/
|
|
115
|
+
extractLanguageCode(voiceId) {
|
|
116
|
+
const parts = voiceId.split('-');
|
|
117
|
+
if (parts.length >= 2) {
|
|
118
|
+
return `${parts[0]}-${parts[1]}`;
|
|
119
|
+
}
|
|
120
|
+
console.warn(`[GoogleTTSAdapter] Could not extract language code from: ${voiceId}`);
|
|
121
|
+
return 'en-US'; // Fallback
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validate voice ID format (basic check)
|
|
125
|
+
*/
|
|
126
|
+
isValidVoiceId(voiceId) {
|
|
127
|
+
// Google voice IDs format: {lang}-{region}-{type}-{variant}
|
|
128
|
+
// e.g., 'en-US-Standard-A', 'fa-IR-Wavenet-B'
|
|
129
|
+
const pattern = /^[a-z]{2,3}-[A-Z]{2}-(Standard|Wavenet|Neural2|Studio|Journey|News|Polyglot)-[A-Za-z]$/;
|
|
130
|
+
return pattern.test(voiceId);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if text is SSML (Speech Synthesis Markup Language)
|
|
134
|
+
*/
|
|
135
|
+
isSSML(text) {
|
|
136
|
+
return text.trim().startsWith('<speak>') && text.trim().endsWith('</speak>');
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Extract gender hint from voice variant (A-D typically female, E+ typically male)
|
|
140
|
+
* This is a heuristic and may not always be accurate
|
|
141
|
+
*/
|
|
142
|
+
extractGender(voiceId) {
|
|
143
|
+
const variant = voiceId.split('-').pop();
|
|
144
|
+
if (!variant)
|
|
145
|
+
return null;
|
|
146
|
+
// Google's general pattern (not guaranteed):
|
|
147
|
+
// A, B, C, D = Female
|
|
148
|
+
// E, F, G, H = Male
|
|
149
|
+
const femaleVariants = ['A', 'B', 'C', 'D'];
|
|
150
|
+
const maleVariants = ['E', 'F', 'G', 'H'];
|
|
151
|
+
if (femaleVariants.includes(variant))
|
|
152
|
+
return 'FEMALE';
|
|
153
|
+
if (maleVariants.includes(variant))
|
|
154
|
+
return 'MALE';
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Clamp value between min and max
|
|
159
|
+
*/
|
|
160
|
+
clamp(value, min, max) {
|
|
161
|
+
return Math.max(min, Math.min(max, value));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.GoogleTTSAdapter = GoogleTTSAdapter;
|
|
165
|
+
//# sourceMappingURL=GoogleTTSAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleTTSAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/GoogleTTSAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Google Voice Adapter
|
|
4
|
+
* Uses Google services exclusively:
|
|
5
|
+
* - Gemini API for STT (Speech-to-Text)
|
|
6
|
+
* - Google Cloud Text-to-Speech API for TTS
|
|
7
|
+
*
|
|
8
|
+
* Outputs standard LINEAR16 PCM audio for perfect concatenation
|
|
9
|
+
*/
|
|
10
|
+
export declare class GoogleVoiceAdapter implements IVoiceAdapter {
|
|
11
|
+
private apiKey;
|
|
12
|
+
private voiceConfig?;
|
|
13
|
+
private ttsClient;
|
|
14
|
+
constructor(apiKey: string, voiceConfig?: VoiceConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Convert speech (audio) to text using Gemini's audio input capability
|
|
17
|
+
*/
|
|
18
|
+
speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Convert text to speech using Google Cloud Text-to-Speech API
|
|
21
|
+
* Supports both API key and service account authentication
|
|
22
|
+
*/
|
|
23
|
+
textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
|
|
24
|
+
/**
|
|
25
|
+
* Declare the audio format produced by Google TTS
|
|
26
|
+
*/
|
|
27
|
+
getTTSOutputFormat(): AudioFormatMetadata;
|
|
28
|
+
/**
|
|
29
|
+
* Declare the expected audio format for Gemini STT
|
|
30
|
+
*/
|
|
31
|
+
getSTTInputFormat(): AudioFormatMetadata;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=GoogleVoiceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/GoogleVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGnF;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,SAAS,CAAqB;gBAE1B,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAMrD;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDrF;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IA0ElF;;OAEG;IACH,kBAAkB,IAAI,mBAAmB;IASzC;;OAEG;IACH,iBAAiB,IAAI,mBAAmB;CAQ3C"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoogleVoiceAdapter = void 0;
|
|
4
|
+
const text_to_speech_1 = require("@google-cloud/text-to-speech");
|
|
5
|
+
/**
|
|
6
|
+
* Google Voice Adapter
|
|
7
|
+
* Uses Google services exclusively:
|
|
8
|
+
* - Gemini API for STT (Speech-to-Text)
|
|
9
|
+
* - Google Cloud Text-to-Speech API for TTS
|
|
10
|
+
*
|
|
11
|
+
* Outputs standard LINEAR16 PCM audio for perfect concatenation
|
|
12
|
+
*/
|
|
13
|
+
class GoogleVoiceAdapter {
|
|
14
|
+
constructor(apiKey, voiceConfig) {
|
|
15
|
+
this.apiKey = apiKey;
|
|
16
|
+
this.voiceConfig = voiceConfig;
|
|
17
|
+
this.ttsClient = new text_to_speech_1.TextToSpeechClient();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Convert speech (audio) to text using Gemini's audio input capability
|
|
21
|
+
*/
|
|
22
|
+
async speechToText(audioBase64, config) {
|
|
23
|
+
const sttConfig = config || this.voiceConfig?.stt;
|
|
24
|
+
const language = sttConfig?.language || 'en-US';
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-lite:generateContent?key=${this.apiKey}`, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify({
|
|
30
|
+
contents: [{
|
|
31
|
+
role: 'user',
|
|
32
|
+
parts: [
|
|
33
|
+
{ text: "Transcribe the following audio exactly. Do not respond to the audio, just output the transcription." },
|
|
34
|
+
{
|
|
35
|
+
inlineData: {
|
|
36
|
+
mimeType: 'audio/wav',
|
|
37
|
+
data: audioBase64
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}],
|
|
42
|
+
generationConfig: {
|
|
43
|
+
temperature: 0.1,
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const errorText = await response.text();
|
|
49
|
+
throw new Error(`Gemini STT API Error: ${response.status} - ${errorText}`);
|
|
50
|
+
}
|
|
51
|
+
const json = await response.json();
|
|
52
|
+
const transcript = json.candidates?.[0]?.content?.parts?.[0]?.text || '';
|
|
53
|
+
if (!transcript) {
|
|
54
|
+
throw new Error('No transcript returned from Gemini STT');
|
|
55
|
+
}
|
|
56
|
+
return transcript;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('Speech-to-Text Error:', error);
|
|
60
|
+
throw new Error(`STT failed: ${error.message}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Convert text to speech using Google Cloud Text-to-Speech API
|
|
65
|
+
* Supports both API key and service account authentication
|
|
66
|
+
*/
|
|
67
|
+
async textToSpeech(text, config) {
|
|
68
|
+
const ttsConfig = config || this.voiceConfig?.tts;
|
|
69
|
+
const languageCode = ttsConfig?.language || 'en-US';
|
|
70
|
+
const voiceName = ttsConfig?.voice || 'en-US-Chirp3-HD-Leda'; // Default female voice
|
|
71
|
+
try {
|
|
72
|
+
// Try API key authentication first (simpler)
|
|
73
|
+
const googleCloudApiKey = process.env.GOOGLE_CLOUD_API_KEY || process.env.GOOGLE_AI_API_KEY;
|
|
74
|
+
if (googleCloudApiKey) {
|
|
75
|
+
// Use REST API with API key
|
|
76
|
+
const response = await fetch(`https://texttospeech.googleapis.com/v1/text:synthesize?key=${googleCloudApiKey}`, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: { 'Content-Type': 'application/json' },
|
|
79
|
+
body: JSON.stringify({
|
|
80
|
+
input: { text },
|
|
81
|
+
voice: {
|
|
82
|
+
languageCode: languageCode,
|
|
83
|
+
name: voiceName
|
|
84
|
+
},
|
|
85
|
+
audioConfig: {
|
|
86
|
+
audioEncoding: 'LINEAR16',
|
|
87
|
+
sampleRateHertz: 16000,
|
|
88
|
+
pitch: 0,
|
|
89
|
+
speakingRate: 1.2
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
const errorText = await response.text();
|
|
95
|
+
throw new Error(`Google TTS API Error: ${response.status} - ${errorText}`);
|
|
96
|
+
}
|
|
97
|
+
const json = await response.json();
|
|
98
|
+
const audioContent = json.audioContent;
|
|
99
|
+
if (!audioContent) {
|
|
100
|
+
throw new Error('No audio content received from Google TTS');
|
|
101
|
+
}
|
|
102
|
+
// audioContent is base64-encoded
|
|
103
|
+
return new Uint8Array(Buffer.from(audioContent, 'base64'));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Fall back to service account authentication
|
|
107
|
+
const [response] = await this.ttsClient.synthesizeSpeech({
|
|
108
|
+
input: { text },
|
|
109
|
+
voice: {
|
|
110
|
+
languageCode: languageCode,
|
|
111
|
+
name: voiceName
|
|
112
|
+
},
|
|
113
|
+
audioConfig: {
|
|
114
|
+
audioEncoding: 'LINEAR16',
|
|
115
|
+
sampleRateHertz: 16000,
|
|
116
|
+
pitch: 0,
|
|
117
|
+
speakingRate: 1.2
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
if (!response.audioContent) {
|
|
121
|
+
throw new Error('No audio content received from Google TTS');
|
|
122
|
+
}
|
|
123
|
+
return new Uint8Array(response.audioContent);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error('Text-to-Speech Error:', error);
|
|
128
|
+
throw new Error(`TTS failed: ${error.message}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Declare the audio format produced by Google TTS
|
|
133
|
+
*/
|
|
134
|
+
getTTSOutputFormat() {
|
|
135
|
+
return {
|
|
136
|
+
format: 'wav',
|
|
137
|
+
sampleRate: 16000,
|
|
138
|
+
channels: 1,
|
|
139
|
+
bitDepth: 16
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Declare the expected audio format for Gemini STT
|
|
144
|
+
*/
|
|
145
|
+
getSTTInputFormat() {
|
|
146
|
+
return {
|
|
147
|
+
format: 'wav',
|
|
148
|
+
sampleRate: 16000,
|
|
149
|
+
channels: 1,
|
|
150
|
+
bitDepth: 16
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.GoogleVoiceAdapter = GoogleVoiceAdapter;
|
|
155
|
+
//# sourceMappingURL=GoogleVoiceAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/GoogleVoiceAdapter.ts"],"names":[],"mappings":"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"}
|