@pipedog/core 0.0.0 → 0.1.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 (698) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +9 -0
  3. package/dist/adapters/base_llm_adapter.d.ts +266 -0
  4. package/dist/adapters/base_llm_adapter.js +489 -0
  5. package/dist/adapters/index.d.ts +2 -0
  6. package/dist/adapters/index.js +8 -0
  7. package/dist/adapters/schemas/direct_function.d.ts +202 -0
  8. package/dist/adapters/schemas/direct_function.js +302 -0
  9. package/dist/adapters/schemas/function_schema.d.ts +67 -0
  10. package/dist/adapters/schemas/function_schema.js +72 -0
  11. package/dist/adapters/schemas/index.d.ts +2 -0
  12. package/dist/adapters/schemas/index.js +8 -0
  13. package/dist/adapters/schemas/tools_schema.d.ts +57 -0
  14. package/dist/adapters/schemas/tools_schema.js +79 -0
  15. package/dist/adapters/services/index.d.ts +2 -0
  16. package/dist/adapters/services/index.js +8 -0
  17. package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
  18. package/dist/adapters/services/open_ai_adapter.js +250 -0
  19. package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
  20. package/dist/audio/dtmf/dtmf_data.js +22 -0
  21. package/dist/audio/dtmf/index.d.ts +2 -0
  22. package/dist/audio/dtmf/index.js +8 -0
  23. package/dist/audio/dtmf/types.d.ts +31 -0
  24. package/dist/audio/dtmf/types.js +35 -0
  25. package/dist/audio/dtmf/utils.d.ts +13 -0
  26. package/dist/audio/dtmf/utils.js +62 -0
  27. package/dist/audio/filters/base_audio_filter.d.ts +51 -0
  28. package/dist/audio/filters/base_audio_filter.js +17 -0
  29. package/dist/audio/filters/index.d.ts +2 -0
  30. package/dist/audio/filters/index.js +8 -0
  31. package/dist/audio/index.d.ts +2 -0
  32. package/dist/audio/index.js +8 -0
  33. package/dist/audio/krisp_instance.d.ts +95 -0
  34. package/dist/audio/krisp_instance.js +229 -0
  35. package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
  36. package/dist/audio/mixers/base_audio_mixer.js +16 -0
  37. package/dist/audio/mixers/index.d.ts +2 -0
  38. package/dist/audio/mixers/index.js +8 -0
  39. package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
  40. package/dist/audio/resamplers/base_audio_resampler.js +35 -0
  41. package/dist/audio/resamplers/index.d.ts +2 -0
  42. package/dist/audio/resamplers/index.js +8 -0
  43. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  44. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  45. package/dist/audio/resamplers/soxr_resampler.d.ts +54 -0
  46. package/dist/audio/resamplers/soxr_resampler.js +69 -0
  47. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +75 -0
  48. package/dist/audio/resamplers/soxr_stream_resampler.js +146 -0
  49. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  50. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  51. package/dist/audio/turn/index.d.ts +2 -0
  52. package/dist/audio/turn/index.js +8 -0
  53. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  54. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  55. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  56. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  57. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  58. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +143 -0
  59. package/dist/audio/utils.d.ts +224 -0
  60. package/dist/audio/utils.js +634 -0
  61. package/dist/audio/vad/data/index.d.ts +2 -0
  62. package/dist/audio/vad/data/index.js +8 -0
  63. package/dist/audio/vad/index.d.ts +2 -0
  64. package/dist/audio/vad/index.js +8 -0
  65. package/dist/audio/vad/vad_analyzer.d.ts +126 -0
  66. package/dist/audio/vad/vad_analyzer.js +211 -0
  67. package/dist/audio/vad/vad_controller.d.ts +143 -0
  68. package/dist/audio/vad/vad_controller.js +228 -0
  69. package/dist/audio/volume.d.ts +38 -0
  70. package/dist/audio/volume.js +75 -0
  71. package/dist/bus/adapters/base.d.ts +35 -0
  72. package/dist/bus/adapters/base.js +19 -0
  73. package/dist/bus/adapters/index.d.ts +10 -0
  74. package/dist/bus/adapters/index.js +15 -0
  75. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  76. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  77. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  78. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  79. package/dist/bus/bridge_processor.d.ts +111 -0
  80. package/dist/bus/bridge_processor.js +166 -0
  81. package/dist/bus/bus.d.ts +110 -0
  82. package/dist/bus/bus.js +200 -0
  83. package/dist/bus/index.d.ts +22 -0
  84. package/dist/bus/index.js +27 -0
  85. package/dist/bus/local/async_queue.d.ts +12 -0
  86. package/dist/bus/local/async_queue.js +21 -0
  87. package/dist/bus/local/index.d.ts +3 -0
  88. package/dist/bus/local/index.js +8 -0
  89. package/dist/bus/messages.d.ts +378 -0
  90. package/dist/bus/messages.js +357 -0
  91. package/dist/bus/network/index.d.ts +16 -0
  92. package/dist/bus/network/index.js +21 -0
  93. package/dist/bus/queue.d.ts +27 -0
  94. package/dist/bus/queue.js +51 -0
  95. package/dist/bus/serializers/base.d.ts +25 -0
  96. package/dist/bus/serializers/base.js +14 -0
  97. package/dist/bus/serializers/index.d.ts +9 -0
  98. package/dist/bus/serializers/index.js +14 -0
  99. package/dist/bus/serializers/json.d.ts +77 -0
  100. package/dist/bus/serializers/json.js +367 -0
  101. package/dist/bus/subscriber.d.ts +46 -0
  102. package/dist/bus/subscriber.js +27 -0
  103. package/dist/bus/ui/index.d.ts +3 -0
  104. package/dist/bus/ui/index.js +8 -0
  105. package/dist/bus/ui/messages.d.ts +186 -0
  106. package/dist/bus/ui/messages.js +171 -0
  107. package/dist/classifiers/base_classifier.d.ts +263 -0
  108. package/dist/classifiers/base_classifier.js +346 -0
  109. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  110. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  111. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  112. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  113. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  114. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  115. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  116. package/dist/classifiers/cloudflare/index.js +8 -0
  117. package/dist/classifiers/http_client.d.ts +70 -0
  118. package/dist/classifiers/http_client.js +161 -0
  119. package/dist/classifiers/index.d.ts +2 -0
  120. package/dist/classifiers/index.js +8 -0
  121. package/dist/classifiers/jev/classifier.d.ts +8 -0
  122. package/dist/classifiers/jev/classifier.js +13 -0
  123. package/dist/classifiers/jev/client.d.ts +8 -0
  124. package/dist/classifiers/jev/client.js +13 -0
  125. package/dist/classifiers/jev/index.d.ts +2 -0
  126. package/dist/classifiers/jev/index.js +8 -0
  127. package/dist/classifiers/llm/classifier.d.ts +72 -0
  128. package/dist/classifiers/llm/classifier.js +304 -0
  129. package/dist/classifiers/llm/index.d.ts +2 -0
  130. package/dist/classifiers/llm/index.js +8 -0
  131. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  132. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  133. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  134. package/dist/classifiers/openai/decisions/client.js +234 -0
  135. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  136. package/dist/classifiers/openai/decisions/index.js +8 -0
  137. package/dist/classifiers/openai/index.d.ts +2 -0
  138. package/dist/classifiers/openai/index.js +8 -0
  139. package/dist/classifiers/typesafe/index.d.ts +2 -0
  140. package/dist/classifiers/typesafe/index.js +8 -0
  141. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  142. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  143. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  144. package/dist/classifiers/typesafe/jev/client.js +233 -0
  145. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  146. package/dist/classifiers/typesafe/jev/index.js +8 -0
  147. package/dist/clocks/base_clock.d.ts +13 -0
  148. package/dist/clocks/base_clock.js +14 -0
  149. package/dist/clocks/index.d.ts +2 -0
  150. package/dist/clocks/index.js +8 -0
  151. package/dist/clocks/system_clock.d.ts +15 -0
  152. package/dist/clocks/system_clock.js +25 -0
  153. package/dist/frames/frames.d.ts +2533 -0
  154. package/dist/frames/frames.js +2485 -0
  155. package/dist/frames/index.d.ts +2 -0
  156. package/dist/frames/index.js +8 -0
  157. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  158. package/dist/frames/protobufs/frames_pb2.js +466 -0
  159. package/dist/index.d.ts +11 -0
  160. package/dist/index.js +56 -0
  161. package/dist/metrics/index.d.ts +2 -0
  162. package/dist/metrics/index.js +8 -0
  163. package/dist/metrics/metrics.d.ts +276 -0
  164. package/dist/metrics/metrics.js +254 -0
  165. package/dist/observers/base_observer.d.ts +173 -0
  166. package/dist/observers/base_observer.js +151 -0
  167. package/dist/observers/error_observer.d.ts +75 -0
  168. package/dist/observers/error_observer.js +87 -0
  169. package/dist/observers/function_call_observer.d.ts +157 -0
  170. package/dist/observers/function_call_observer.js +222 -0
  171. package/dist/observers/index.d.ts +2 -0
  172. package/dist/observers/index.js +8 -0
  173. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  174. package/dist/observers/loggers/debug_log_observer.js +228 -0
  175. package/dist/observers/loggers/index.d.ts +2 -0
  176. package/dist/observers/loggers/index.js +8 -0
  177. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  178. package/dist/observers/loggers/llm_log_observer.js +110 -0
  179. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  180. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  181. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  182. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  183. package/dist/observers/service_metrics_observer.d.ts +168 -0
  184. package/dist/observers/service_metrics_observer.js +236 -0
  185. package/dist/observers/speaking_observer.d.ts +104 -0
  186. package/dist/observers/speaking_observer.js +150 -0
  187. package/dist/observers/startup_timing_observer.d.ts +221 -0
  188. package/dist/observers/startup_timing_observer.js +365 -0
  189. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  190. package/dist/observers/turn_tracking_observer.js +189 -0
  191. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  192. package/dist/observers/user_bot_latency_observer.js +974 -0
  193. package/dist/pipeline/base_pipeline.d.ts +49 -0
  194. package/dist/pipeline/base_pipeline.js +101 -0
  195. package/dist/pipeline/capabilities.d.ts +76 -0
  196. package/dist/pipeline/capabilities.js +97 -0
  197. package/dist/pipeline/index.d.ts +2 -0
  198. package/dist/pipeline/index.js +8 -0
  199. package/dist/pipeline/job_context.d.ts +317 -0
  200. package/dist/pipeline/job_context.js +450 -0
  201. package/dist/pipeline/job_decorator.d.ts +54 -0
  202. package/dist/pipeline/job_decorator.js +92 -0
  203. package/dist/pipeline/llm_switcher.d.ts +84 -0
  204. package/dist/pipeline/llm_switcher.js +107 -0
  205. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  206. package/dist/pipeline/llm_with_backend.js +806 -0
  207. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  208. package/dist/pipeline/parallel_pipeline.js +200 -0
  209. package/dist/pipeline/pipeline.d.ts +126 -0
  210. package/dist/pipeline/pipeline.js +196 -0
  211. package/dist/pipeline/service_switcher.d.ts +287 -0
  212. package/dist/pipeline/service_switcher.js +509 -0
  213. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  214. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  215. package/dist/pipeline/worker.d.ts +814 -0
  216. package/dist/pipeline/worker.js +1639 -0
  217. package/dist/pipeline/worker_observer.d.ts +131 -0
  218. package/dist/pipeline/worker_observer.js +274 -0
  219. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  220. package/dist/pipeline/worker_ready_decorator.js +76 -0
  221. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  222. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  223. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  224. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  225. package/dist/processors/aggregators/gated.d.ts +43 -0
  226. package/dist/processors/aggregators/gated.js +86 -0
  227. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  228. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  229. package/dist/processors/aggregators/index.d.ts +2 -0
  230. package/dist/processors/aggregators/index.js +8 -0
  231. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  232. package/dist/processors/aggregators/llm_context.js +580 -0
  233. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  234. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  235. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  236. package/dist/processors/aggregators/llm_response.js +71 -0
  237. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  238. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  239. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  240. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  241. package/dist/processors/aggregators/sentence.d.ts +39 -0
  242. package/dist/processors/aggregators/sentence.js +69 -0
  243. package/dist/processors/async_generator.d.ts +42 -0
  244. package/dist/processors/async_generator.js +76 -0
  245. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  246. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  247. package/dist/processors/audio/index.d.ts +2 -0
  248. package/dist/processors/audio/index.js +8 -0
  249. package/dist/processors/audio/vad_processor.d.ts +67 -0
  250. package/dist/processors/audio/vad_processor.js +103 -0
  251. package/dist/processors/consumer_processor.d.ts +49 -0
  252. package/dist/processors/consumer_processor.js +85 -0
  253. package/dist/processors/filters/frame_filter.d.ts +39 -0
  254. package/dist/processors/filters/frame_filter.js +52 -0
  255. package/dist/processors/filters/function_filter.d.ts +59 -0
  256. package/dist/processors/filters/function_filter.js +78 -0
  257. package/dist/processors/filters/identity_filter.d.ts +33 -0
  258. package/dist/processors/filters/identity_filter.js +37 -0
  259. package/dist/processors/filters/index.d.ts +2 -0
  260. package/dist/processors/filters/index.js +8 -0
  261. package/dist/processors/filters/null_filter.d.ts +34 -0
  262. package/dist/processors/filters/null_filter.js +47 -0
  263. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  264. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  265. package/dist/processors/frame_processor.d.ts +360 -0
  266. package/dist/processors/frame_processor.js +932 -0
  267. package/dist/processors/frameworks/index.d.ts +2 -0
  268. package/dist/processors/frameworks/index.js +8 -0
  269. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  270. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  271. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  272. package/dist/processors/frameworks/rtvi/index.js +11 -0
  273. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  274. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  275. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  276. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  277. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  278. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  279. package/dist/processors/idle_frame_processor.d.ts +44 -0
  280. package/dist/processors/idle_frame_processor.js +86 -0
  281. package/dist/processors/index.d.ts +2 -0
  282. package/dist/processors/index.js +8 -0
  283. package/dist/processors/logger.d.ts +42 -0
  284. package/dist/processors/logger.js +87 -0
  285. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  286. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  287. package/dist/processors/metrics/index.d.ts +2 -0
  288. package/dist/processors/metrics/index.js +8 -0
  289. package/dist/processors/producer_processor.d.ts +68 -0
  290. package/dist/processors/producer_processor.js +78 -0
  291. package/dist/processors/text_transformer.d.ts +30 -0
  292. package/dist/processors/text_transformer.js +48 -0
  293. package/dist/registry/index.d.ts +3 -0
  294. package/dist/registry/index.js +8 -0
  295. package/dist/registry/registry.d.ts +69 -0
  296. package/dist/registry/registry.js +149 -0
  297. package/dist/registry/types.d.ts +47 -0
  298. package/dist/registry/types.js +39 -0
  299. package/dist/serializers/base_serializer.d.ts +94 -0
  300. package/dist/serializers/base_serializer.js +82 -0
  301. package/dist/serializers/index.d.ts +2 -0
  302. package/dist/serializers/index.js +8 -0
  303. package/dist/services/ai_service.d.ts +145 -0
  304. package/dist/services/ai_service.js +262 -0
  305. package/dist/services/anthropic/index.d.ts +2 -0
  306. package/dist/services/anthropic/index.js +7 -0
  307. package/dist/services/assemblyai/index.d.ts +2 -0
  308. package/dist/services/assemblyai/index.js +7 -0
  309. package/dist/services/asyncai/index.d.ts +2 -0
  310. package/dist/services/asyncai/index.js +7 -0
  311. package/dist/services/aws/index.d.ts +2 -0
  312. package/dist/services/aws/index.js +7 -0
  313. package/dist/services/azure/index.d.ts +2 -0
  314. package/dist/services/azure/index.js +7 -0
  315. package/dist/services/baseten/index.d.ts +2 -0
  316. package/dist/services/baseten/index.js +7 -0
  317. package/dist/services/bland/index.d.ts +2 -0
  318. package/dist/services/bland/index.js +7 -0
  319. package/dist/services/camb/index.d.ts +2 -0
  320. package/dist/services/camb/index.js +7 -0
  321. package/dist/services/cartesia/index.d.ts +2 -0
  322. package/dist/services/cartesia/index.js +7 -0
  323. package/dist/services/cerebras/index.d.ts +2 -0
  324. package/dist/services/cerebras/index.js +7 -0
  325. package/dist/services/crusoe/index.d.ts +2 -0
  326. package/dist/services/crusoe/index.js +7 -0
  327. package/dist/services/deepgram/index.d.ts +2 -0
  328. package/dist/services/deepgram/index.js +7 -0
  329. package/dist/services/deepseek/index.d.ts +2 -0
  330. package/dist/services/deepseek/index.js +7 -0
  331. package/dist/services/elevenlabs/index.d.ts +2 -0
  332. package/dist/services/elevenlabs/index.js +7 -0
  333. package/dist/services/fal/index.d.ts +2 -0
  334. package/dist/services/fal/index.js +7 -0
  335. package/dist/services/fireworks/index.d.ts +2 -0
  336. package/dist/services/fireworks/index.js +7 -0
  337. package/dist/services/fish/index.d.ts +2 -0
  338. package/dist/services/fish/index.js +7 -0
  339. package/dist/services/funasr/index.d.ts +3 -0
  340. package/dist/services/funasr/index.js +8 -0
  341. package/dist/services/gladia/index.d.ts +2 -0
  342. package/dist/services/gladia/index.js +7 -0
  343. package/dist/services/google/index.d.ts +2 -0
  344. package/dist/services/google/index.js +7 -0
  345. package/dist/services/gradium/index.d.ts +2 -0
  346. package/dist/services/gradium/index.js +7 -0
  347. package/dist/services/grok/index.d.ts +2 -0
  348. package/dist/services/grok/index.js +7 -0
  349. package/dist/services/groq/index.d.ts +2 -0
  350. package/dist/services/groq/index.js +7 -0
  351. package/dist/services/heygen/index.d.ts +2 -0
  352. package/dist/services/heygen/index.js +7 -0
  353. package/dist/services/hume/index.d.ts +2 -0
  354. package/dist/services/hume/index.js +7 -0
  355. package/dist/services/image_service.d.ts +52 -0
  356. package/dist/services/image_service.js +60 -0
  357. package/dist/services/inception/index.d.ts +2 -0
  358. package/dist/services/inception/index.js +7 -0
  359. package/dist/services/index.d.ts +2 -0
  360. package/dist/services/index.js +8 -0
  361. package/dist/services/inworld/index.d.ts +2 -0
  362. package/dist/services/inworld/index.js +7 -0
  363. package/dist/services/keenable/index.d.ts +2 -0
  364. package/dist/services/keenable/index.js +7 -0
  365. package/dist/services/kokoro/index.d.ts +2 -0
  366. package/dist/services/kokoro/index.js +7 -0
  367. package/dist/services/llm_service.d.ts +1106 -0
  368. package/dist/services/llm_service.js +2231 -0
  369. package/dist/services/mem0/index.d.ts +2 -0
  370. package/dist/services/mem0/index.js +7 -0
  371. package/dist/services/meta/index.d.ts +2 -0
  372. package/dist/services/meta/index.js +7 -0
  373. package/dist/services/minimax/index.d.ts +2 -0
  374. package/dist/services/minimax/index.js +7 -0
  375. package/dist/services/mistral/index.d.ts +2 -0
  376. package/dist/services/mistral/index.js +7 -0
  377. package/dist/services/moondream/index.d.ts +2 -0
  378. package/dist/services/moondream/index.js +7 -0
  379. package/dist/services/moonshine/index.d.ts +2 -0
  380. package/dist/services/moonshine/index.js +7 -0
  381. package/dist/services/nebius/index.d.ts +2 -0
  382. package/dist/services/nebius/index.js +7 -0
  383. package/dist/services/neuphonic/index.d.ts +2 -0
  384. package/dist/services/neuphonic/index.js +7 -0
  385. package/dist/services/novita/index.d.ts +2 -0
  386. package/dist/services/novita/index.js +7 -0
  387. package/dist/services/nvidia/index.d.ts +2 -0
  388. package/dist/services/nvidia/index.js +11 -0
  389. package/dist/services/ollama/index.d.ts +2 -0
  390. package/dist/services/ollama/index.js +7 -0
  391. package/dist/services/openai/index.d.ts +2 -0
  392. package/dist/services/openai/index.js +7 -0
  393. package/dist/services/openclaw/index.d.ts +14 -0
  394. package/dist/services/openclaw/index.js +19 -0
  395. package/dist/services/openrouter/index.d.ts +2 -0
  396. package/dist/services/openrouter/index.js +7 -0
  397. package/dist/services/perplexity/index.d.ts +2 -0
  398. package/dist/services/perplexity/index.js +7 -0
  399. package/dist/services/piper/index.d.ts +2 -0
  400. package/dist/services/piper/index.js +7 -0
  401. package/dist/services/pocket_tts/index.d.ts +2 -0
  402. package/dist/services/pocket_tts/index.js +7 -0
  403. package/dist/services/qwen/index.d.ts +2 -0
  404. package/dist/services/qwen/index.js +7 -0
  405. package/dist/services/resembleai/index.d.ts +2 -0
  406. package/dist/services/resembleai/index.js +7 -0
  407. package/dist/services/rime/index.d.ts +2 -0
  408. package/dist/services/rime/index.js +7 -0
  409. package/dist/services/sambanova/index.d.ts +2 -0
  410. package/dist/services/sambanova/index.js +7 -0
  411. package/dist/services/sarvam/index.d.ts +2 -0
  412. package/dist/services/sarvam/index.js +7 -0
  413. package/dist/services/settings.d.ts +356 -0
  414. package/dist/services/settings.js +437 -0
  415. package/dist/services/simli/index.d.ts +2 -0
  416. package/dist/services/simli/index.js +7 -0
  417. package/dist/services/smallest/index.d.ts +2 -0
  418. package/dist/services/smallest/index.js +7 -0
  419. package/dist/services/soniox/index.d.ts +2 -0
  420. package/dist/services/soniox/index.js +7 -0
  421. package/dist/services/speechify/index.d.ts +2 -0
  422. package/dist/services/speechify/index.js +7 -0
  423. package/dist/services/speechmatics/index.d.ts +2 -0
  424. package/dist/services/speechmatics/index.js +7 -0
  425. package/dist/services/stt_latency.d.ts +62 -0
  426. package/dist/services/stt_latency.js +71 -0
  427. package/dist/services/stt_service.d.ts +601 -0
  428. package/dist/services/stt_service.js +1044 -0
  429. package/dist/services/tavus/index.d.ts +2 -0
  430. package/dist/services/tavus/index.js +7 -0
  431. package/dist/services/together/index.d.ts +2 -0
  432. package/dist/services/together/index.js +7 -0
  433. package/dist/services/tts_service.d.ts +909 -0
  434. package/dist/services/tts_service.js +2018 -0
  435. package/dist/services/ultravox/index.d.ts +2 -0
  436. package/dist/services/ultravox/index.js +9 -0
  437. package/dist/services/vision_service.d.ts +56 -0
  438. package/dist/services/vision_service.js +62 -0
  439. package/dist/services/websocket_service.d.ts +213 -0
  440. package/dist/services/websocket_service.js +654 -0
  441. package/dist/services/whisper/index.d.ts +2 -0
  442. package/dist/services/whisper/index.js +9 -0
  443. package/dist/services/xai/index.d.ts +2 -0
  444. package/dist/services/xai/index.js +9 -0
  445. package/dist/services/xtts/index.d.ts +2 -0
  446. package/dist/services/xtts/index.js +9 -0
  447. package/dist/tests/index.d.ts +2 -0
  448. package/dist/tests/index.js +8 -0
  449. package/dist/tests/utils.d.ts +123 -0
  450. package/dist/tests/utils.js +212 -0
  451. package/dist/transcriptions/index.d.ts +2 -0
  452. package/dist/transcriptions/index.js +8 -0
  453. package/dist/transcriptions/language.d.ts +376 -0
  454. package/dist/transcriptions/language.js +543 -0
  455. package/dist/transports/base_input.d.ts +149 -0
  456. package/dist/transports/base_input.js +338 -0
  457. package/dist/transports/base_output.d.ts +432 -0
  458. package/dist/transports/base_output.js +1231 -0
  459. package/dist/transports/base_transport.d.ts +223 -0
  460. package/dist/transports/base_transport.js +167 -0
  461. package/dist/transports/daily/index.d.ts +2 -0
  462. package/dist/transports/daily/index.js +9 -0
  463. package/dist/transports/heygen/index.d.ts +2 -0
  464. package/dist/transports/heygen/index.js +9 -0
  465. package/dist/transports/index.d.ts +2 -0
  466. package/dist/transports/index.js +8 -0
  467. package/dist/transports/lemonslice/index.d.ts +2 -0
  468. package/dist/transports/lemonslice/index.js +9 -0
  469. package/dist/transports/livekit/index.d.ts +2 -0
  470. package/dist/transports/livekit/index.js +9 -0
  471. package/dist/transports/local/index.d.ts +2 -0
  472. package/dist/transports/local/index.js +9 -0
  473. package/dist/transports/moq/index.d.ts +2 -0
  474. package/dist/transports/moq/index.js +9 -0
  475. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  476. package/dist/transports/smallwebrtc/index.js +9 -0
  477. package/dist/transports/tavus/index.d.ts +2 -0
  478. package/dist/transports/tavus/index.js +9 -0
  479. package/dist/transports/video_in_sampler.d.ts +157 -0
  480. package/dist/transports/video_in_sampler.js +258 -0
  481. package/dist/transports/vonage/index.d.ts +2 -0
  482. package/dist/transports/vonage/index.js +9 -0
  483. package/dist/transports/websocket/index.d.ts +2 -0
  484. package/dist/transports/websocket/index.js +9 -0
  485. package/dist/transports/whatsapp/index.d.ts +2 -0
  486. package/dist/transports/whatsapp/index.js +9 -0
  487. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  488. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  489. package/dist/turns/empty_user_turn.d.ts +55 -0
  490. package/dist/turns/empty_user_turn.js +53 -0
  491. package/dist/turns/index.d.ts +2 -0
  492. package/dist/turns/index.js +8 -0
  493. package/dist/turns/speculation_gate.d.ts +169 -0
  494. package/dist/turns/speculation_gate.js +294 -0
  495. package/dist/turns/types.d.ts +33 -0
  496. package/dist/turns/types.js +35 -0
  497. package/dist/turns/user_idle_controller.d.ts +94 -0
  498. package/dist/turns/user_idle_controller.js +187 -0
  499. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  500. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  501. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  502. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  503. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  504. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  505. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  506. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  507. package/dist/turns/user_mute/index.d.ts +6 -0
  508. package/dist/turns/user_mute/index.js +11 -0
  509. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  510. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  511. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  512. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  513. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  514. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  515. package/dist/turns/user_start/index.d.ts +8 -0
  516. package/dist/turns/user_start/index.js +16 -0
  517. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  518. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  519. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  520. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  521. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  522. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  523. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  524. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  525. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  526. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  527. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  528. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  529. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  530. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  531. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  532. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  533. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  534. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  535. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  536. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  537. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  538. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  539. package/dist/turns/user_stop/index.d.ts +10 -0
  540. package/dist/turns/user_stop/index.js +15 -0
  541. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  542. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  543. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  544. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  545. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  546. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  547. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  548. package/dist/turns/user_turn_completion_mixin.js +591 -0
  549. package/dist/turns/user_turn_controller.d.ts +134 -0
  550. package/dist/turns/user_turn_controller.js +335 -0
  551. package/dist/turns/user_turn_processor.d.ts +87 -0
  552. package/dist/turns/user_turn_processor.js +180 -0
  553. package/dist/turns/user_turn_strategies.d.ts +187 -0
  554. package/dist/turns/user_turn_strategies.js +222 -0
  555. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  556. package/dist/utils/async_tool_cancellation.js +78 -0
  557. package/dist/utils/asyncio/index.d.ts +2 -0
  558. package/dist/utils/asyncio/index.js +7 -0
  559. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  560. package/dist/utils/asyncio/task_manager.js +105 -0
  561. package/dist/utils/base_object.d.ts +76 -0
  562. package/dist/utils/base_object.js +154 -0
  563. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  564. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  565. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  566. package/dist/utils/context/audio_context_manager.js +233 -0
  567. package/dist/utils/context/index.d.ts +2 -0
  568. package/dist/utils/context/index.js +7 -0
  569. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  570. package/dist/utils/context/llm_context_summarization.js +511 -0
  571. package/dist/utils/context/text_segment_map.d.ts +611 -0
  572. package/dist/utils/context/text_segment_map.js +1132 -0
  573. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  574. package/dist/utils/context/word_completion_tracker.js +441 -0
  575. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  576. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  577. package/dist/utils/deprecation.d.ts +28 -0
  578. package/dist/utils/deprecation.js +75 -0
  579. package/dist/utils/env.d.ts +38 -0
  580. package/dist/utils/env.js +62 -0
  581. package/dist/utils/errors.d.ts +75 -0
  582. package/dist/utils/errors.js +202 -0
  583. package/dist/utils/file_resolver.d.ts +126 -0
  584. package/dist/utils/file_resolver.js +314 -0
  585. package/dist/utils/file_storage.d.ts +99 -0
  586. package/dist/utils/file_storage.js +100 -0
  587. package/dist/utils/frame_queue.d.ts +36 -0
  588. package/dist/utils/frame_queue.js +66 -0
  589. package/dist/utils/http.d.ts +39 -0
  590. package/dist/utils/http.js +53 -0
  591. package/dist/utils/image.d.ts +15 -0
  592. package/dist/utils/image.js +30 -0
  593. package/dist/utils/index.d.ts +2 -0
  594. package/dist/utils/index.js +8 -0
  595. package/dist/utils/log_config.d.ts +34 -0
  596. package/dist/utils/log_config.js +76 -0
  597. package/dist/utils/logger.d.ts +40 -0
  598. package/dist/utils/logger.js +91 -0
  599. package/dist/utils/mixin.d.ts +14 -0
  600. package/dist/utils/mixin.js +63 -0
  601. package/dist/utils/network.d.ts +73 -0
  602. package/dist/utils/network.js +90 -0
  603. package/dist/utils/security/allowed_origins.d.ts +16 -0
  604. package/dist/utils/security/allowed_origins.js +34 -0
  605. package/dist/utils/security/index.d.ts +2 -0
  606. package/dist/utils/security/index.js +7 -0
  607. package/dist/utils/security/redaction.d.ts +27 -0
  608. package/dist/utils/security/redaction.js +123 -0
  609. package/dist/utils/security/ssrf.d.ts +79 -0
  610. package/dist/utils/security/ssrf.js +327 -0
  611. package/dist/utils/shared.d.ts +35 -0
  612. package/dist/utils/shared.js +136 -0
  613. package/dist/utils/startup.d.ts +17 -0
  614. package/dist/utils/startup.js +130 -0
  615. package/dist/utils/string.d.ts +116 -0
  616. package/dist/utils/string.js +460 -0
  617. package/dist/utils/sync/base_notifier.d.ts +25 -0
  618. package/dist/utils/sync/base_notifier.js +16 -0
  619. package/dist/utils/sync/event_notifier.d.ts +38 -0
  620. package/dist/utils/sync/event_notifier.js +51 -0
  621. package/dist/utils/sync/index.d.ts +2 -0
  622. package/dist/utils/sync/index.js +7 -0
  623. package/dist/utils/text/alnum_utils.d.ts +109 -0
  624. package/dist/utils/text/alnum_utils.js +262 -0
  625. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  626. package/dist/utils/text/base_text_aggregator.js +102 -0
  627. package/dist/utils/text/base_text_filter.d.ts +54 -0
  628. package/dist/utils/text/base_text_filter.js +50 -0
  629. package/dist/utils/text/index.d.ts +2 -0
  630. package/dist/utils/text/index.js +7 -0
  631. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  632. package/dist/utils/text/markdown_text_filter.js +522 -0
  633. package/dist/utils/text/markup_utils.d.ts +54 -0
  634. package/dist/utils/text/markup_utils.js +156 -0
  635. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  636. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  637. package/dist/utils/text/phonemes.d.ts +60 -0
  638. package/dist/utils/text/phonemes.js +172 -0
  639. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  640. package/dist/utils/text/simple_text_aggregator.js +254 -0
  641. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  642. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  643. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  644. package/dist/utils/text/transforms/pronunciations.js +111 -0
  645. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  646. package/dist/utils/text/word_timestamp_utils.js +52 -0
  647. package/dist/utils/time.d.ts +13 -0
  648. package/dist/utils/time.js +31 -0
  649. package/dist/utils/tracing/index.d.ts +3 -0
  650. package/dist/utils/tracing/index.js +8 -0
  651. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  652. package/dist/utils/tracing/service_attributes.js +434 -0
  653. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  654. package/dist/utils/tracing/service_decorators.js +1662 -0
  655. package/dist/utils/tracing/setup.d.ts +95 -0
  656. package/dist/utils/tracing/setup.js +110 -0
  657. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  658. package/dist/utils/tracing/tracing_context.js +97 -0
  659. package/dist/utils/tracing/turn_trace_observer.d.ts +90 -0
  660. package/dist/utils/tracing/turn_trace_observer.js +219 -0
  661. package/dist/utils/types.d.ts +80 -0
  662. package/dist/utils/types.js +108 -0
  663. package/dist/utils/utils.d.ts +5 -0
  664. package/dist/utils/utils.js +22 -0
  665. package/dist/utils/yaml.d.ts +64 -0
  666. package/dist/utils/yaml.js +41 -0
  667. package/dist/version.d.ts +3 -0
  668. package/dist/version.js +7 -0
  669. package/dist/workers/base_worker.d.ts +772 -0
  670. package/dist/workers/base_worker.js +1298 -0
  671. package/dist/workers/index.d.ts +2 -0
  672. package/dist/workers/index.js +8 -0
  673. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  674. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  675. package/dist/workers/llm/index.d.ts +6 -0
  676. package/dist/workers/llm/index.js +11 -0
  677. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  678. package/dist/workers/llm/llm_context_worker.js +72 -0
  679. package/dist/workers/llm/llm_worker.d.ts +180 -0
  680. package/dist/workers/llm/llm_worker.js +323 -0
  681. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  682. package/dist/workers/llm/tool_decorator.js +60 -0
  683. package/dist/workers/runner.d.ts +268 -0
  684. package/dist/workers/runner.js +489 -0
  685. package/dist/workers/ui/index.d.ts +22 -0
  686. package/dist/workers/ui/index.js +27 -0
  687. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  688. package/dist/workers/ui/ui_event_decorator.js +75 -0
  689. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  690. package/dist/workers/ui/ui_job_context.js +17 -0
  691. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  692. package/dist/workers/ui/ui_prompts.js +41 -0
  693. package/dist/workers/ui/ui_tools.d.ts +32 -0
  694. package/dist/workers/ui/ui_tools.js +112 -0
  695. package/dist/workers/ui/ui_worker.d.ts +571 -0
  696. package/dist/workers/ui/ui_worker.js +1156 -0
  697. package/package.json +46 -3
  698. package/README.md +0 -5
@@ -0,0 +1,75 @@
1
+ import { BaseAudioResampler, type SoxrQuality } from "./base_audio_resampler.ts";
2
+ /**
3
+ * Stand-in for `soxr.ResampleStream` (mono, int16).
4
+ *
5
+ * STUB: libsoxr is not available in JavaScript yet; constructing one throws.
6
+ *
7
+ * @internal
8
+ */
9
+ export declare class SoxrResampleStream {
10
+ constructor(_options: {
11
+ inRate: number;
12
+ outRate: number;
13
+ numChannels: number;
14
+ quality: SoxrQuality;
15
+ });
16
+ resampleChunk(_chunk: Int16Array, _last?: boolean): Int16Array;
17
+ clear(): void;
18
+ }
19
+ export interface SOXRStreamAudioResamplerOptions {
20
+ /**
21
+ * SOXR quality preset. Higher quality means higher CPU cost. One of "VHQ"
22
+ * (default, very high quality), "HQ", "MQ", "LQ", or "QQ" (quick, lowest
23
+ * latency).
24
+ */
25
+ quality?: SoxrQuality;
26
+ /**
27
+ * Seconds of inactivity after which the internal resampler state is
28
+ * cleared to avoid audio artefacts from stale history. Set to `null` to
29
+ * never clear (recommended for telephony providers that have irregular gaps
30
+ * between chunks). Defaults to 0.2.
31
+ */
32
+ clearAfterSecs?: number | null;
33
+ }
34
+ /**
35
+ * Audio resampler implementation using the SoX ResampleStream library.
36
+ *
37
+ * Configured for very high quality (VHQ) resampling by default, providing
38
+ * excellent audio quality at the cost of additional computational overhead.
39
+ * It keeps an internal history which avoids clicks at chunk boundaries.
40
+ *
41
+ * Notes:
42
+ * - Only supports mono audio (1 channel).
43
+ * - Input must be 16-bit signed PCM audio as raw bytes.
44
+ */
45
+ export declare class SOXRStreamAudioResampler extends BaseAudioResampler {
46
+ protected _quality: SoxrQuality;
47
+ protected _clearAfterSecs: number | null;
48
+ protected _inRate: number | null;
49
+ protected _outRate: number | null;
50
+ protected _lastResampleTime: number;
51
+ protected _soxrStream: SoxrResampleStream | null;
52
+ constructor(options?: SOXRStreamAudioResamplerOptions);
53
+ protected _initialize(inRate: number, outRate: number): void;
54
+ protected _maybeClearInternalState(): void;
55
+ protected _maybeInitializeSoxStream(inRate: number, outRate: number): SoxrResampleStream;
56
+ /**
57
+ * Resample audio data using soxr.ResampleStream resampler library.
58
+ *
59
+ * @param audio Input audio data as raw bytes (16-bit signed integers).
60
+ * @param inRate Original sample rate in Hz.
61
+ * @param outRate Target sample rate in Hz.
62
+ * @returns Resampled audio data as raw bytes (16-bit signed integers).
63
+ */
64
+ resample(audio: Uint8Array, inRate: number, outRate: number): Promise<Uint8Array>;
65
+ /**
66
+ * Emit the audio held in the filter and reset it for the next stream.
67
+ *
68
+ * @returns The remaining resampled audio as raw bytes, empty if no audio
69
+ * has been resampled yet.
70
+ */
71
+ flush(): Promise<Uint8Array>;
72
+ /** Discard the audio held in the filter and reset it for the next stream. */
73
+ reset(): Promise<void>;
74
+ }
75
+ //# sourceMappingURL=soxr_stream_resampler.d.ts.map
@@ -0,0 +1,146 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/resamplers/soxr_stream_resampler.py
6
+ /**
7
+ * SoX-based audio resampler stream implementation.
8
+ *
9
+ * Provides an audio resampler that uses the SoX ResampleStream library for
10
+ * very high quality audio sample rate conversion.
11
+ *
12
+ * When to use the SOXRStreamAudioResampler:
13
+ * 1. For real-time processing scenarios
14
+ * 2. When dealing with very long audio signals
15
+ * 3. When processing audio in chunks or streams
16
+ * 4. When you need to reuse the same resampler configuration multiple times,
17
+ * as it saves initialization overhead
18
+ *
19
+ * PORTING NOTE: libsoxr has no edge-compatible JavaScript equivalent yet. The
20
+ * stream management (rate checks, idle clearing, flush/reset) is ported, but
21
+ * `SoxrResampleStream` is a stub whose constructor throws "not ported yet".
22
+ */
23
+ import { time } from "@pipedog/asyncio";
24
+ import { BaseAudioResampler } from "./base_audio_resampler.js";
25
+ import { bytesToInt16 } from "./soxr_resampler.js";
26
+ const EMPTY_AUDIO = new Int16Array(0);
27
+ /**
28
+ * Stand-in for `soxr.ResampleStream` (mono, int16).
29
+ *
30
+ * STUB: libsoxr is not available in JavaScript yet; constructing one throws.
31
+ *
32
+ * @internal
33
+ */
34
+ export class SoxrResampleStream {
35
+ constructor(_options) {
36
+ throw new Error("soxr stream resampling is not ported yet");
37
+ }
38
+ resampleChunk(_chunk, _last = false) {
39
+ throw new Error("soxr stream resampling is not ported yet");
40
+ }
41
+ clear() {
42
+ throw new Error("soxr stream resampling is not ported yet");
43
+ }
44
+ }
45
+ function int16ToBytes(samples) {
46
+ return new Uint8Array(samples.buffer, samples.byteOffset, samples.byteLength);
47
+ }
48
+ /**
49
+ * Audio resampler implementation using the SoX ResampleStream library.
50
+ *
51
+ * Configured for very high quality (VHQ) resampling by default, providing
52
+ * excellent audio quality at the cost of additional computational overhead.
53
+ * It keeps an internal history which avoids clicks at chunk boundaries.
54
+ *
55
+ * Notes:
56
+ * - Only supports mono audio (1 channel).
57
+ * - Input must be 16-bit signed PCM audio as raw bytes.
58
+ */
59
+ export class SOXRStreamAudioResampler extends BaseAudioResampler {
60
+ _quality;
61
+ _clearAfterSecs;
62
+ _inRate = null;
63
+ _outRate = null;
64
+ _lastResampleTime = 0;
65
+ _soxrStream = null;
66
+ constructor(options = {}) {
67
+ super();
68
+ this._quality = options.quality ?? "VHQ";
69
+ this._clearAfterSecs = options.clearAfterSecs === undefined ? 0.2 : options.clearAfterSecs;
70
+ }
71
+ _initialize(inRate, outRate) {
72
+ this._inRate = inRate;
73
+ this._outRate = outRate;
74
+ this._lastResampleTime = time();
75
+ this._soxrStream = new SoxrResampleStream({
76
+ inRate,
77
+ outRate,
78
+ numChannels: 1,
79
+ quality: this._quality,
80
+ });
81
+ }
82
+ _maybeClearInternalState() {
83
+ const currentTime = time();
84
+ if (this._clearAfterSecs !== null) {
85
+ if (currentTime - this._lastResampleTime > this._clearAfterSecs) {
86
+ if (this._soxrStream) {
87
+ this._soxrStream.clear();
88
+ }
89
+ }
90
+ }
91
+ this._lastResampleTime = currentTime;
92
+ }
93
+ _maybeInitializeSoxStream(inRate, outRate) {
94
+ if (this._soxrStream === null) {
95
+ this._initialize(inRate, outRate);
96
+ }
97
+ else {
98
+ this._maybeClearInternalState();
99
+ }
100
+ if (this._inRate !== inRate || this._outRate !== outRate) {
101
+ throw new Error(`SOXRStreamAudioResampler cannot be reused with different sample rates: ` +
102
+ `expected ${this._inRate}->${this._outRate}, got ${inRate}->${outRate}`);
103
+ }
104
+ return this._soxrStream;
105
+ }
106
+ /**
107
+ * Resample audio data using soxr.ResampleStream resampler library.
108
+ *
109
+ * @param audio Input audio data as raw bytes (16-bit signed integers).
110
+ * @param inRate Original sample rate in Hz.
111
+ * @param outRate Target sample rate in Hz.
112
+ * @returns Resampled audio data as raw bytes (16-bit signed integers).
113
+ */
114
+ async resample(audio, inRate, outRate) {
115
+ if (inRate === outRate) {
116
+ return audio;
117
+ }
118
+ const stream = this._maybeInitializeSoxStream(inRate, outRate);
119
+ const audioData = bytesToInt16(audio);
120
+ const resampledAudio = stream.resampleChunk(audioData);
121
+ return int16ToBytes(resampledAudio);
122
+ }
123
+ /**
124
+ * Emit the audio held in the filter and reset it for the next stream.
125
+ *
126
+ * @returns The remaining resampled audio as raw bytes, empty if no audio
127
+ * has been resampled yet.
128
+ */
129
+ async flush() {
130
+ if (!this._soxrStream) {
131
+ return new Uint8Array(0);
132
+ }
133
+ const tail = this._soxrStream.resampleChunk(EMPTY_AUDIO, true);
134
+ this._soxrStream.clear();
135
+ this._lastResampleTime = time();
136
+ return int16ToBytes(tail);
137
+ }
138
+ /** Discard the audio held in the filter and reset it for the next stream. */
139
+ async reset() {
140
+ if (this._soxrStream) {
141
+ this._soxrStream.clear();
142
+ this._lastResampleTime = time();
143
+ }
144
+ }
145
+ }
146
+ //# sourceMappingURL=soxr_stream_resampler.js.map
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Base turn analyzer for determining end-of-turn in audio conversations.
3
+ *
4
+ * Provides the abstract base class and enumeration for analyzing when a user
5
+ * has finished speaking in a conversation.
6
+ */
7
+ import type { MetricsData } from "../../metrics/metrics.ts";
8
+ /**
9
+ * State enumeration for end-of-turn analysis results.
10
+ *
11
+ * - COMPLETE: the user has finished their turn and stopped speaking.
12
+ * - INCOMPLETE: the user is still speaking or may continue speaking.
13
+ */
14
+ export declare const EndOfTurnState: {
15
+ readonly COMPLETE: 1;
16
+ readonly INCOMPLETE: 2;
17
+ };
18
+ export type EndOfTurnState = (typeof EndOfTurnState)[keyof typeof EndOfTurnState];
19
+ /** Base class for turn analyzer parameters. */
20
+ export declare class BaseTurnParams {
21
+ constructor(_options?: object);
22
+ }
23
+ export interface BaseTurnAnalyzerOptions {
24
+ /**
25
+ * Optional initial sample rate for audio processing. If provided, this
26
+ * will be used as the fixed sample rate.
27
+ */
28
+ sampleRate?: number | null;
29
+ }
30
+ /**
31
+ * Abstract base class for analyzing user end of turn.
32
+ *
33
+ * Defines the interface through abstract methods; subclasses implement the
34
+ * actual analysis.
35
+ */
36
+ export declare abstract class BaseTurnAnalyzer {
37
+ protected _initSampleRate: number | null;
38
+ protected _sampleRate: number;
39
+ constructor(options?: BaseTurnAnalyzerOptions);
40
+ /** The effective sample rate for audio processing. */
41
+ get sampleRate(): number;
42
+ /**
43
+ * Sets the sample rate for audio processing.
44
+ *
45
+ * If the initial sample rate was provided, it will use that; otherwise, it
46
+ * sets to the provided sample rate.
47
+ *
48
+ * @param sampleRate The sample rate to set.
49
+ */
50
+ setSampleRate(sampleRate: number): void;
51
+ /** Whether speech has been detected. */
52
+ abstract get speechTriggered(): boolean;
53
+ /** The current turn analyzer configuration parameters. */
54
+ abstract get params(): BaseTurnParams;
55
+ /**
56
+ * Appends audio data for analysis.
57
+ *
58
+ * @param buffer The audio data to append.
59
+ * @param isSpeech Indicates whether the appended audio is speech or not.
60
+ * @returns The resulting state after appending the audio.
61
+ */
62
+ abstract appendAudio(buffer: Uint8Array, isSpeech: boolean): EndOfTurnState;
63
+ /**
64
+ * Analyzes if an end of turn has occurred based on the audio input.
65
+ *
66
+ * @returns The result of the end of turn analysis and optional metrics.
67
+ */
68
+ abstract analyzeEndOfTurn(): Promise<[EndOfTurnState, MetricsData | null]>;
69
+ /**
70
+ * Update the VAD start trigger time.
71
+ *
72
+ * The turn analyzer may choose to change its buffer size depending on this
73
+ * value.
74
+ *
75
+ * @param vadStartSecs The number of seconds of voice activity before
76
+ * triggering the user speaking event.
77
+ */
78
+ updateVadStartSecs(_vadStartSecs: number): void;
79
+ /** Reset the turn analyzer to its initial state. */
80
+ abstract clear(): void;
81
+ /** Cleanup the turn analyzer. */
82
+ cleanup(): Promise<void>;
83
+ }
84
+ //# sourceMappingURL=base_turn_analyzer.d.ts.map
@@ -0,0 +1,61 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/turn/base_turn_analyzer.py
6
+ /**
7
+ * State enumeration for end-of-turn analysis results.
8
+ *
9
+ * - COMPLETE: the user has finished their turn and stopped speaking.
10
+ * - INCOMPLETE: the user is still speaking or may continue speaking.
11
+ */
12
+ export const EndOfTurnState = {
13
+ COMPLETE: 1,
14
+ INCOMPLETE: 2,
15
+ };
16
+ /** Base class for turn analyzer parameters. */
17
+ export class BaseTurnParams {
18
+ // Takes the options object so subclasses can forward it (Python **kwargs).
19
+ constructor(_options = {}) { }
20
+ }
21
+ /**
22
+ * Abstract base class for analyzing user end of turn.
23
+ *
24
+ * Defines the interface through abstract methods; subclasses implement the
25
+ * actual analysis.
26
+ */
27
+ export class BaseTurnAnalyzer {
28
+ _initSampleRate;
29
+ _sampleRate = 0;
30
+ constructor(options = {}) {
31
+ this._initSampleRate = options.sampleRate ?? null;
32
+ }
33
+ /** The effective sample rate for audio processing. */
34
+ get sampleRate() {
35
+ return this._sampleRate;
36
+ }
37
+ /**
38
+ * Sets the sample rate for audio processing.
39
+ *
40
+ * If the initial sample rate was provided, it will use that; otherwise, it
41
+ * sets to the provided sample rate.
42
+ *
43
+ * @param sampleRate The sample rate to set.
44
+ */
45
+ setSampleRate(sampleRate) {
46
+ this._sampleRate = this._initSampleRate || sampleRate;
47
+ }
48
+ /**
49
+ * Update the VAD start trigger time.
50
+ *
51
+ * The turn analyzer may choose to change its buffer size depending on this
52
+ * value.
53
+ *
54
+ * @param vadStartSecs The number of seconds of voice activity before
55
+ * triggering the user speaking event.
56
+ */
57
+ updateVadStartSecs(_vadStartSecs) { }
58
+ /** Cleanup the turn analyzer. */
59
+ async cleanup() { }
60
+ }
61
+ //# sourceMappingURL=base_turn_analyzer.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/turn/__init__.py
6
+ // Upstream's `__init__.py` is empty: import the package's modules directly.
7
+ export {};
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,30 @@
1
+ /** Number of feature frames produced for an 8 second input. */
2
+ export declare const WHISPER_NUM_FRAMES = 800;
3
+ /** Number of mel bins per feature frame. */
4
+ export declare const WHISPER_NUM_MELS = 80;
5
+ export interface ComputeWhisperLogMelFeaturesOptions {
6
+ /**
7
+ * If true, apply zero-mean unit-variance normalization to the waveform
8
+ * before computing the spectrogram. Matches the transformers
9
+ * `do_normalize=True` behavior. Defaults to true.
10
+ */
11
+ doNormalize?: boolean;
12
+ }
13
+ /**
14
+ * Compute Whisper-style log-mel features for Smart Turn v3.
15
+ *
16
+ * Replicates the output of
17
+ * `transformers.WhisperFeatureExtractor(chunk_length=8)(audio, sampling_rate=16000,
18
+ * padding="max_length", max_length=128000, truncation=True, do_normalize=...,
19
+ * return_tensors="np").input_features.squeeze(0)`.
20
+ *
21
+ * Assumes the caller has already padded or truncated the input to exactly
22
+ * 128000 samples (8 seconds at 16 kHz); shorter inputs are zero-padded at the
23
+ * end, longer inputs are truncated to the leading window.
24
+ *
25
+ * @param audio One-dimensional float audio at 16 kHz.
26
+ * @returns Float32Array holding a row-major `(80, 800)` matrix of log-mel
27
+ * features in roughly the `[-1, 1]` range.
28
+ */
29
+ export declare function computeWhisperLogMelFeatures(audio: Float32Array | ArrayLike<number>, options?: ComputeWhisperLogMelFeaturesOptions): Float32Array;
30
+ //# sourceMappingURL=_whisper_features.d.ts.map
@@ -0,0 +1,225 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/turn/smart_turn/_whisper_features.py
6
+ //
7
+ // Portions derived from Hugging Face Transformers
8
+ // (src/transformers/models/whisper/feature_extraction_whisper.py and
9
+ // src/transformers/audio_utils.py):
10
+ //
11
+ // Copyright 2022 The HuggingFace Inc. team.
12
+ // Copyright 2023 The HuggingFace Inc. team and the librosa & torchaudio authors.
13
+ //
14
+ // Licensed under the Apache License, Version 2.0
15
+ // (https://www.apache.org/licenses/LICENSE-2.0). Modified by Daily.
16
+ /**
17
+ * Dependency-free Whisper-style log-mel feature extraction for Smart Turn v3.
18
+ *
19
+ * Vendored from `transformers.WhisperFeatureExtractor` (upstream uses numpy;
20
+ * this port uses typed arrays) so Smart Turn v3 can compute features without
21
+ * the `transformers` package. The math mirrors
22
+ * `transformers.models.whisper.feature_extraction_whisper` and
23
+ * `transformers.audio_utils` (Apache-2.0 licensed).
24
+ */
25
+ const N_FFT = 400;
26
+ const HOP_LENGTH = 160;
27
+ const N_MELS = 80;
28
+ const SAMPLING_RATE = 16000;
29
+ const MEL_FLOOR = 1e-10;
30
+ const NORM_VARIANCE_EPS = 1e-7;
31
+ /** Number of feature frames produced for an 8 second input. */
32
+ export const WHISPER_NUM_FRAMES = 800;
33
+ /** Number of mel bins per feature frame. */
34
+ export const WHISPER_NUM_MELS = N_MELS;
35
+ /** Convert a frequency in hertz to mels using the Slaney scale. */
36
+ function hertzToMelSlaney(freq) {
37
+ const minLogHertz = 1000.0;
38
+ const minLogMel = 15.0;
39
+ const logstep = 27.0 / Math.log(6.4);
40
+ if (freq >= minLogHertz) {
41
+ return minLogMel + Math.log(freq / minLogHertz) * logstep;
42
+ }
43
+ return (3.0 * freq) / 200.0;
44
+ }
45
+ /** Convert a frequency in mels to hertz using the Slaney scale. */
46
+ function melToHertzSlaney(mels) {
47
+ const minLogHertz = 1000.0;
48
+ const minLogMel = 15.0;
49
+ const logstep = Math.log(6.4) / 27.0;
50
+ if (mels >= minLogMel) {
51
+ return minLogHertz * Math.exp(logstep * (mels - minLogMel));
52
+ }
53
+ return (200.0 * mels) / 3.0;
54
+ }
55
+ /** numpy.linspace(start, stop, num). */
56
+ function linspace(start, stop, num) {
57
+ const out = new Float64Array(num);
58
+ const step = (stop - start) / (num - 1);
59
+ for (let i = 0; i < num; i++)
60
+ out[i] = start + i * step;
61
+ if (num > 1)
62
+ out[num - 1] = stop;
63
+ return out;
64
+ }
65
+ /**
66
+ * Build a Slaney-normalized triangular mel filterbank.
67
+ *
68
+ * Returns a row-major matrix of shape `(numFrequencyBins, numMelFilters)`
69
+ * that projects a power spectrogram onto the mel scale.
70
+ */
71
+ function buildMelFilterbank(numFrequencyBins, numMelFilters, minFrequency, maxFrequency, samplingRate) {
72
+ const melMin = hertzToMelSlaney(minFrequency);
73
+ const melMax = hertzToMelSlaney(maxFrequency);
74
+ const melFreqs = linspace(melMin, melMax, numMelFilters + 2);
75
+ const filterFreqs = melFreqs.map(melToHertzSlaney);
76
+ const fftFreqs = linspace(0, Math.floor(samplingRate / 2), numFrequencyBins);
77
+ const filters = new Float64Array(numFrequencyBins * numMelFilters);
78
+ for (let k = 0; k < numFrequencyBins; k++) {
79
+ for (let m = 0; m < numMelFilters; m++) {
80
+ const f = fftFreqs[k];
81
+ const lower = filterFreqs[m];
82
+ const center = filterFreqs[m + 1];
83
+ const upper = filterFreqs[m + 2];
84
+ const downSlope = -(lower - f) / (center - lower);
85
+ const upSlope = (upper - f) / (upper - center);
86
+ let value = Math.max(0, Math.min(downSlope, upSlope));
87
+ // Slaney area normalization.
88
+ value *= 2.0 / (upper - lower);
89
+ filters[k * numMelFilters + m] = value;
90
+ }
91
+ }
92
+ return filters;
93
+ }
94
+ /** Return a periodic Hann window (matches torch.hann_window). */
95
+ function periodicHannWindow(windowLength) {
96
+ const out = new Float64Array(windowLength);
97
+ for (let n = 0; n < windowLength; n++) {
98
+ out[n] = 0.5 - 0.5 * Math.cos((2 * Math.PI * n) / windowLength);
99
+ }
100
+ return out;
101
+ }
102
+ // Precomputed constants for the Whisper feature extractor defaults used by
103
+ // Smart Turn v3.
104
+ const HANN_WINDOW = periodicHannWindow(N_FFT);
105
+ const NUM_FREQUENCY_BINS = Math.floor(N_FFT / 2) + 1;
106
+ const MEL_FILTERS = buildMelFilterbank(NUM_FREQUENCY_BINS, N_MELS, 0.0, SAMPLING_RATE / 2.0, SAMPLING_RATE);
107
+ const COS_TABLE = new Float64Array(N_FFT);
108
+ const SIN_TABLE = new Float64Array(N_FFT);
109
+ for (let i = 0; i < N_FFT; i++) {
110
+ COS_TABLE[i] = Math.cos((2 * Math.PI * i) / N_FFT);
111
+ SIN_TABLE[i] = Math.sin((2 * Math.PI * i) / N_FFT);
112
+ }
113
+ /**
114
+ * Compute a centered power spectrogram (reflect-padded, real DFT, |.|^2).
115
+ *
116
+ * Returns a row-major Float64Array of shape `(numFrequencyBins, numFrames)`.
117
+ */
118
+ function powerSpectrogram(waveform, window, frameLength, hopLength) {
119
+ const pad = Math.floor(frameLength / 2);
120
+ const n = waveform.length;
121
+ // Reflect padding (numpy mode="reflect": the edge sample is not repeated).
122
+ const padded = new Float64Array(n + 2 * pad);
123
+ for (let i = 0; i < pad; i++) {
124
+ padded[pad - 1 - i] = waveform[i + 1];
125
+ padded[pad + n + i] = waveform[n - 2 - i];
126
+ }
127
+ for (let i = 0; i < n; i++)
128
+ padded[pad + i] = waveform[i];
129
+ const numFrames = Math.floor((padded.length - frameLength) / hopLength) + 1;
130
+ const numBins = Math.floor(frameLength / 2) + 1;
131
+ const out = new Float64Array(numBins * numFrames);
132
+ const frame = new Float64Array(frameLength);
133
+ for (let t = 0; t < numFrames; t++) {
134
+ const start = t * hopLength;
135
+ for (let i = 0; i < frameLength; i++) {
136
+ frame[i] = padded[start + i] * window[i];
137
+ }
138
+ for (let k = 0; k < numBins; k++) {
139
+ let re = 0;
140
+ let im = 0;
141
+ let idx = 0;
142
+ for (let i = 0; i < frameLength; i++) {
143
+ const v = frame[i];
144
+ re += v * COS_TABLE[idx];
145
+ im -= v * SIN_TABLE[idx];
146
+ idx += k;
147
+ if (idx >= frameLength)
148
+ idx -= frameLength;
149
+ }
150
+ out[k * numFrames + t] = re * re + im * im;
151
+ }
152
+ }
153
+ return { data: out, numFrames };
154
+ }
155
+ /**
156
+ * Compute Whisper-style log-mel features for Smart Turn v3.
157
+ *
158
+ * Replicates the output of
159
+ * `transformers.WhisperFeatureExtractor(chunk_length=8)(audio, sampling_rate=16000,
160
+ * padding="max_length", max_length=128000, truncation=True, do_normalize=...,
161
+ * return_tensors="np").input_features.squeeze(0)`.
162
+ *
163
+ * Assumes the caller has already padded or truncated the input to exactly
164
+ * 128000 samples (8 seconds at 16 kHz); shorter inputs are zero-padded at the
165
+ * end, longer inputs are truncated to the leading window.
166
+ *
167
+ * @param audio One-dimensional float audio at 16 kHz.
168
+ * @returns Float32Array holding a row-major `(80, 800)` matrix of log-mel
169
+ * features in roughly the `[-1, 1]` range.
170
+ */
171
+ export function computeWhisperLogMelFeatures(audio, options = {}) {
172
+ const doNormalize = options.doNormalize ?? true;
173
+ const nSamples = SAMPLING_RATE * 8; // 128000
174
+ let x = new Float32Array(nSamples);
175
+ const len = Math.min(audio.length, nSamples);
176
+ for (let i = 0; i < len; i++)
177
+ x[i] = audio[i];
178
+ // Zero-mean unit-variance waveform normalization happens BEFORE the
179
+ // spectrogram, mirroring transformers' WhisperFeatureExtractor.__call__.
180
+ // Done in float32 to match the reference's precision (it normalizes the
181
+ // padded float32 buffer before the spectrogram promotes to float64).
182
+ if (doNormalize) {
183
+ let sum = 0;
184
+ for (let i = 0; i < nSamples; i++)
185
+ sum += x[i];
186
+ const mean = Math.fround(sum / nSamples);
187
+ let sq = 0;
188
+ for (let i = 0; i < nSamples; i++) {
189
+ const d = x[i] - mean;
190
+ sq += d * d;
191
+ }
192
+ const variance = Math.fround(sq / nSamples);
193
+ const denom = Math.fround(Math.sqrt(Math.fround(variance + NORM_VARIANCE_EPS)));
194
+ const normalized = new Float32Array(nSamples);
195
+ for (let i = 0; i < nSamples; i++) {
196
+ normalized[i] = Math.fround(x[i] - mean) / denom;
197
+ }
198
+ x = normalized;
199
+ }
200
+ const { data: magnitudes, numFrames } = powerSpectrogram(x, HANN_WINDOW, N_FFT, HOP_LENGTH);
201
+ // mel_spec = max(MEL_FLOOR, MEL_FILTERS.T @ magnitudes), then log10; the
202
+ // trailing frame is dropped, matching the reference.
203
+ const outFrames = numFrames - 1;
204
+ const logSpec = new Float64Array(N_MELS * outFrames);
205
+ let maxValue = Number.NEGATIVE_INFINITY;
206
+ for (let m = 0; m < N_MELS; m++) {
207
+ for (let t = 0; t < outFrames; t++) {
208
+ let acc = 0;
209
+ for (let k = 0; k < NUM_FREQUENCY_BINS; k++) {
210
+ acc += MEL_FILTERS[k * N_MELS + m] * magnitudes[k * numFrames + t];
211
+ }
212
+ const value = Math.log10(Math.max(MEL_FLOOR, acc));
213
+ logSpec[m * outFrames + t] = value;
214
+ if (value > maxValue)
215
+ maxValue = value;
216
+ }
217
+ }
218
+ const floor = maxValue - 8.0;
219
+ const out = new Float32Array(N_MELS * outFrames);
220
+ for (let i = 0; i < out.length; i++) {
221
+ out[i] = (Math.max(logSpec[i], floor) + 4.0) / 4.0;
222
+ }
223
+ return out;
224
+ }
225
+ //# sourceMappingURL=_whisper_features.js.map