chat-flow-ardymalihi 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/package.json +1 -1
  2. package/dist/adapters/db/InMemorySessionRepository.js +0 -15
  3. package/dist/adapters/db/RedisSessionRepository.js +0 -41
  4. package/dist/adapters/intent/IntentMatcher.d.ts +0 -41
  5. package/dist/adapters/intent/IntentMatcher.d.ts.map +0 -1
  6. package/dist/adapters/intent/IntentMatcher.js +0 -167
  7. package/dist/adapters/intent/IntentMatcher.js.map +0 -1
  8. package/dist/adapters/intent/IntentService.d.ts +0 -26
  9. package/dist/adapters/intent/IntentService.d.ts.map +0 -1
  10. package/dist/adapters/intent/IntentService.js +0 -65
  11. package/dist/adapters/intent/IntentService.js.map +0 -1
  12. package/dist/adapters/intent/MockIntentAdapter.js +0 -29
  13. package/dist/adapters/intent/MockIntentService.d.ts +0 -7
  14. package/dist/adapters/intent/MockIntentService.d.ts.map +0 -1
  15. package/dist/adapters/intent/MockIntentService.js +0 -36
  16. package/dist/adapters/intent/MockIntentService.js.map +0 -1
  17. package/dist/adapters/llm/GeminiLLMAdapter.d.ts +0 -10
  18. package/dist/adapters/llm/GeminiLLMAdapter.d.ts.map +0 -1
  19. package/dist/adapters/llm/GeminiLLMAdapter.js +0 -102
  20. package/dist/adapters/llm/GeminiLLMAdapter.js.map +0 -1
  21. package/dist/adapters/llm/MockLLMAdapter.d.ts +0 -5
  22. package/dist/adapters/llm/MockLLMAdapter.d.ts.map +0 -1
  23. package/dist/adapters/llm/MockLLMAdapter.js +0 -31
  24. package/dist/adapters/llm/MockLLMAdapter.js.map +0 -1
  25. package/dist/adapters/llm/OllamaLLMAdapter.d.ts +0 -9
  26. package/dist/adapters/llm/OllamaLLMAdapter.d.ts.map +0 -1
  27. package/dist/adapters/llm/OllamaLLMAdapter.js +0 -74
  28. package/dist/adapters/llm/OllamaLLMAdapter.js.map +0 -1
  29. package/dist/adapters/logger/ConsoleLogger.d.ts +0 -12
  30. package/dist/adapters/logger/ConsoleLogger.d.ts.map +0 -1
  31. package/dist/adapters/logger/ConsoleLogger.js +0 -37
  32. package/dist/adapters/logger/ConsoleLogger.js.map +0 -1
  33. package/dist/adapters/memory/InMemorySessionRepository.js +0 -15
  34. package/dist/adapters/redis/RedisSessionRepository.js +0 -41
  35. package/dist/adapters/repository/InMemoryRepository.d.ts +0 -46
  36. package/dist/adapters/repository/InMemoryRepository.d.ts.map +0 -1
  37. package/dist/adapters/repository/InMemoryRepository.js +0 -235
  38. package/dist/adapters/repository/InMemoryRepository.js.map +0 -1
  39. package/dist/adapters/repository/IntentRepository.d.ts +0 -15
  40. package/dist/adapters/repository/IntentRepository.d.ts.map +0 -1
  41. package/dist/adapters/repository/IntentRepository.js +0 -28
  42. package/dist/adapters/repository/IntentRepository.js.map +0 -1
  43. package/dist/adapters/repository/RedisRepository.d.ts +0 -63
  44. package/dist/adapters/repository/RedisRepository.d.ts.map +0 -1
  45. package/dist/adapters/repository/RedisRepository.js +0 -586
  46. package/dist/adapters/repository/RedisRepository.js.map +0 -1
  47. package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts +0 -33
  48. package/dist/adapters/storage/RedisAudioStorageAdapter.d.ts.map +0 -1
  49. package/dist/adapters/storage/RedisAudioStorageAdapter.js +0 -121
  50. package/dist/adapters/storage/RedisAudioStorageAdapter.js.map +0 -1
  51. package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts +0 -14
  52. package/dist/adapters/storage/RedisBufferStorageAdapter.d.ts.map +0 -1
  53. package/dist/adapters/storage/RedisBufferStorageAdapter.js +0 -94
  54. package/dist/adapters/storage/RedisBufferStorageAdapter.js.map +0 -1
  55. package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts +0 -29
  56. package/dist/adapters/voice/ElevenLabsVoiceAdapter.d.ts.map +0 -1
  57. package/dist/adapters/voice/ElevenLabsVoiceAdapter.js +0 -75
  58. package/dist/adapters/voice/ElevenLabsVoiceAdapter.js.map +0 -1
  59. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts +0 -77
  60. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.d.ts.map +0 -1
  61. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js +0 -187
  62. package/dist/adapters/voice/GeminiMultimodalLiveAdapter.js.map +0 -1
  63. package/dist/adapters/voice/GeminiVoiceAdapter.d.ts +0 -36
  64. package/dist/adapters/voice/GeminiVoiceAdapter.d.ts.map +0 -1
  65. package/dist/adapters/voice/GeminiVoiceAdapter.js +0 -134
  66. package/dist/adapters/voice/GeminiVoiceAdapter.js.map +0 -1
  67. package/dist/adapters/voice/GoogleTTSAdapter.d.ts +0 -61
  68. package/dist/adapters/voice/GoogleTTSAdapter.d.ts.map +0 -1
  69. package/dist/adapters/voice/GoogleTTSAdapter.js +0 -165
  70. package/dist/adapters/voice/GoogleTTSAdapter.js.map +0 -1
  71. package/dist/adapters/voice/GoogleVoiceAdapter.d.ts +0 -33
  72. package/dist/adapters/voice/GoogleVoiceAdapter.d.ts.map +0 -1
  73. package/dist/adapters/voice/GoogleVoiceAdapter.js +0 -155
  74. package/dist/adapters/voice/GoogleVoiceAdapter.js.map +0 -1
  75. package/dist/adapters/voice/HybridVoiceAdapter.d.ts +0 -54
  76. package/dist/adapters/voice/HybridVoiceAdapter.d.ts.map +0 -1
  77. package/dist/adapters/voice/HybridVoiceAdapter.js +0 -102
  78. package/dist/adapters/voice/HybridVoiceAdapter.js.map +0 -1
  79. package/dist/adapters/voice/LanguageVoiceMapper.d.ts +0 -60
  80. package/dist/adapters/voice/LanguageVoiceMapper.d.ts.map +0 -1
  81. package/dist/adapters/voice/LanguageVoiceMapper.js +0 -130
  82. package/dist/adapters/voice/LanguageVoiceMapper.js.map +0 -1
  83. package/dist/adapters/voice/VertexVoiceAdapter.d.ts +0 -32
  84. package/dist/adapters/voice/VertexVoiceAdapter.d.ts.map +0 -1
  85. package/dist/adapters/voice/VertexVoiceAdapter.js +0 -179
  86. package/dist/adapters/voice/VertexVoiceAdapter.js.map +0 -1
  87. package/dist/adapters/webhook/WebhookService.d.ts +0 -47
  88. package/dist/adapters/webhook/WebhookService.d.ts.map +0 -1
  89. package/dist/adapters/webhook/WebhookService.js +0 -265
  90. package/dist/adapters/webhook/WebhookService.js.map +0 -1
  91. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts +0 -5
  92. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +0 -1
  93. package/dist/adapters/workflow/MockWorkflowAdapter.js +0 -173
  94. package/dist/adapters/workflow/MockWorkflowAdapter.js.map +0 -1
  95. package/dist/adapters/workflow/WorkflowAdapter.d.ts +0 -55
  96. package/dist/adapters/workflow/WorkflowAdapter.d.ts.map +0 -1
  97. package/dist/adapters/workflow/WorkflowAdapter.js +0 -242
  98. package/dist/adapters/workflow/WorkflowAdapter.js.map +0 -1
  99. package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts +0 -10
  100. package/dist/adapters/workflow/actions/getSupportHoursAction.d.ts.map +0 -1
  101. package/dist/adapters/workflow/actions/getSupportHoursAction.js +0 -33
  102. package/dist/adapters/workflow/actions/getSupportHoursAction.js.map +0 -1
  103. package/dist/adapters/workflow/actions/index.d.ts +0 -6
  104. package/dist/adapters/workflow/actions/index.d.ts.map +0 -1
  105. package/dist/adapters/workflow/actions/index.js +0 -22
  106. package/dist/adapters/workflow/actions/index.js.map +0 -1
  107. package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts +0 -11
  108. package/dist/adapters/workflow/actions/pushOutputResultAction.d.ts.map +0 -1
  109. package/dist/adapters/workflow/actions/pushOutputResultAction.js +0 -31
  110. package/dist/adapters/workflow/actions/pushOutputResultAction.js.map +0 -1
  111. package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts +0 -12
  112. package/dist/adapters/workflow/actions/setWorkflowMessageAction.d.ts.map +0 -1
  113. package/dist/adapters/workflow/actions/setWorkflowMessageAction.js +0 -32
  114. package/dist/adapters/workflow/actions/setWorkflowMessageAction.js.map +0 -1
  115. package/dist/adapters/workflow/engine/constants.d.ts +0 -3
  116. package/dist/adapters/workflow/engine/constants.d.ts.map +0 -1
  117. package/dist/adapters/workflow/engine/constants.js +0 -6
  118. package/dist/adapters/workflow/engine/constants.js.map +0 -1
  119. package/dist/adapters/workflow/engine/engine.d.ts +0 -32
  120. package/dist/adapters/workflow/engine/engine.d.ts.map +0 -1
  121. package/dist/adapters/workflow/engine/engine.js +0 -623
  122. package/dist/adapters/workflow/engine/engine.js.map +0 -1
  123. package/dist/adapters/workflow/engine/event-registry.d.ts +0 -12
  124. package/dist/adapters/workflow/engine/event-registry.d.ts.map +0 -1
  125. package/dist/adapters/workflow/engine/event-registry.js +0 -33
  126. package/dist/adapters/workflow/engine/event-registry.js.map +0 -1
  127. package/dist/adapters/workflow/engine/interpolator.d.ts +0 -11
  128. package/dist/adapters/workflow/engine/interpolator.d.ts.map +0 -1
  129. package/dist/adapters/workflow/engine/interpolator.js +0 -93
  130. package/dist/adapters/workflow/engine/interpolator.js.map +0 -1
  131. package/dist/adapters/workflow/engine/registry.d.ts +0 -12
  132. package/dist/adapters/workflow/engine/registry.d.ts.map +0 -1
  133. package/dist/adapters/workflow/engine/registry.js +0 -39
  134. package/dist/adapters/workflow/engine/registry.js.map +0 -1
  135. package/dist/adapters/workflow/engine/template-registry.d.ts +0 -60
  136. package/dist/adapters/workflow/engine/template-registry.d.ts.map +0 -1
  137. package/dist/adapters/workflow/engine/template-registry.js +0 -92
  138. package/dist/adapters/workflow/engine/template-registry.js.map +0 -1
  139. package/dist/adapters/workflow/engine/types.d.ts +0 -182
  140. package/dist/adapters/workflow/engine/types.d.ts.map +0 -1
  141. package/dist/adapters/workflow/engine/types.js +0 -3
  142. package/dist/adapters/workflow/engine/types.js.map +0 -1
  143. package/dist/adapters/workflow/engine/utils/format-utils.d.ts +0 -43
  144. package/dist/adapters/workflow/engine/utils/format-utils.d.ts.map +0 -1
  145. package/dist/adapters/workflow/engine/utils/format-utils.js +0 -137
  146. package/dist/adapters/workflow/engine/utils/format-utils.js.map +0 -1
  147. package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts +0 -7
  148. package/dist/adapters/workflow/engine/utils/layout-calculator.d.ts.map +0 -1
  149. package/dist/adapters/workflow/engine/utils/layout-calculator.js +0 -87
  150. package/dist/adapters/workflow/engine/utils/layout-calculator.js.map +0 -1
  151. package/dist/adapters/workflow/engine/utils/slugify.d.ts +0 -2
  152. package/dist/adapters/workflow/engine/utils/slugify.d.ts.map +0 -1
  153. package/dist/adapters/workflow/engine/utils/slugify.js +0 -41
  154. package/dist/adapters/workflow/engine/utils/slugify.js.map +0 -1
  155. package/dist/adapters/workflow/engine/validator.d.ts +0 -9
  156. package/dist/adapters/workflow/engine/validator.d.ts.map +0 -1
  157. package/dist/adapters/workflow/engine/validator.js +0 -425
  158. package/dist/adapters/workflow/engine/validator.js.map +0 -1
  159. package/dist/application/ConversationSession.d.ts +0 -23
  160. package/dist/application/ConversationSession.d.ts.map +0 -1
  161. package/dist/application/ConversationSession.js +0 -83
  162. package/dist/application/ConversationSession.js.map +0 -1
  163. package/dist/application/Message.d.ts +0 -11
  164. package/dist/application/Message.d.ts.map +0 -1
  165. package/dist/application/Message.js +0 -30
  166. package/dist/application/Message.js.map +0 -1
  167. package/dist/application/Orchestrator.d.ts +0 -18
  168. package/dist/application/Orchestrator.d.ts.map +0 -1
  169. package/dist/application/Orchestrator.js +0 -80
  170. package/dist/application/Orchestrator.js.map +0 -1
  171. package/dist/application/SessionState.js +0 -2
  172. package/dist/application/usecases/CreateSession.js +0 -20
  173. package/dist/application/usecases/HandleUserMessage.js +0 -69
  174. package/dist/config/ChatFlowConfig.d.ts +0 -66
  175. package/dist/config/ChatFlowConfig.d.ts.map +0 -1
  176. package/dist/config/ChatFlowConfig.js +0 -54
  177. package/dist/config/ChatFlowConfig.js.map +0 -1
  178. package/dist/config/index.d.ts +0 -2
  179. package/dist/config/index.d.ts.map +0 -1
  180. package/dist/config/index.js +0 -7
  181. package/dist/config/index.js.map +0 -1
  182. package/dist/core/entities/ConversationSession.d.ts +0 -58
  183. package/dist/core/entities/ConversationSession.d.ts.map +0 -1
  184. package/dist/core/entities/ConversationSession.js +0 -160
  185. package/dist/core/entities/ConversationSession.js.map +0 -1
  186. package/dist/core/entities/Message.d.ts +0 -14
  187. package/dist/core/entities/Message.d.ts.map +0 -1
  188. package/dist/core/entities/Message.js +0 -32
  189. package/dist/core/entities/Message.js.map +0 -1
  190. package/dist/core/errors/ChatFlowError.d.ts +0 -71
  191. package/dist/core/errors/ChatFlowError.d.ts.map +0 -1
  192. package/dist/core/errors/ChatFlowError.js +0 -108
  193. package/dist/core/errors/ChatFlowError.js.map +0 -1
  194. package/dist/core/errors/index.d.ts +0 -2
  195. package/dist/core/errors/index.d.ts.map +0 -1
  196. package/dist/core/errors/index.js +0 -15
  197. package/dist/core/errors/index.js.map +0 -1
  198. package/dist/core/utils/AudioStreamBuffer.d.ts +0 -33
  199. package/dist/core/utils/AudioStreamBuffer.d.ts.map +0 -1
  200. package/dist/core/utils/AudioStreamBuffer.js +0 -55
  201. package/dist/core/utils/AudioStreamBuffer.js.map +0 -1
  202. package/dist/core/utils/AudioUtils.d.ts +0 -41
  203. package/dist/core/utils/AudioUtils.d.ts.map +0 -1
  204. package/dist/core/utils/AudioUtils.js +0 -188
  205. package/dist/core/utils/AudioUtils.js.map +0 -1
  206. package/dist/core/utils/LanguageDetector.d.ts +0 -52
  207. package/dist/core/utils/LanguageDetector.d.ts.map +0 -1
  208. package/dist/core/utils/LanguageDetector.js +0 -173
  209. package/dist/core/utils/LanguageDetector.js.map +0 -1
  210. package/dist/core/utils/WavUtils.d.ts +0 -14
  211. package/dist/core/utils/WavUtils.d.ts.map +0 -1
  212. package/dist/core/utils/WavUtils.js +0 -37
  213. package/dist/core/utils/WavUtils.js.map +0 -1
  214. package/dist/db/InMemoryRepository.d.ts +0 -15
  215. package/dist/db/InMemoryRepository.d.ts.map +0 -1
  216. package/dist/db/InMemoryRepository.js +0 -41
  217. package/dist/db/InMemoryRepository.js.map +0 -1
  218. package/dist/db/RedisRepository.d.ts +0 -16
  219. package/dist/db/RedisRepository.d.ts.map +0 -1
  220. package/dist/db/RedisRepository.js +0 -87
  221. package/dist/db/RedisRepository.js.map +0 -1
  222. package/dist/demo/cli-demo.d.ts +0 -2
  223. package/dist/demo/cli-demo.d.ts.map +0 -1
  224. package/dist/demo/cli-demo.js +0 -146
  225. package/dist/demo/cli-demo.js.map +0 -1
  226. package/dist/demo/console-chat.d.ts +0 -2
  227. package/dist/demo/console-chat.d.ts.map +0 -1
  228. package/dist/demo/console-chat.js +0 -148
  229. package/dist/demo/console-chat.js.map +0 -1
  230. package/dist/demo/interactive-voice-chat.d.ts +0 -2
  231. package/dist/demo/interactive-voice-chat.d.ts.map +0 -1
  232. package/dist/demo/interactive-voice-chat.js +0 -180
  233. package/dist/demo/interactive-voice-chat.js.map +0 -1
  234. package/dist/demo/voice-demo.d.ts +0 -2
  235. package/dist/demo/voice-demo.d.ts.map +0 -1
  236. package/dist/demo/voice-demo.js +0 -188
  237. package/dist/demo/voice-demo.js.map +0 -1
  238. package/dist/domain/conversation/ConversationSession.js +0 -82
  239. package/dist/domain/conversation/Message.js +0 -33
  240. package/dist/domain/conversation/SessionState.js +0 -10
  241. package/dist/index.d.ts +0 -26
  242. package/dist/index.d.ts.map +0 -1
  243. package/dist/index.js +0 -76
  244. package/dist/index.js.map +0 -1
  245. package/dist/intent/IntentService.d.ts +0 -17
  246. package/dist/intent/IntentService.d.ts.map +0 -1
  247. package/dist/intent/IntentService.js +0 -57
  248. package/dist/intent/IntentService.js.map +0 -1
  249. package/dist/intent/MockIntentService.d.ts +0 -7
  250. package/dist/intent/MockIntentService.d.ts.map +0 -1
  251. package/dist/intent/MockIntentService.js +0 -36
  252. package/dist/intent/MockIntentService.js.map +0 -1
  253. package/dist/interfaces.d.ts +0 -653
  254. package/dist/interfaces.d.ts.map +0 -1
  255. package/dist/interfaces.js +0 -36
  256. package/dist/interfaces.js.map +0 -1
  257. package/dist/llm/GeminiLLMAdapter.d.ts +0 -10
  258. package/dist/llm/GeminiLLMAdapter.d.ts.map +0 -1
  259. package/dist/llm/GeminiLLMAdapter.js +0 -102
  260. package/dist/llm/GeminiLLMAdapter.js.map +0 -1
  261. package/dist/llm/MockLLMAdapter.d.ts +0 -5
  262. package/dist/llm/MockLLMAdapter.d.ts.map +0 -1
  263. package/dist/llm/MockLLMAdapter.js +0 -31
  264. package/dist/llm/MockLLMAdapter.js.map +0 -1
  265. package/dist/orchestrator/Orchestrator.d.ts +0 -62
  266. package/dist/orchestrator/Orchestrator.d.ts.map +0 -1
  267. package/dist/orchestrator/Orchestrator.js +0 -697
  268. package/dist/orchestrator/Orchestrator.js.map +0 -1
  269. package/dist/ports/IIntentRepository.d.ts +0 -27
  270. package/dist/ports/IIntentRepository.d.ts.map +0 -1
  271. package/dist/ports/IIntentRepository.js +0 -3
  272. package/dist/ports/IIntentRepository.js.map +0 -1
  273. package/dist/ports/IntentPort.js +0 -2
  274. package/dist/ports/LLMPort.js +0 -2
  275. package/dist/ports/SessionRepository.js +0 -2
  276. package/dist/ports/WorkflowPort.js +0 -2
  277. package/dist/scripts/debug-redis.d.ts +0 -2
  278. package/dist/scripts/debug-redis.d.ts.map +0 -1
  279. package/dist/scripts/debug-redis.js +0 -55
  280. package/dist/scripts/debug-redis.js.map +0 -1
  281. package/dist/scripts/seed-collaborative-intents.d.ts +0 -2
  282. package/dist/scripts/seed-collaborative-intents.d.ts.map +0 -1
  283. package/dist/scripts/seed-collaborative-intents.js +0 -90
  284. package/dist/scripts/seed-collaborative-intents.js.map +0 -1
  285. package/dist/scripts/test-isolated-config.d.ts +0 -2
  286. package/dist/scripts/test-isolated-config.d.ts.map +0 -1
  287. package/dist/scripts/test-isolated-config.js +0 -80
  288. package/dist/scripts/test-isolated-config.js.map +0 -1
  289. package/dist/scripts/verify_memory_intents.d.ts +0 -2
  290. package/dist/scripts/verify_memory_intents.d.ts.map +0 -1
  291. package/dist/scripts/verify_memory_intents.js +0 -45
  292. package/dist/scripts/verify_memory_intents.js.map +0 -1
  293. package/dist/scripts/verify_redis_intents.d.ts +0 -2
  294. package/dist/scripts/verify_redis_intents.d.ts.map +0 -1
  295. package/dist/scripts/verify_redis_intents.js +0 -52
  296. package/dist/scripts/verify_redis_intents.js.map +0 -1
  297. package/dist/server/ChatFlowWebSocketServer.d.ts +0 -46
  298. package/dist/server/ChatFlowWebSocketServer.d.ts.map +0 -1
  299. package/dist/server/ChatFlowWebSocketServer.js +0 -344
  300. package/dist/server/ChatFlowWebSocketServer.js.map +0 -1
  301. package/dist/server/realtime-voice-server.d.ts +0 -2
  302. package/dist/server/realtime-voice-server.d.ts.map +0 -1
  303. package/dist/server/realtime-voice-server.js +0 -627
  304. package/dist/server/realtime-voice-server.js.map +0 -1
  305. package/dist/src/api/routes/tenants.d.ts +0 -3
  306. package/dist/src/api/routes/tenants.d.ts.map +0 -1
  307. package/dist/src/api/routes/tenants.js +0 -109
  308. package/dist/src/api/routes/tenants.js.map +0 -1
  309. package/dist/utils/crypto.d.ts +0 -7
  310. package/dist/utils/crypto.d.ts.map +0 -1
  311. package/dist/utils/crypto.js +0 -35
  312. package/dist/utils/crypto.js.map +0 -1
  313. package/dist/utils/encryption-helpers.d.ts +0 -14
  314. package/dist/utils/encryption-helpers.d.ts.map +0 -1
  315. package/dist/utils/encryption-helpers.js +0 -49
  316. package/dist/utils/encryption-helpers.js.map +0 -1
  317. package/dist/verify_memory_intents.js +0 -44
  318. package/dist/verify_redis_intents.js +0 -49
  319. package/dist/workflow/MockWorkflowAdapter.d.ts +0 -5
  320. package/dist/workflow/MockWorkflowAdapter.d.ts.map +0 -1
  321. package/dist/workflow/MockWorkflowAdapter.js +0 -162
  322. package/dist/workflow/MockWorkflowAdapter.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedisAudioStorageAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/storage/RedisAudioStorageAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGtE;;;;;GAKG;AACH,qBAAa,wBAAyB,YAAW,aAAa;IAC1D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,WAAW,EAAE,KAAK,EAAE,WAAW,GAAE,MAA6B,EAAE,OAAO,GAAE,MAAsB;IAW3G,OAAO,CAAC,WAAW;IAIb,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxE;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5G;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBzD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS5D;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAenE"}
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.RedisAudioStorageAdapter = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- const AudioUtils_1 = require("../../core/utils/AudioUtils");
40
- /**
41
- * Redis Audio Storage Adapter
42
- * Stores audio recordings in Redis with automatic format conversion
43
- * All audio is normalized to LINEAR16 PCM (16kHz, mono, 16-bit) during storage
44
- * Final playback generates a proper WAV file with headers
45
- */
46
- class RedisAudioStorageAdapter {
47
- constructor(redisClient, storageRoot = 'storage/recordings', baseUrl = '/recordings') {
48
- this.redis = redisClient;
49
- this.storageRoot = path.resolve(storageRoot);
50
- this.baseUrl = baseUrl;
51
- // Ensure storage directory exists (for potential future disk caching)
52
- if (!fs.existsSync(this.storageRoot)) {
53
- fs.mkdirSync(this.storageRoot, { recursive: true });
54
- }
55
- }
56
- getRedisKey(sessionId) {
57
- return `session:${sessionId}:audio`;
58
- }
59
- async initializeSession(sessionId, metadata) {
60
- // Clear any existing audio for this session
61
- await this.redis.del(this.getRedisKey(sessionId));
62
- }
63
- /**
64
- * Append audio chunk with automatic format conversion to PCM
65
- */
66
- async appendAudio(sessionId, audioData, formatMetadata) {
67
- try {
68
- // Convert to target PCM format using AudioUtils
69
- const pcmData = await (0, AudioUtils_1.convertToTargetFormat)(audioData, formatMetadata);
70
- // Store as base64 in Redis
71
- await this.redis.rpush(this.getRedisKey(sessionId), pcmData.toString('base64'));
72
- }
73
- catch (error) {
74
- console.error('[RedisAudioStorageAdapter] Error appending audio:', error);
75
- throw error;
76
- }
77
- }
78
- /**
79
- * Finalize session and return audio URL
80
- */
81
- async finalizeSession(sessionId) {
82
- const key = this.getRedisKey(sessionId);
83
- const exists = await this.redis.exists(key);
84
- if (!exists) {
85
- console.warn(`[RedisAudioStorageAdapter] No audio found for session ${sessionId}`);
86
- return '';
87
- }
88
- // Set TTL (24 hours)
89
- await this.redis.expire(key, 86400);
90
- // Return URL for playback
91
- return `${this.baseUrl}/${sessionId}.wav`;
92
- }
93
- /**
94
- * Get audio URL for a session
95
- */
96
- async getAudioUrl(sessionId) {
97
- const key = this.getRedisKey(sessionId);
98
- const exists = await this.redis.exists(key);
99
- if (exists) {
100
- return `${this.baseUrl}/${sessionId}.wav`;
101
- }
102
- return null;
103
- }
104
- /**
105
- * Get session audio as a complete WAV file
106
- */
107
- async getSessionAudio(sessionId) {
108
- const key = this.getRedisKey(sessionId);
109
- const chunksBase64 = await this.redis.lrange(key, 0, -1);
110
- if (!chunksBase64 || chunksBase64.length === 0) {
111
- return null;
112
- }
113
- // Decode all PCM chunks
114
- const pcmChunks = chunksBase64.map(chunk => Buffer.from(chunk, 'base64'));
115
- const concatenatedPCM = Buffer.concat(pcmChunks);
116
- // Wrap in WAV format using AudioUtils
117
- return (0, AudioUtils_1.wrapPCMInWAV)(concatenatedPCM);
118
- }
119
- }
120
- exports.RedisAudioStorageAdapter = RedisAudioStorageAdapter;
121
- //# sourceMappingURL=RedisAudioStorageAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedisAudioStorageAdapter.js","sourceRoot":"","sources":["../../../src/adapters/storage/RedisAudioStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { IStorage } from '../../interfaces';
2
- import Redis from 'ioredis';
3
- export declare class RedisBufferStorageAdapter implements IStorage {
4
- private redis;
5
- private storageRoot;
6
- private baseUrl;
7
- constructor(redisClient: Redis, storageRoot?: string, baseUrl?: string);
8
- private getRedisKey;
9
- initializeSession(sessionId: string, metadata: any): Promise<void>;
10
- appendAudio(sessionId: string, audioData: Buffer): Promise<void>;
11
- finalizeSession(sessionId: string): Promise<string>;
12
- getAudioUrl(sessionId: string): Promise<string | null>;
13
- }
14
- //# sourceMappingURL=RedisBufferStorageAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedisBufferStorageAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/storage/RedisBufferStorageAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,SAAS,CAAC;AAI5B,qBAAa,yBAA0B,YAAW,QAAQ;IACtD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,WAAW,EAAE,KAAK,EAAE,WAAW,GAAE,MAA6B,EAAE,OAAO,GAAE,MAA2C;IAWhI,OAAO,CAAC,WAAW;IAIb,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BnD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAQ/D"}
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.RedisBufferStorageAdapter = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
- class RedisBufferStorageAdapter {
40
- constructor(redisClient, storageRoot = 'storage/recordings', baseUrl = 'http://localhost:8080/recordings') {
41
- this.redis = redisClient;
42
- this.storageRoot = path.resolve(storageRoot);
43
- this.baseUrl = baseUrl;
44
- // Ensure storage directory exists
45
- if (!fs.existsSync(this.storageRoot)) {
46
- fs.mkdirSync(this.storageRoot, { recursive: true });
47
- }
48
- }
49
- getRedisKey(sessionId) {
50
- return `session:${sessionId}:audio`;
51
- }
52
- async initializeSession(sessionId, metadata) {
53
- // Optional: Store metadata in Redis if needed, or simply clear any existing list
54
- await this.redis.del(this.getRedisKey(sessionId));
55
- }
56
- async appendAudio(sessionId, audioData) {
57
- // Redis stores binary as Buffer if configured, but ioredis default is strings.
58
- // We need to encode to base64 or ensure binary mode.
59
- // For safety and compatibility, we'll store as base64 strings in the list.
60
- await this.redis.rpush(this.getRedisKey(sessionId), audioData.toString('base64'));
61
- }
62
- async finalizeSession(sessionId) {
63
- const key = this.getRedisKey(sessionId);
64
- // 1. Retrieve all chunks
65
- const chunksBase64 = await this.redis.lrange(key, 0, -1);
66
- if (!chunksBase64 || chunksBase64.length === 0) {
67
- console.warn(`[Storage] No audio chunks found for session ${sessionId}`);
68
- return '';
69
- }
70
- // 2. Decode and Concatenate
71
- const buffers = chunksBase64.map(chunk => Buffer.from(chunk, 'base64'));
72
- const finalBuffer = Buffer.concat(buffers);
73
- // 3. Write to Disk (Simulating Bucket Upload)
74
- const filename = `${sessionId}.wav`; // Assuming linear PCM / WAV chunks (even if headers are partial, concatenation of raw PCM is cleaner, but let's assume we are just saving the raw accumulation for now)
75
- const filePath = path.join(this.storageRoot, filename);
76
- await fs.promises.writeFile(filePath, finalBuffer);
77
- console.log(`[Storage] Saved ${finalBuffer.length} bytes to ${filePath}`);
78
- // 4. Cleanup Redis
79
- await this.redis.del(key);
80
- // Optional: expire generic session keys if needed
81
- // 5. Return URL
82
- return `${this.baseUrl}/${filename}`;
83
- }
84
- async getAudioUrl(sessionId) {
85
- const filename = `${sessionId}.wav`;
86
- const filePath = path.join(this.storageRoot, filename);
87
- if (fs.existsSync(filePath)) {
88
- return `${this.baseUrl}/${filename}`;
89
- }
90
- return null;
91
- }
92
- }
93
- exports.RedisBufferStorageAdapter = RedisBufferStorageAdapter;
94
- //# sourceMappingURL=RedisBufferStorageAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedisBufferStorageAdapter.js","sourceRoot":"","sources":["../../../src/adapters/storage/RedisBufferStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
2
- /**
3
- * ElevenLabs Voice Adapter
4
- * Implements TTS using ElevenLabs API (free tier: 10,000 chars/month)
5
- * Note: This adapter only implements TTS. Use GeminiVoiceAdapter for STT.
6
- */
7
- export declare class ElevenLabsVoiceAdapter implements IVoiceAdapter {
8
- private apiKey;
9
- private voiceConfig?;
10
- constructor(apiKey: string, voiceConfig?: VoiceConfig);
11
- /**
12
- * Speech-to-text not supported by ElevenLabs
13
- * Use GeminiVoiceAdapter or another provider for STT
14
- */
15
- speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
16
- /**
17
- * Convert text to speech using ElevenLabs API
18
- * @param text Text to convert to speech
19
- * @param config Optional TTS configuration
20
- * @returns Audio data as Uint8Array (WAV format)
21
- */
22
- textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
23
- /**
24
- * Declare the audio format produced by ElevenLabs TTS
25
- * Used by IAudioStorage for format conversion
26
- */
27
- getTTSOutputFormat(): AudioFormatMetadata;
28
- }
29
- //# sourceMappingURL=ElevenLabsVoiceAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElevenLabsVoiceAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/ElevenLabsVoiceAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnF;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,aAAa;IACxD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;gBAEtB,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAwClF;;;OAGG;IACH,kBAAkB,IAAI,mBAAmB;CAQ5C"}
@@ -1,75 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ElevenLabsVoiceAdapter = void 0;
4
- /**
5
- * ElevenLabs Voice Adapter
6
- * Implements TTS using ElevenLabs API (free tier: 10,000 chars/month)
7
- * Note: This adapter only implements TTS. Use GeminiVoiceAdapter for STT.
8
- */
9
- class ElevenLabsVoiceAdapter {
10
- constructor(apiKey, voiceConfig) {
11
- this.apiKey = apiKey;
12
- this.voiceConfig = voiceConfig;
13
- }
14
- /**
15
- * Speech-to-text not supported by ElevenLabs
16
- * Use GeminiVoiceAdapter or another provider for STT
17
- */
18
- async speechToText(audioBase64, config) {
19
- throw new Error('ElevenLabs does not support speech-to-text. Use GeminiVoiceAdapter or another provider for STT.');
20
- }
21
- /**
22
- * Convert text to speech using ElevenLabs API
23
- * @param text Text to convert to speech
24
- * @param config Optional TTS configuration
25
- * @returns Audio data as Uint8Array (WAV format)
26
- */
27
- async textToSpeech(text, config) {
28
- const ttsConfig = config || this.voiceConfig?.tts;
29
- // Default to Rachel voice (female, multilingual, free tier compatible)
30
- const voiceId = ttsConfig?.voice || '21m00Tcm4TlvDq8ikWAM';
31
- try {
32
- const response = await fetch(`https://api.elevenlabs.io/v1/text-to-speech/${voiceId}`, {
33
- method: 'POST',
34
- headers: {
35
- 'Accept': 'audio/wav', // Changed from audio/mpeg to audio/wav for better compatibility
36
- 'Content-Type': 'application/json',
37
- 'xi-api-key': this.apiKey
38
- },
39
- body: JSON.stringify({
40
- text,
41
- model_id: 'eleven_turbo_v2_5', // Free tier compatible model
42
- voice_settings: {
43
- stability: 0.5,
44
- similarity_boost: 0.5
45
- }
46
- })
47
- });
48
- if (!response.ok) {
49
- const errorText = await response.text();
50
- throw new Error(`ElevenLabs TTS API Error: ${response.status} - ${errorText}`);
51
- }
52
- // ElevenLabs returns audio directly as binary
53
- const audioBuffer = await response.arrayBuffer();
54
- return new Uint8Array(audioBuffer);
55
- }
56
- catch (error) {
57
- console.error('Text-to-Speech Error:', error);
58
- throw new Error(`TTS failed: ${error.message}`);
59
- }
60
- }
61
- /**
62
- * Declare the audio format produced by ElevenLabs TTS
63
- * Used by IAudioStorage for format conversion
64
- */
65
- getTTSOutputFormat() {
66
- return {
67
- format: 'wav', // Changed from 'mp3' to 'wav'
68
- sampleRate: 44100, // ElevenLabs WAV output is 44.1kHz
69
- channels: 1,
70
- bitDepth: 16
71
- };
72
- }
73
- }
74
- exports.ElevenLabsVoiceAdapter = ElevenLabsVoiceAdapter;
75
- //# sourceMappingURL=ElevenLabsVoiceAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElevenLabsVoiceAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/ElevenLabsVoiceAdapter.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,MAAa,sBAAsB;IAI/B,YAAY,MAAc,EAAE,WAAyB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,MAA2B;QAC/D,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;IACvH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAA2B;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;QAClD,uEAAuE;QACvE,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,IAAI,sBAAsB,CAAC;QAE3D,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CACxB,+CAA+C,OAAO,EAAE,EACxD;gBACI,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,QAAQ,EAAE,WAAW,EAAG,gEAAgE;oBACxF,cAAc,EAAE,kBAAkB;oBAClC,YAAY,EAAE,IAAI,CAAC,MAAM;iBAC5B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,IAAI;oBACJ,QAAQ,EAAE,mBAAmB,EAAE,6BAA6B;oBAC5D,cAAc,EAAE;wBACZ,SAAS,EAAE,GAAG;wBACd,gBAAgB,EAAE,GAAG;qBACxB;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,6BAA6B,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,8CAA8C;YAC9C,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QACvC,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,EAAO,8BAA8B;YAClD,UAAU,EAAE,KAAK,EAAG,mCAAmC;YACvD,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;SACf,CAAC;IACN,CAAC;CACJ;AA3ED,wDA2EC"}
@@ -1,77 +0,0 @@
1
- import { IVoiceAdapter, VoiceConfig, AudioFormatMetadata } from '../../interfaces';
2
- /**
3
- * Gemini Multimodal Live Adapter
4
- *
5
- * Real-time voice adapter using Gemini's Multimodal Live API.
6
- * Provides bidirectional streaming for STT + LLM + TTS in a single connection.
7
- *
8
- * Features:
9
- * - Real-time speech-to-text
10
- * - Streaming LLM responses
11
- * - Real-time text-to-speech
12
- * - Low latency (<500ms)
13
- * - Interruption handling
14
- *
15
- * Cost: ~$0.006/minute (all-inclusive)
16
- *
17
- * Note: This adapter is designed for WebSocket-based real-time streaming.
18
- * For batch/turn-based conversations, use GeminiVoiceAdapter instead.
19
- */
20
- export declare class GeminiMultimodalLiveAdapter implements IVoiceAdapter {
21
- private apiKey;
22
- private voiceConfig?;
23
- private ws?;
24
- private isConnected;
25
- constructor(apiKey: string, voiceConfig?: VoiceConfig);
26
- /**
27
- * Connect to Gemini Multimodal Live API
28
- * Returns a WebSocket connection for bidirectional streaming
29
- */
30
- connect(): Promise<WebSocket>;
31
- /**
32
- * Send configuration to Gemini
33
- */
34
- private sendConfig;
35
- /**
36
- * Send audio chunk to Gemini for processing
37
- * @param audioBase64 Base64-encoded audio data
38
- */
39
- sendAudio(audioBase64: string): Promise<void>;
40
- /**
41
- * Register callback for receiving responses from Gemini
42
- * @param callback Function to handle responses (text + audio)
43
- */
44
- onResponse(callback: (response: {
45
- text?: string;
46
- audio?: Uint8Array;
47
- isFinal: boolean;
48
- }) => void): void;
49
- /**
50
- * Disconnect from Gemini
51
- */
52
- disconnect(): void;
53
- /**
54
- * Speech-to-text (not used in real-time mode)
55
- * Use sendAudio() and onResponse() instead for real-time streaming
56
- */
57
- speechToText(audioBase64: string, config?: VoiceConfig['stt']): Promise<string>;
58
- /**
59
- * Text-to-speech (not used in real-time mode)
60
- * Use sendAudio() and onResponse() instead for real-time streaming
61
- */
62
- textToSpeech(text: string, config?: VoiceConfig['tts']): Promise<Uint8Array>;
63
- /**
64
- * Get TTS output format metadata
65
- * This adapter outputs PCM audio at 24kHz mono
66
- */
67
- getTTSOutputFormat(): AudioFormatMetadata;
68
- /**
69
- * Check if connected to Gemini
70
- */
71
- isConnectedToGemini(): boolean;
72
- /**
73
- * Get the underlying WebSocket connection
74
- */
75
- getWebSocket(): WebSocket | undefined;
76
- }
77
- //# sourceMappingURL=GeminiMultimodalLiveAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GeminiMultimodalLiveAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/voice/GeminiMultimodalLiveAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,2BAA4B,YAAW,aAAa;IAC7D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;IAKrD;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;IAkCnC;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;;OAGG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;KACpB,KAAK,IAAI,GAAG,IAAI;IAuCjB;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrF;;;OAGG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAOlF;;;OAGG;IACH,kBAAkB,IAAI,mBAAmB;IASzC;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;CAGxC"}
@@ -1,187 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GeminiMultimodalLiveAdapter = void 0;
4
- /**
5
- * Gemini Multimodal Live Adapter
6
- *
7
- * Real-time voice adapter using Gemini's Multimodal Live API.
8
- * Provides bidirectional streaming for STT + LLM + TTS in a single connection.
9
- *
10
- * Features:
11
- * - Real-time speech-to-text
12
- * - Streaming LLM responses
13
- * - Real-time text-to-speech
14
- * - Low latency (<500ms)
15
- * - Interruption handling
16
- *
17
- * Cost: ~$0.006/minute (all-inclusive)
18
- *
19
- * Note: This adapter is designed for WebSocket-based real-time streaming.
20
- * For batch/turn-based conversations, use GeminiVoiceAdapter instead.
21
- */
22
- class GeminiMultimodalLiveAdapter {
23
- constructor(apiKey, voiceConfig) {
24
- this.isConnected = false;
25
- this.apiKey = apiKey;
26
- this.voiceConfig = voiceConfig;
27
- }
28
- /**
29
- * Connect to Gemini Multimodal Live API
30
- * Returns a WebSocket connection for bidirectional streaming
31
- */
32
- async connect() {
33
- if (this.ws && this.isConnected) {
34
- return this.ws;
35
- }
36
- // Gemini Multimodal Live WebSocket endpoint
37
- const wsUrl = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key=${this.apiKey}`;
38
- return new Promise((resolve, reject) => {
39
- this.ws = new WebSocket(wsUrl);
40
- this.ws.onopen = () => {
41
- console.log('[GeminiMultimodalLive] Connected to Gemini');
42
- this.isConnected = true;
43
- // Send initial configuration
44
- this.sendConfig();
45
- resolve(this.ws);
46
- };
47
- this.ws.onerror = (error) => {
48
- console.error('[GeminiMultimodalLive] Connection error:', error);
49
- this.isConnected = false;
50
- reject(error);
51
- };
52
- this.ws.onclose = () => {
53
- console.log('[GeminiMultimodalLive] Connection closed');
54
- this.isConnected = false;
55
- };
56
- });
57
- }
58
- /**
59
- * Send configuration to Gemini
60
- */
61
- sendConfig() {
62
- if (!this.ws || !this.isConnected) {
63
- throw new Error('Not connected to Gemini');
64
- }
65
- const config = {
66
- setup: {
67
- model: 'models/gemini-2.0-flash-exp',
68
- generationConfig: {
69
- responseModalities: ['AUDIO'],
70
- speechConfig: {
71
- voiceConfig: {
72
- prebuiltVoiceConfig: {
73
- voiceName: this.voiceConfig?.tts?.voice || 'Puck'
74
- }
75
- }
76
- }
77
- }
78
- }
79
- };
80
- this.ws.send(JSON.stringify(config));
81
- }
82
- /**
83
- * Send audio chunk to Gemini for processing
84
- * @param audioBase64 Base64-encoded audio data
85
- */
86
- async sendAudio(audioBase64) {
87
- if (!this.ws || !this.isConnected) {
88
- throw new Error('Not connected to Gemini');
89
- }
90
- const message = {
91
- realtimeInput: {
92
- mediaChunks: [{
93
- data: audioBase64,
94
- mimeType: 'audio/pcm'
95
- }]
96
- }
97
- };
98
- this.ws.send(JSON.stringify(message));
99
- }
100
- /**
101
- * Register callback for receiving responses from Gemini
102
- * @param callback Function to handle responses (text + audio)
103
- */
104
- onResponse(callback) {
105
- if (!this.ws) {
106
- throw new Error('Not connected to Gemini');
107
- }
108
- this.ws.onmessage = (event) => {
109
- try {
110
- const data = JSON.parse(event.data);
111
- if (data.serverContent?.modelTurn?.parts) {
112
- const parts = data.serverContent.modelTurn.parts;
113
- for (const part of parts) {
114
- const response = {
115
- isFinal: data.serverContent.turnComplete || false
116
- };
117
- // Extract text
118
- if (part.text) {
119
- response.text = part.text;
120
- }
121
- // Extract audio
122
- if (part.inlineData?.data) {
123
- const audioBase64 = part.inlineData.data;
124
- response.audio = Uint8Array.from(Buffer.from(audioBase64, 'base64'));
125
- }
126
- callback(response);
127
- }
128
- }
129
- }
130
- catch (error) {
131
- console.error('[GeminiMultimodalLive] Error parsing response:', error);
132
- }
133
- };
134
- }
135
- /**
136
- * Disconnect from Gemini
137
- */
138
- disconnect() {
139
- if (this.ws) {
140
- this.ws.close();
141
- this.ws = undefined;
142
- this.isConnected = false;
143
- }
144
- }
145
- /**
146
- * Speech-to-text (not used in real-time mode)
147
- * Use sendAudio() and onResponse() instead for real-time streaming
148
- */
149
- async speechToText(audioBase64, config) {
150
- throw new Error('speechToText() is not supported in real-time mode. ' +
151
- 'Use connect() + sendAudio() + onResponse() for streaming.');
152
- }
153
- /**
154
- * Text-to-speech (not used in real-time mode)
155
- * Use sendAudio() and onResponse() instead for real-time streaming
156
- */
157
- async textToSpeech(text, config) {
158
- throw new Error('textToSpeech() is not supported in real-time mode. ' +
159
- 'Use connect() + sendAudio() + onResponse() for streaming.');
160
- }
161
- /**
162
- * Get TTS output format metadata
163
- * This adapter outputs PCM audio at 24kHz mono
164
- */
165
- getTTSOutputFormat() {
166
- return {
167
- format: 'pcm',
168
- sampleRate: 24000,
169
- channels: 1,
170
- bitDepth: 16
171
- };
172
- }
173
- /**
174
- * Check if connected to Gemini
175
- */
176
- isConnectedToGemini() {
177
- return this.isConnected;
178
- }
179
- /**
180
- * Get the underlying WebSocket connection
181
- */
182
- getWebSocket() {
183
- return this.ws;
184
- }
185
- }
186
- exports.GeminiMultimodalLiveAdapter = GeminiMultimodalLiveAdapter;
187
- //# sourceMappingURL=GeminiMultimodalLiveAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GeminiMultimodalLiveAdapter.js","sourceRoot":"","sources":["../../../src/adapters/voice/GeminiMultimodalLiveAdapter.ts"],"names":[],"mappings":"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"}