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.
Files changed (470) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/intent/IntentMatcher.d.ts +16 -0
  3. package/dist/adapters/intent/IntentMatcher.d.ts.map +1 -1
  4. package/dist/adapters/intent/IntentMatcher.js +93 -15
  5. package/dist/adapters/intent/IntentMatcher.js.map +1 -1
  6. package/dist/adapters/intent/IntentService.d.ts +4 -5
  7. package/dist/adapters/intent/IntentService.d.ts.map +1 -1
  8. package/dist/adapters/intent/IntentService.js +15 -9
  9. package/dist/adapters/intent/IntentService.js.map +1 -1
  10. package/dist/adapters/intent/MockIntentService.d.ts +7 -0
  11. package/dist/adapters/intent/MockIntentService.d.ts.map +1 -0
  12. package/dist/adapters/intent/MockIntentService.js +36 -0
  13. package/dist/adapters/intent/MockIntentService.js.map +1 -0
  14. package/dist/adapters/llm/OllamaLLMAdapter.d.ts +9 -0
  15. package/dist/adapters/llm/OllamaLLMAdapter.d.ts.map +1 -0
  16. package/dist/adapters/llm/OllamaLLMAdapter.js +74 -0
  17. package/dist/adapters/llm/OllamaLLMAdapter.js.map +1 -0
  18. package/dist/adapters/logger/ConsoleLogger.d.ts +12 -0
  19. package/dist/adapters/logger/ConsoleLogger.d.ts.map +1 -0
  20. package/dist/adapters/logger/ConsoleLogger.js +37 -0
  21. package/dist/adapters/logger/ConsoleLogger.js.map +1 -0
  22. package/dist/adapters/repository/InMemoryRepository.d.ts +35 -4
  23. package/dist/adapters/repository/InMemoryRepository.d.ts.map +1 -1
  24. package/dist/adapters/repository/InMemoryRepository.js +204 -10
  25. package/dist/adapters/repository/InMemoryRepository.js.map +1 -1
  26. package/dist/adapters/repository/RedisRepository.d.ts +52 -5
  27. package/dist/adapters/repository/RedisRepository.d.ts.map +1 -1
  28. package/dist/adapters/repository/RedisRepository.js +525 -26
  29. package/dist/adapters/repository/RedisRepository.js.map +1 -1
  30. package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts +33 -0
  31. package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts.map +1 -0
  32. package/dist/adapters/storage/RedisAudioStorageAdapter.js +121 -0
  33. package/dist/adapters/storage/RedisAudioStorageAdapter.js.map +1 -0
  34. package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts +14 -0
  35. package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts.map +1 -0
  36. package/dist/adapters/storage/RedisBufferStorageAdapter.js +94 -0
  37. package/dist/adapters/storage/RedisBufferStorageAdapter.js.map +1 -0
  38. package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts +29 -0
  39. package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts.map +1 -0
  40. package/dist/adapters/voice/ElevenLabsVoiceAdapter.js +75 -0
  41. package/dist/adapters/voice/ElevenLabsVoiceAdapter.js.map +1 -0
  42. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts +77 -0
  43. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts.map +1 -0
  44. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js +187 -0
  45. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js.map +1 -0
  46. package/dist/adapters/voice/GeminiVoiceAdapter.d.ts +36 -0
  47. package/dist/adapters/voice/GeminiVoiceAdapter.d.ts.map +1 -0
  48. package/dist/adapters/voice/GeminiVoiceAdapter.js +134 -0
  49. package/dist/adapters/voice/GeminiVoiceAdapter.js.map +1 -0
  50. package/dist/adapters/voice/GoogleTTSAdapter.d.ts +61 -0
  51. package/dist/adapters/voice/GoogleTTSAdapter.d.ts.map +1 -0
  52. package/dist/adapters/voice/GoogleTTSAdapter.js +165 -0
  53. package/dist/adapters/voice/GoogleTTSAdapter.js.map +1 -0
  54. package/dist/adapters/voice/GoogleVoiceAdapter.d.ts +33 -0
  55. package/dist/adapters/voice/GoogleVoiceAdapter.d.ts.map +1 -0
  56. package/dist/adapters/voice/GoogleVoiceAdapter.js +155 -0
  57. package/dist/adapters/voice/GoogleVoiceAdapter.js.map +1 -0
  58. package/dist/adapters/voice/HybridVoiceAdapter.d.ts +54 -0
  59. package/dist/adapters/voice/HybridVoiceAdapter.d.ts.map +1 -0
  60. package/dist/adapters/voice/HybridVoiceAdapter.js +102 -0
  61. package/dist/adapters/voice/HybridVoiceAdapter.js.map +1 -0
  62. package/dist/adapters/voice/LanguageVoiceMapper.d.ts +60 -0
  63. package/dist/adapters/voice/LanguageVoiceMapper.d.ts.map +1 -0
  64. package/dist/adapters/voice/LanguageVoiceMapper.js +130 -0
  65. package/dist/adapters/voice/LanguageVoiceMapper.js.map +1 -0
  66. package/dist/adapters/voice/VertexVoiceAdapter.d.ts +32 -0
  67. package/dist/adapters/voice/VertexVoiceAdapter.d.ts.map +1 -0
  68. package/dist/adapters/voice/VertexVoiceAdapter.js +179 -0
  69. package/dist/adapters/voice/VertexVoiceAdapter.js.map +1 -0
  70. package/dist/adapters/webhook/WebhookService.d.ts +47 -0
  71. package/dist/adapters/webhook/WebhookService.d.ts.map +1 -0
  72. package/dist/adapters/webhook/WebhookService.js +265 -0
  73. package/dist/adapters/webhook/WebhookService.js.map +1 -0
  74. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -1
  75. package/dist/adapters/workflow/MockWorkflowAdapter.js +12 -1
  76. package/dist/adapters/workflow/MockWorkflowAdapter.js.map +1 -1
  77. package/dist/adapters/workflow/WorkflowAdapter.d.ts +55 -0
  78. package/dist/adapters/workflow/WorkflowAdapter.d.ts.map +1 -0
  79. package/dist/adapters/workflow/WorkflowAdapter.js +242 -0
  80. package/dist/adapters/workflow/WorkflowAdapter.js.map +1 -0
  81. package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts +10 -0
  82. package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts.map +1 -0
  83. package/dist/adapters/workflow/actions/getSupportHoursAction.js +33 -0
  84. package/dist/adapters/workflow/actions/getSupportHoursAction.js.map +1 -0
  85. package/dist/adapters/workflow/actions/index.d.ts +6 -0
  86. package/dist/adapters/workflow/actions/index.d.ts.map +1 -0
  87. package/dist/adapters/workflow/actions/index.js +22 -0
  88. package/dist/adapters/workflow/actions/index.js.map +1 -0
  89. package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts +11 -0
  90. package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts.map +1 -0
  91. package/dist/adapters/workflow/actions/pushOutputResultAction.js +31 -0
  92. package/dist/adapters/workflow/actions/pushOutputResultAction.js.map +1 -0
  93. package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts +12 -0
  94. package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts.map +1 -0
  95. package/dist/adapters/workflow/actions/setWorkflowMessageAction.js +32 -0
  96. package/dist/adapters/workflow/actions/setWorkflowMessageAction.js.map +1 -0
  97. package/dist/adapters/workflow/engine/constants.d.ts +3 -0
  98. package/dist/adapters/workflow/engine/constants.d.ts.map +1 -0
  99. package/dist/adapters/workflow/engine/constants.js +6 -0
  100. package/dist/adapters/workflow/engine/constants.js.map +1 -0
  101. package/dist/adapters/workflow/engine/engine.d.ts +32 -0
  102. package/dist/adapters/workflow/engine/engine.d.ts.map +1 -0
  103. package/dist/adapters/workflow/engine/engine.js +623 -0
  104. package/dist/adapters/workflow/engine/engine.js.map +1 -0
  105. package/dist/adapters/workflow/engine/event-registry.d.ts +12 -0
  106. package/dist/adapters/workflow/engine/event-registry.d.ts.map +1 -0
  107. package/dist/adapters/workflow/engine/event-registry.js +33 -0
  108. package/dist/adapters/workflow/engine/event-registry.js.map +1 -0
  109. package/dist/adapters/workflow/engine/interpolator.d.ts +11 -0
  110. package/dist/adapters/workflow/engine/interpolator.d.ts.map +1 -0
  111. package/dist/adapters/workflow/engine/interpolator.js +93 -0
  112. package/dist/adapters/workflow/engine/interpolator.js.map +1 -0
  113. package/dist/adapters/workflow/engine/registry.d.ts +12 -0
  114. package/dist/adapters/workflow/engine/registry.d.ts.map +1 -0
  115. package/dist/adapters/workflow/engine/registry.js +39 -0
  116. package/dist/adapters/workflow/engine/registry.js.map +1 -0
  117. package/dist/adapters/workflow/engine/template-registry.d.ts +60 -0
  118. package/dist/adapters/workflow/engine/template-registry.d.ts.map +1 -0
  119. package/dist/adapters/workflow/engine/template-registry.js +92 -0
  120. package/dist/adapters/workflow/engine/template-registry.js.map +1 -0
  121. package/dist/adapters/workflow/engine/types.d.ts +182 -0
  122. package/dist/adapters/workflow/engine/types.d.ts.map +1 -0
  123. package/dist/adapters/workflow/engine/types.js +3 -0
  124. package/dist/adapters/workflow/engine/types.js.map +1 -0
  125. package/dist/adapters/workflow/engine/utils/format-utils.d.ts +43 -0
  126. package/dist/adapters/workflow/engine/utils/format-utils.d.ts.map +1 -0
  127. package/dist/adapters/workflow/engine/utils/format-utils.js +137 -0
  128. package/dist/adapters/workflow/engine/utils/format-utils.js.map +1 -0
  129. package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts +7 -0
  130. package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts.map +1 -0
  131. package/dist/adapters/workflow/engine/utils/layout-calculator.js +87 -0
  132. package/dist/adapters/workflow/engine/utils/layout-calculator.js.map +1 -0
  133. package/dist/adapters/workflow/engine/utils/slugify.d.ts +2 -0
  134. package/dist/adapters/workflow/engine/utils/slugify.d.ts.map +1 -0
  135. package/dist/adapters/workflow/engine/utils/slugify.js +41 -0
  136. package/dist/adapters/workflow/engine/utils/slugify.js.map +1 -0
  137. package/dist/adapters/workflow/engine/validator.d.ts +9 -0
  138. package/dist/adapters/workflow/engine/validator.d.ts.map +1 -0
  139. package/dist/adapters/workflow/engine/validator.js +425 -0
  140. package/dist/adapters/workflow/engine/validator.js.map +1 -0
  141. package/dist/config/ChatFlowConfig.d.ts +7 -0
  142. package/dist/config/ChatFlowConfig.d.ts.map +1 -1
  143. package/dist/config/ChatFlowConfig.js +5 -0
  144. package/dist/config/ChatFlowConfig.js.map +1 -1
  145. package/dist/core/entities/ConversationSession.d.ts +36 -1
  146. package/dist/core/entities/ConversationSession.d.ts.map +1 -1
  147. package/dist/core/entities/ConversationSession.js +78 -1
  148. package/dist/core/entities/ConversationSession.js.map +1 -1
  149. package/dist/core/entities/Message.d.ts +5 -2
  150. package/dist/core/entities/Message.d.ts.map +1 -1
  151. package/dist/core/entities/Message.js +2 -0
  152. package/dist/core/entities/Message.js.map +1 -1
  153. package/dist/core/utils/AudioStreamBuffer.d.ts +33 -0
  154. package/dist/core/utils/AudioStreamBuffer.d.ts.map +1 -0
  155. package/dist/core/utils/AudioStreamBuffer.js +55 -0
  156. package/dist/core/utils/AudioStreamBuffer.js.map +1 -0
  157. package/dist/core/utils/AudioUtils.d.ts +41 -0
  158. package/dist/core/utils/AudioUtils.d.ts.map +1 -0
  159. package/dist/core/utils/AudioUtils.js +188 -0
  160. package/dist/core/utils/AudioUtils.js.map +1 -0
  161. package/dist/core/utils/LanguageDetector.d.ts +52 -0
  162. package/dist/core/utils/LanguageDetector.d.ts.map +1 -0
  163. package/dist/core/utils/LanguageDetector.js +173 -0
  164. package/dist/core/utils/LanguageDetector.js.map +1 -0
  165. package/dist/core/utils/WavUtils.d.ts +14 -0
  166. package/dist/core/utils/WavUtils.d.ts.map +1 -0
  167. package/dist/core/utils/WavUtils.js +37 -0
  168. package/dist/core/utils/WavUtils.js.map +1 -0
  169. package/dist/demo/cli-demo.js +10 -6
  170. package/dist/demo/cli-demo.js.map +1 -1
  171. package/dist/demo/console-chat.js +10 -6
  172. package/dist/demo/console-chat.js.map +1 -1
  173. package/dist/demo/interactive-voice-chat.d.ts +2 -0
  174. package/dist/demo/interactive-voice-chat.d.ts.map +1 -0
  175. package/dist/demo/interactive-voice-chat.js +180 -0
  176. package/dist/demo/interactive-voice-chat.js.map +1 -0
  177. package/dist/demo/voice-demo.d.ts +2 -0
  178. package/dist/demo/voice-demo.d.ts.map +1 -0
  179. package/dist/demo/voice-demo.js +188 -0
  180. package/dist/demo/voice-demo.js.map +1 -0
  181. package/dist/index.d.ts +9 -5
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +23 -8
  184. package/dist/index.js.map +1 -1
  185. package/dist/intent/IntentService.d.ts.map +1 -1
  186. package/dist/intent/IntentService.js +13 -7
  187. package/dist/intent/IntentService.js.map +1 -1
  188. package/dist/intent/MockIntentService.d.ts +2 -1
  189. package/dist/intent/MockIntentService.d.ts.map +1 -1
  190. package/dist/intent/MockIntentService.js +9 -3
  191. package/dist/intent/MockIntentService.js.map +1 -1
  192. package/dist/interfaces.d.ts +551 -6
  193. package/dist/interfaces.d.ts.map +1 -1
  194. package/dist/interfaces.js +19 -1
  195. package/dist/interfaces.js.map +1 -1
  196. package/dist/orchestrator/Orchestrator.d.ts +48 -4
  197. package/dist/orchestrator/Orchestrator.d.ts.map +1 -1
  198. package/dist/orchestrator/Orchestrator.js +650 -33
  199. package/dist/orchestrator/Orchestrator.js.map +1 -1
  200. package/dist/scripts/seed-collaborative-intents.d.ts +2 -0
  201. package/dist/scripts/seed-collaborative-intents.d.ts.map +1 -0
  202. package/dist/scripts/seed-collaborative-intents.js +90 -0
  203. package/dist/scripts/seed-collaborative-intents.js.map +1 -0
  204. package/dist/scripts/test-isolated-config.d.ts +2 -0
  205. package/dist/scripts/test-isolated-config.d.ts.map +1 -0
  206. package/dist/scripts/test-isolated-config.js +80 -0
  207. package/dist/scripts/test-isolated-config.js.map +1 -0
  208. package/dist/scripts/verify_redis_intents.js +4 -2
  209. package/dist/scripts/verify_redis_intents.js.map +1 -1
  210. package/dist/server/ChatFlowWebSocketServer.d.ts +46 -0
  211. package/dist/server/ChatFlowWebSocketServer.d.ts.map +1 -0
  212. package/dist/server/ChatFlowWebSocketServer.js +344 -0
  213. package/dist/server/ChatFlowWebSocketServer.js.map +1 -0
  214. package/dist/server/realtime-voice-server.d.ts +2 -0
  215. package/dist/server/realtime-voice-server.d.ts.map +1 -0
  216. package/dist/server/realtime-voice-server.js +627 -0
  217. package/dist/server/realtime-voice-server.js.map +1 -0
  218. package/dist/src/adapters/intent/IntentMatcher.d.ts +41 -0
  219. package/dist/src/adapters/intent/IntentMatcher.d.ts.map +1 -0
  220. package/dist/src/adapters/intent/IntentMatcher.js +167 -0
  221. package/dist/src/adapters/intent/IntentMatcher.js.map +1 -0
  222. package/dist/src/adapters/intent/IntentService.d.ts +26 -0
  223. package/dist/src/adapters/intent/IntentService.d.ts.map +1 -0
  224. package/dist/src/adapters/intent/IntentService.js +65 -0
  225. package/dist/src/adapters/intent/IntentService.js.map +1 -0
  226. package/dist/src/adapters/intent/MockIntentService.d.ts +7 -0
  227. package/dist/src/adapters/intent/MockIntentService.d.ts.map +1 -0
  228. package/dist/src/adapters/intent/MockIntentService.js +36 -0
  229. package/dist/src/adapters/intent/MockIntentService.js.map +1 -0
  230. package/dist/src/adapters/llm/GeminiLLMAdapter.d.ts +10 -0
  231. package/dist/src/adapters/llm/GeminiLLMAdapter.d.ts.map +1 -0
  232. package/dist/src/adapters/llm/GeminiLLMAdapter.js +102 -0
  233. package/dist/src/adapters/llm/GeminiLLMAdapter.js.map +1 -0
  234. package/dist/src/adapters/llm/MockLLMAdapter.d.ts +5 -0
  235. package/dist/src/adapters/llm/MockLLMAdapter.d.ts.map +1 -0
  236. package/dist/src/adapters/llm/MockLLMAdapter.js +31 -0
  237. package/dist/src/adapters/llm/MockLLMAdapter.js.map +1 -0
  238. package/dist/src/adapters/llm/OllamaLLMAdapter.d.ts +9 -0
  239. package/dist/src/adapters/llm/OllamaLLMAdapter.d.ts.map +1 -0
  240. package/dist/src/adapters/llm/OllamaLLMAdapter.js +74 -0
  241. package/dist/src/adapters/llm/OllamaLLMAdapter.js.map +1 -0
  242. package/dist/src/adapters/logger/ConsoleLogger.d.ts +12 -0
  243. package/dist/src/adapters/logger/ConsoleLogger.d.ts.map +1 -0
  244. package/dist/src/adapters/logger/ConsoleLogger.js +37 -0
  245. package/dist/src/adapters/logger/ConsoleLogger.js.map +1 -0
  246. package/dist/src/adapters/repository/InMemoryRepository.d.ts +57 -0
  247. package/dist/src/adapters/repository/InMemoryRepository.d.ts.map +1 -0
  248. package/dist/src/adapters/repository/InMemoryRepository.js +269 -0
  249. package/dist/src/adapters/repository/InMemoryRepository.js.map +1 -0
  250. package/dist/src/adapters/repository/RedisRepository.d.ts +72 -0
  251. package/dist/src/adapters/repository/RedisRepository.d.ts.map +1 -0
  252. package/dist/src/adapters/repository/RedisRepository.js +700 -0
  253. package/dist/src/adapters/repository/RedisRepository.js.map +1 -0
  254. package/dist/src/adapters/repository/SupabaseRepository.d.ts +60 -0
  255. package/dist/src/adapters/repository/SupabaseRepository.d.ts.map +1 -0
  256. package/dist/src/adapters/repository/SupabaseRepository.js +774 -0
  257. package/dist/src/adapters/repository/SupabaseRepository.js.map +1 -0
  258. package/dist/src/adapters/storage/RedisAudioStorageAdapter.d.ts +33 -0
  259. package/dist/src/adapters/storage/RedisAudioStorageAdapter.d.ts.map +1 -0
  260. package/dist/src/adapters/storage/RedisAudioStorageAdapter.js +121 -0
  261. package/dist/src/adapters/storage/RedisAudioStorageAdapter.js.map +1 -0
  262. package/dist/src/adapters/voice/GoogleVoiceAdapter.d.ts +33 -0
  263. package/dist/src/adapters/voice/GoogleVoiceAdapter.d.ts.map +1 -0
  264. package/dist/src/adapters/voice/GoogleVoiceAdapter.js +155 -0
  265. package/dist/src/adapters/voice/GoogleVoiceAdapter.js.map +1 -0
  266. package/dist/src/adapters/voice/LanguageVoiceMapper.d.ts +60 -0
  267. package/dist/src/adapters/voice/LanguageVoiceMapper.d.ts.map +1 -0
  268. package/dist/src/adapters/voice/LanguageVoiceMapper.js +130 -0
  269. package/dist/src/adapters/voice/LanguageVoiceMapper.js.map +1 -0
  270. package/dist/src/adapters/voice/VertexVoiceAdapter.d.ts +32 -0
  271. package/dist/src/adapters/voice/VertexVoiceAdapter.d.ts.map +1 -0
  272. package/dist/src/adapters/voice/VertexVoiceAdapter.js +179 -0
  273. package/dist/src/adapters/voice/VertexVoiceAdapter.js.map +1 -0
  274. package/dist/src/adapters/webhook/WebhookService.d.ts +47 -0
  275. package/dist/src/adapters/webhook/WebhookService.d.ts.map +1 -0
  276. package/dist/src/adapters/webhook/WebhookService.js +265 -0
  277. package/dist/src/adapters/webhook/WebhookService.js.map +1 -0
  278. package/dist/src/adapters/workflow/MockWorkflowAdapter.d.ts +5 -0
  279. package/dist/src/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -0
  280. package/dist/src/adapters/workflow/MockWorkflowAdapter.js +173 -0
  281. package/dist/src/adapters/workflow/MockWorkflowAdapter.js.map +1 -0
  282. package/dist/src/adapters/workflow/WorkflowAdapter.d.ts +55 -0
  283. package/dist/src/adapters/workflow/WorkflowAdapter.d.ts.map +1 -0
  284. package/dist/src/adapters/workflow/WorkflowAdapter.js +203 -0
  285. package/dist/src/adapters/workflow/WorkflowAdapter.js.map +1 -0
  286. package/dist/src/adapters/workflow/actions/index.d.ts +6 -0
  287. package/dist/src/adapters/workflow/actions/index.d.ts.map +1 -0
  288. package/dist/src/adapters/workflow/actions/index.js +22 -0
  289. package/dist/src/adapters/workflow/actions/index.js.map +1 -0
  290. package/dist/src/adapters/workflow/actions/pushOutputResultAction.d.ts +11 -0
  291. package/dist/src/adapters/workflow/actions/pushOutputResultAction.d.ts.map +1 -0
  292. package/dist/src/adapters/workflow/actions/pushOutputResultAction.js +31 -0
  293. package/dist/src/adapters/workflow/actions/pushOutputResultAction.js.map +1 -0
  294. package/dist/src/adapters/workflow/engine/constants.d.ts +3 -0
  295. package/dist/src/adapters/workflow/engine/constants.d.ts.map +1 -0
  296. package/dist/src/adapters/workflow/engine/constants.js +6 -0
  297. package/dist/src/adapters/workflow/engine/constants.js.map +1 -0
  298. package/dist/src/adapters/workflow/engine/engine.d.ts +32 -0
  299. package/dist/src/adapters/workflow/engine/engine.d.ts.map +1 -0
  300. package/dist/src/adapters/workflow/engine/engine.js +622 -0
  301. package/dist/src/adapters/workflow/engine/engine.js.map +1 -0
  302. package/dist/src/adapters/workflow/engine/event-registry.d.ts +12 -0
  303. package/dist/src/adapters/workflow/engine/event-registry.d.ts.map +1 -0
  304. package/dist/src/adapters/workflow/engine/event-registry.js +33 -0
  305. package/dist/src/adapters/workflow/engine/event-registry.js.map +1 -0
  306. package/dist/src/adapters/workflow/engine/interpolator.d.ts +11 -0
  307. package/dist/src/adapters/workflow/engine/interpolator.d.ts.map +1 -0
  308. package/dist/src/adapters/workflow/engine/interpolator.js +93 -0
  309. package/dist/src/adapters/workflow/engine/interpolator.js.map +1 -0
  310. package/dist/src/adapters/workflow/engine/registry.d.ts +12 -0
  311. package/dist/src/adapters/workflow/engine/registry.d.ts.map +1 -0
  312. package/dist/src/adapters/workflow/engine/registry.js +39 -0
  313. package/dist/src/adapters/workflow/engine/registry.js.map +1 -0
  314. package/dist/src/adapters/workflow/engine/template-registry.d.ts +60 -0
  315. package/dist/src/adapters/workflow/engine/template-registry.d.ts.map +1 -0
  316. package/dist/src/adapters/workflow/engine/template-registry.js +92 -0
  317. package/dist/src/adapters/workflow/engine/template-registry.js.map +1 -0
  318. package/dist/src/adapters/workflow/engine/utils/format-utils.d.ts +43 -0
  319. package/dist/src/adapters/workflow/engine/utils/format-utils.d.ts.map +1 -0
  320. package/dist/src/adapters/workflow/engine/utils/format-utils.js +137 -0
  321. package/dist/src/adapters/workflow/engine/utils/format-utils.js.map +1 -0
  322. package/dist/src/adapters/workflow/engine/utils/layout-calculator.d.ts +7 -0
  323. package/dist/src/adapters/workflow/engine/utils/layout-calculator.d.ts.map +1 -0
  324. package/dist/src/adapters/workflow/engine/utils/layout-calculator.js +87 -0
  325. package/dist/src/adapters/workflow/engine/utils/layout-calculator.js.map +1 -0
  326. package/dist/src/adapters/workflow/engine/utils/slugify.d.ts +2 -0
  327. package/dist/src/adapters/workflow/engine/utils/slugify.d.ts.map +1 -0
  328. package/dist/src/adapters/workflow/engine/utils/slugify.js +41 -0
  329. package/dist/src/adapters/workflow/engine/utils/slugify.js.map +1 -0
  330. package/dist/src/adapters/workflow/engine/validator.d.ts +9 -0
  331. package/dist/src/adapters/workflow/engine/validator.d.ts.map +1 -0
  332. package/dist/src/adapters/workflow/engine/validator.js +425 -0
  333. package/dist/src/adapters/workflow/engine/validator.js.map +1 -0
  334. package/dist/src/api/router.d.ts +3 -0
  335. package/dist/src/api/router.d.ts.map +1 -0
  336. package/dist/src/api/router.js +27 -0
  337. package/dist/src/api/router.js.map +1 -0
  338. package/dist/src/api/routes/configs.d.ts +3 -0
  339. package/dist/src/api/routes/configs.d.ts.map +1 -0
  340. package/dist/src/api/routes/configs.js +110 -0
  341. package/dist/src/api/routes/configs.js.map +1 -0
  342. package/dist/src/api/routes/executions.d.ts +3 -0
  343. package/dist/src/api/routes/executions.d.ts.map +1 -0
  344. package/dist/src/api/routes/executions.js +77 -0
  345. package/dist/src/api/routes/executions.js.map +1 -0
  346. package/dist/src/api/routes/intents.d.ts +3 -0
  347. package/dist/src/api/routes/intents.d.ts.map +1 -0
  348. package/dist/src/api/routes/intents.js +128 -0
  349. package/dist/src/api/routes/intents.js.map +1 -0
  350. package/dist/src/api/routes/sessions.d.ts +3 -0
  351. package/dist/src/api/routes/sessions.d.ts.map +1 -0
  352. package/dist/src/api/routes/sessions.js +105 -0
  353. package/dist/src/api/routes/sessions.js.map +1 -0
  354. package/dist/src/api/routes/tenants.d.ts +3 -0
  355. package/dist/src/api/routes/tenants.d.ts.map +1 -0
  356. package/dist/src/api/routes/tenants.js +109 -0
  357. package/dist/src/api/routes/tenants.js.map +1 -0
  358. package/dist/src/api/routes/users.d.ts +3 -0
  359. package/dist/src/api/routes/users.d.ts.map +1 -0
  360. package/dist/src/api/routes/users.js +51 -0
  361. package/dist/src/api/routes/users.js.map +1 -0
  362. package/dist/src/api/routes/workflows.d.ts +3 -0
  363. package/dist/src/api/routes/workflows.d.ts.map +1 -0
  364. package/dist/src/api/routes/workflows.js +132 -0
  365. package/dist/src/api/routes/workflows.js.map +1 -0
  366. package/dist/src/config/ChatFlowConfig.d.ts +66 -0
  367. package/dist/src/config/ChatFlowConfig.d.ts.map +1 -0
  368. package/dist/src/config/ChatFlowConfig.js +54 -0
  369. package/dist/src/config/ChatFlowConfig.js.map +1 -0
  370. package/dist/src/config/index.d.ts +2 -0
  371. package/dist/src/config/index.d.ts.map +1 -0
  372. package/dist/src/config/index.js +7 -0
  373. package/dist/src/config/index.js.map +1 -0
  374. package/dist/src/config/swagger.d.ts +2 -0
  375. package/dist/src/config/swagger.d.ts.map +1 -0
  376. package/dist/src/config/swagger.js +136 -0
  377. package/dist/src/config/swagger.js.map +1 -0
  378. package/dist/src/core/entities/ConversationSession.d.ts +58 -0
  379. package/dist/src/core/entities/ConversationSession.d.ts.map +1 -0
  380. package/dist/src/core/entities/ConversationSession.js +160 -0
  381. package/dist/src/core/entities/ConversationSession.js.map +1 -0
  382. package/dist/src/core/entities/Message.d.ts +14 -0
  383. package/dist/src/core/entities/Message.d.ts.map +1 -0
  384. package/dist/src/core/entities/Message.js +32 -0
  385. package/dist/src/core/entities/Message.js.map +1 -0
  386. package/dist/src/core/errors/ChatFlowError.d.ts +71 -0
  387. package/dist/src/core/errors/ChatFlowError.d.ts.map +1 -0
  388. package/dist/src/core/errors/ChatFlowError.js +108 -0
  389. package/dist/src/core/errors/ChatFlowError.js.map +1 -0
  390. package/dist/src/core/errors/index.d.ts +2 -0
  391. package/dist/src/core/errors/index.d.ts.map +1 -0
  392. package/dist/src/core/errors/index.js +15 -0
  393. package/dist/src/core/errors/index.js.map +1 -0
  394. package/dist/src/core/utils/AudioUtils.d.ts +41 -0
  395. package/dist/src/core/utils/AudioUtils.d.ts.map +1 -0
  396. package/dist/src/core/utils/AudioUtils.js +188 -0
  397. package/dist/src/core/utils/AudioUtils.js.map +1 -0
  398. package/dist/src/core/utils/LanguageDetector.d.ts +52 -0
  399. package/dist/src/core/utils/LanguageDetector.d.ts.map +1 -0
  400. package/dist/src/core/utils/LanguageDetector.js +173 -0
  401. package/dist/src/core/utils/LanguageDetector.js.map +1 -0
  402. package/dist/src/demo/cli-demo.d.ts +2 -0
  403. package/dist/src/demo/cli-demo.d.ts.map +1 -0
  404. package/dist/src/demo/cli-demo.js +146 -0
  405. package/dist/src/demo/cli-demo.js.map +1 -0
  406. package/dist/src/demo/console-chat.d.ts +2 -0
  407. package/dist/src/demo/console-chat.d.ts.map +1 -0
  408. package/dist/src/demo/console-chat.js +148 -0
  409. package/dist/src/demo/console-chat.js.map +1 -0
  410. package/dist/src/index.d.ts +27 -0
  411. package/dist/src/index.d.ts.map +1 -0
  412. package/dist/src/index.js +78 -0
  413. package/dist/src/index.js.map +1 -0
  414. package/dist/src/interfaces.d.ts +663 -0
  415. package/dist/src/interfaces.d.ts.map +1 -0
  416. package/dist/src/interfaces.js +36 -0
  417. package/dist/src/interfaces.js.map +1 -0
  418. package/dist/src/orchestrator/Orchestrator.d.ts +62 -0
  419. package/dist/src/orchestrator/Orchestrator.d.ts.map +1 -0
  420. package/dist/src/orchestrator/Orchestrator.js +697 -0
  421. package/dist/src/orchestrator/Orchestrator.js.map +1 -0
  422. package/dist/src/scripts/debug-redis.d.ts +2 -0
  423. package/dist/src/scripts/debug-redis.d.ts.map +1 -0
  424. package/dist/src/scripts/debug-redis.js +55 -0
  425. package/dist/src/scripts/debug-redis.js.map +1 -0
  426. package/dist/src/scripts/seed-collaborative-intents.d.ts +2 -0
  427. package/dist/src/scripts/seed-collaborative-intents.d.ts.map +1 -0
  428. package/dist/src/scripts/seed-collaborative-intents.js +90 -0
  429. package/dist/src/scripts/seed-collaborative-intents.js.map +1 -0
  430. package/dist/src/scripts/test-isolated-config.d.ts +2 -0
  431. package/dist/src/scripts/test-isolated-config.d.ts.map +1 -0
  432. package/dist/src/scripts/test-isolated-config.js +80 -0
  433. package/dist/src/scripts/test-isolated-config.js.map +1 -0
  434. package/dist/src/scripts/verify_memory_intents.d.ts +2 -0
  435. package/dist/src/scripts/verify_memory_intents.d.ts.map +1 -0
  436. package/dist/src/scripts/verify_memory_intents.js +45 -0
  437. package/dist/src/scripts/verify_memory_intents.js.map +1 -0
  438. package/dist/src/scripts/verify_redis_intents.d.ts +2 -0
  439. package/dist/src/scripts/verify_redis_intents.d.ts.map +1 -0
  440. package/dist/src/scripts/verify_redis_intents.js +52 -0
  441. package/dist/src/scripts/verify_redis_intents.js.map +1 -0
  442. package/dist/src/server/ChatFlowWebSocketServer.d.ts +42 -0
  443. package/dist/src/server/ChatFlowWebSocketServer.d.ts.map +1 -0
  444. package/dist/src/server/ChatFlowWebSocketServer.js +355 -0
  445. package/dist/src/server/ChatFlowWebSocketServer.js.map +1 -0
  446. package/dist/src/utils/crypto.d.ts +7 -0
  447. package/dist/src/utils/crypto.d.ts.map +1 -0
  448. package/dist/src/utils/crypto.js +35 -0
  449. package/dist/src/utils/crypto.js.map +1 -0
  450. package/dist/src/utils/encryption-helpers.d.ts +14 -0
  451. package/dist/src/utils/encryption-helpers.d.ts.map +1 -0
  452. package/dist/src/utils/encryption-helpers.js +49 -0
  453. package/dist/src/utils/encryption-helpers.js.map +1 -0
  454. package/dist/utils/crypto.d.ts +7 -0
  455. package/dist/utils/crypto.d.ts.map +1 -0
  456. package/dist/utils/crypto.js +35 -0
  457. package/dist/utils/crypto.js.map +1 -0
  458. package/dist/utils/encryption-helpers.d.ts +14 -0
  459. package/dist/utils/encryption-helpers.d.ts.map +1 -0
  460. package/dist/utils/encryption-helpers.js +49 -0
  461. package/dist/utils/encryption-helpers.js.map +1 -0
  462. package/dist/web/seed-demo-data.d.ts +2 -0
  463. package/dist/web/seed-demo-data.d.ts.map +1 -0
  464. package/dist/web/seed-demo-data.js +267 -0
  465. package/dist/web/seed-demo-data.js.map +1 -0
  466. package/dist/web/web-server.d.ts +2 -0
  467. package/dist/web/web-server.d.ts.map +1 -0
  468. package/dist/web/web-server.js +165 -0
  469. package/dist/web/web-server.js.map +1 -0
  470. package/package.json +32 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeminiMultimodalLiveAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/GeminiMultimodalLiveAdapter.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,2BAA2B;IAMpC,YAAY,MAAc,EAAE,WAAyB;QAF7C,gBAAW,GAAY,KAAK,CAAC;QAGjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,EAAE,CAAC;QACnB,CAAC;QAED,4CAA4C;QAC5C,MAAM,KAAK,GAAG,6HAA6H,IAAI,CAAC,MAAM,EAAE,CAAC;QAEzJ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;YAE/B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAExB,6BAA6B;gBAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAElB,OAAO,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;YACtB,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;gBACxB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;gBACnB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBACxD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7B,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG;YACX,KAAK,EAAE;gBACH,KAAK,EAAE,6BAA6B;gBACpC,gBAAgB,EAAE;oBACd,kBAAkB,EAAE,CAAC,OAAO,CAAC;oBAC7B,YAAY,EAAE;wBACV,WAAW,EAAE;4BACT,mBAAmB,EAAE;gCACjB,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,IAAI,MAAM;6BACpD;yBACJ;qBACJ;iBACJ;aACJ;SACJ,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,WAAmB;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG;YACZ,aAAa,EAAE;gBACX,WAAW,EAAE,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,QAAQ,EAAE,WAAW;qBACxB,CAAC;aACL;SACJ,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,QAID;QACN,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEpC,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;oBAEjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAQ;4BAClB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,KAAK;yBACpD,CAAC;wBAEF,eAAe;wBACf,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;4BACZ,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;wBAC9B,CAAC;wBAED,gBAAgB;wBAChB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;4BACxB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;4BACzC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CACrC,CAAC;wBACN,CAAC;wBAED,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACvB,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,UAAU;QACN,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC7B,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,MAA2B;QAC/D,MAAM,IAAI,KAAK,CACX,qDAAqD;YACrD,2DAA2D,CAC9D,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAA2B;QACxD,MAAM,IAAI,KAAK,CACX,qDAAqD;YACrD,2DAA2D,CAC9D,CAAC;IACN,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;;OAEG;IACH,mBAAmB;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY;QACR,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;CACJ;AA3MD,kEA2MC"}
@@ -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":"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"}
@@ -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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"}