@pipedog/core 0.0.0 → 0.2.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 (736) 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/engine.d.ts +60 -0
  42. package/dist/audio/resamplers/engine.js +89 -0
  43. package/dist/audio/resamplers/index.d.ts +2 -0
  44. package/dist/audio/resamplers/index.js +8 -0
  45. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  46. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  47. package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
  48. package/dist/audio/resamplers/sinc_engine.js +235 -0
  49. package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
  50. package/dist/audio/resamplers/soxr_resampler.js +79 -0
  51. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
  52. package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
  53. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  54. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  55. package/dist/audio/turn/index.d.ts +2 -0
  56. package/dist/audio/turn/index.js +8 -0
  57. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  58. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  59. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  60. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  61. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  62. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
  63. package/dist/audio/utils.d.ts +224 -0
  64. package/dist/audio/utils.js +634 -0
  65. package/dist/audio/vad/data/index.d.ts +2 -0
  66. package/dist/audio/vad/data/index.js +8 -0
  67. package/dist/audio/vad/index.d.ts +2 -0
  68. package/dist/audio/vad/index.js +8 -0
  69. package/dist/audio/vad/vad_analyzer.d.ts +134 -0
  70. package/dist/audio/vad/vad_analyzer.js +249 -0
  71. package/dist/audio/vad/vad_controller.d.ts +143 -0
  72. package/dist/audio/vad/vad_controller.js +228 -0
  73. package/dist/audio/volume.d.ts +38 -0
  74. package/dist/audio/volume.js +75 -0
  75. package/dist/bus/adapters/base.d.ts +35 -0
  76. package/dist/bus/adapters/base.js +19 -0
  77. package/dist/bus/adapters/index.d.ts +10 -0
  78. package/dist/bus/adapters/index.js +15 -0
  79. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  80. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  81. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  82. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  83. package/dist/bus/bridge_processor.d.ts +111 -0
  84. package/dist/bus/bridge_processor.js +166 -0
  85. package/dist/bus/bus.d.ts +110 -0
  86. package/dist/bus/bus.js +200 -0
  87. package/dist/bus/index.d.ts +22 -0
  88. package/dist/bus/index.js +27 -0
  89. package/dist/bus/local/async_queue.d.ts +12 -0
  90. package/dist/bus/local/async_queue.js +21 -0
  91. package/dist/bus/local/index.d.ts +3 -0
  92. package/dist/bus/local/index.js +8 -0
  93. package/dist/bus/messages.d.ts +378 -0
  94. package/dist/bus/messages.js +357 -0
  95. package/dist/bus/network/index.d.ts +16 -0
  96. package/dist/bus/network/index.js +21 -0
  97. package/dist/bus/queue.d.ts +27 -0
  98. package/dist/bus/queue.js +51 -0
  99. package/dist/bus/serializers/base.d.ts +25 -0
  100. package/dist/bus/serializers/base.js +14 -0
  101. package/dist/bus/serializers/index.d.ts +9 -0
  102. package/dist/bus/serializers/index.js +14 -0
  103. package/dist/bus/serializers/json.d.ts +77 -0
  104. package/dist/bus/serializers/json.js +367 -0
  105. package/dist/bus/subscriber.d.ts +46 -0
  106. package/dist/bus/subscriber.js +27 -0
  107. package/dist/bus/ui/index.d.ts +3 -0
  108. package/dist/bus/ui/index.js +8 -0
  109. package/dist/bus/ui/messages.d.ts +186 -0
  110. package/dist/bus/ui/messages.js +171 -0
  111. package/dist/classifiers/base_classifier.d.ts +263 -0
  112. package/dist/classifiers/base_classifier.js +346 -0
  113. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  114. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  115. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  116. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  117. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  118. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  119. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  120. package/dist/classifiers/cloudflare/index.js +8 -0
  121. package/dist/classifiers/http_client.d.ts +70 -0
  122. package/dist/classifiers/http_client.js +161 -0
  123. package/dist/classifiers/index.d.ts +2 -0
  124. package/dist/classifiers/index.js +8 -0
  125. package/dist/classifiers/jev/classifier.d.ts +8 -0
  126. package/dist/classifiers/jev/classifier.js +13 -0
  127. package/dist/classifiers/jev/client.d.ts +8 -0
  128. package/dist/classifiers/jev/client.js +13 -0
  129. package/dist/classifiers/jev/index.d.ts +2 -0
  130. package/dist/classifiers/jev/index.js +8 -0
  131. package/dist/classifiers/llm/classifier.d.ts +72 -0
  132. package/dist/classifiers/llm/classifier.js +304 -0
  133. package/dist/classifiers/llm/index.d.ts +2 -0
  134. package/dist/classifiers/llm/index.js +8 -0
  135. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  136. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  137. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  138. package/dist/classifiers/openai/decisions/client.js +234 -0
  139. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  140. package/dist/classifiers/openai/decisions/index.js +8 -0
  141. package/dist/classifiers/openai/index.d.ts +2 -0
  142. package/dist/classifiers/openai/index.js +8 -0
  143. package/dist/classifiers/typesafe/index.d.ts +2 -0
  144. package/dist/classifiers/typesafe/index.js +8 -0
  145. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  146. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  147. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  148. package/dist/classifiers/typesafe/jev/client.js +233 -0
  149. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  150. package/dist/classifiers/typesafe/jev/index.js +8 -0
  151. package/dist/clocks/base_clock.d.ts +13 -0
  152. package/dist/clocks/base_clock.js +14 -0
  153. package/dist/clocks/index.d.ts +2 -0
  154. package/dist/clocks/index.js +8 -0
  155. package/dist/clocks/system_clock.d.ts +15 -0
  156. package/dist/clocks/system_clock.js +25 -0
  157. package/dist/frames/frames.d.ts +2533 -0
  158. package/dist/frames/frames.js +2485 -0
  159. package/dist/frames/index.d.ts +2 -0
  160. package/dist/frames/index.js +8 -0
  161. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  162. package/dist/frames/protobufs/frames_pb2.js +466 -0
  163. package/dist/index.d.ts +11 -0
  164. package/dist/index.js +56 -0
  165. package/dist/metrics/index.d.ts +2 -0
  166. package/dist/metrics/index.js +8 -0
  167. package/dist/metrics/metrics.d.ts +276 -0
  168. package/dist/metrics/metrics.js +254 -0
  169. package/dist/observers/base_observer.d.ts +173 -0
  170. package/dist/observers/base_observer.js +151 -0
  171. package/dist/observers/error_observer.d.ts +75 -0
  172. package/dist/observers/error_observer.js +87 -0
  173. package/dist/observers/function_call_observer.d.ts +157 -0
  174. package/dist/observers/function_call_observer.js +222 -0
  175. package/dist/observers/index.d.ts +2 -0
  176. package/dist/observers/index.js +8 -0
  177. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  178. package/dist/observers/loggers/debug_log_observer.js +228 -0
  179. package/dist/observers/loggers/index.d.ts +2 -0
  180. package/dist/observers/loggers/index.js +8 -0
  181. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  182. package/dist/observers/loggers/llm_log_observer.js +110 -0
  183. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  184. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  185. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  186. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  187. package/dist/observers/service_metrics_observer.d.ts +168 -0
  188. package/dist/observers/service_metrics_observer.js +236 -0
  189. package/dist/observers/speaking_observer.d.ts +104 -0
  190. package/dist/observers/speaking_observer.js +150 -0
  191. package/dist/observers/startup_timing_observer.d.ts +221 -0
  192. package/dist/observers/startup_timing_observer.js +365 -0
  193. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  194. package/dist/observers/turn_tracking_observer.js +189 -0
  195. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  196. package/dist/observers/user_bot_latency_observer.js +974 -0
  197. package/dist/pipeline/base_pipeline.d.ts +49 -0
  198. package/dist/pipeline/base_pipeline.js +101 -0
  199. package/dist/pipeline/capabilities.d.ts +76 -0
  200. package/dist/pipeline/capabilities.js +97 -0
  201. package/dist/pipeline/index.d.ts +2 -0
  202. package/dist/pipeline/index.js +8 -0
  203. package/dist/pipeline/job_context.d.ts +317 -0
  204. package/dist/pipeline/job_context.js +450 -0
  205. package/dist/pipeline/job_decorator.d.ts +54 -0
  206. package/dist/pipeline/job_decorator.js +92 -0
  207. package/dist/pipeline/llm_switcher.d.ts +84 -0
  208. package/dist/pipeline/llm_switcher.js +107 -0
  209. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  210. package/dist/pipeline/llm_with_backend.js +806 -0
  211. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  212. package/dist/pipeline/parallel_pipeline.js +200 -0
  213. package/dist/pipeline/pipeline.d.ts +126 -0
  214. package/dist/pipeline/pipeline.js +196 -0
  215. package/dist/pipeline/service_switcher.d.ts +287 -0
  216. package/dist/pipeline/service_switcher.js +509 -0
  217. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  218. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  219. package/dist/pipeline/worker.d.ts +821 -0
  220. package/dist/pipeline/worker.js +1656 -0
  221. package/dist/pipeline/worker_observer.d.ts +131 -0
  222. package/dist/pipeline/worker_observer.js +274 -0
  223. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  224. package/dist/pipeline/worker_ready_decorator.js +76 -0
  225. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  226. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  227. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  228. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  229. package/dist/processors/aggregators/gated.d.ts +43 -0
  230. package/dist/processors/aggregators/gated.js +86 -0
  231. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  232. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  233. package/dist/processors/aggregators/index.d.ts +2 -0
  234. package/dist/processors/aggregators/index.js +8 -0
  235. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  236. package/dist/processors/aggregators/llm_context.js +580 -0
  237. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  238. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  239. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  240. package/dist/processors/aggregators/llm_response.js +71 -0
  241. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  242. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  243. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  244. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  245. package/dist/processors/aggregators/sentence.d.ts +39 -0
  246. package/dist/processors/aggregators/sentence.js +69 -0
  247. package/dist/processors/async_generator.d.ts +42 -0
  248. package/dist/processors/async_generator.js +76 -0
  249. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  250. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  251. package/dist/processors/audio/index.d.ts +2 -0
  252. package/dist/processors/audio/index.js +8 -0
  253. package/dist/processors/audio/vad_processor.d.ts +67 -0
  254. package/dist/processors/audio/vad_processor.js +103 -0
  255. package/dist/processors/consumer_processor.d.ts +49 -0
  256. package/dist/processors/consumer_processor.js +85 -0
  257. package/dist/processors/filters/frame_filter.d.ts +39 -0
  258. package/dist/processors/filters/frame_filter.js +52 -0
  259. package/dist/processors/filters/function_filter.d.ts +59 -0
  260. package/dist/processors/filters/function_filter.js +78 -0
  261. package/dist/processors/filters/identity_filter.d.ts +33 -0
  262. package/dist/processors/filters/identity_filter.js +37 -0
  263. package/dist/processors/filters/index.d.ts +2 -0
  264. package/dist/processors/filters/index.js +8 -0
  265. package/dist/processors/filters/null_filter.d.ts +34 -0
  266. package/dist/processors/filters/null_filter.js +47 -0
  267. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  268. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  269. package/dist/processors/frame_processor.d.ts +360 -0
  270. package/dist/processors/frame_processor.js +932 -0
  271. package/dist/processors/frameworks/index.d.ts +2 -0
  272. package/dist/processors/frameworks/index.js +8 -0
  273. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  274. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  275. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  276. package/dist/processors/frameworks/rtvi/index.js +11 -0
  277. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  278. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  279. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  280. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  281. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  282. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  283. package/dist/processors/idle_frame_processor.d.ts +44 -0
  284. package/dist/processors/idle_frame_processor.js +86 -0
  285. package/dist/processors/index.d.ts +2 -0
  286. package/dist/processors/index.js +8 -0
  287. package/dist/processors/logger.d.ts +42 -0
  288. package/dist/processors/logger.js +87 -0
  289. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  290. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  291. package/dist/processors/metrics/index.d.ts +2 -0
  292. package/dist/processors/metrics/index.js +8 -0
  293. package/dist/processors/producer_processor.d.ts +68 -0
  294. package/dist/processors/producer_processor.js +78 -0
  295. package/dist/processors/text_transformer.d.ts +30 -0
  296. package/dist/processors/text_transformer.js +48 -0
  297. package/dist/registry/index.d.ts +3 -0
  298. package/dist/registry/index.js +8 -0
  299. package/dist/registry/registry.d.ts +69 -0
  300. package/dist/registry/registry.js +149 -0
  301. package/dist/registry/types.d.ts +47 -0
  302. package/dist/registry/types.js +39 -0
  303. package/dist/serializers/base_serializer.d.ts +94 -0
  304. package/dist/serializers/base_serializer.js +82 -0
  305. package/dist/serializers/index.d.ts +2 -0
  306. package/dist/serializers/index.js +8 -0
  307. package/dist/services/ai_service.d.ts +145 -0
  308. package/dist/services/ai_service.js +262 -0
  309. package/dist/services/anthropic/index.d.ts +2 -0
  310. package/dist/services/anthropic/index.js +7 -0
  311. package/dist/services/assemblyai/index.d.ts +2 -0
  312. package/dist/services/assemblyai/index.js +7 -0
  313. package/dist/services/asyncai/index.d.ts +2 -0
  314. package/dist/services/asyncai/index.js +7 -0
  315. package/dist/services/aws/index.d.ts +2 -0
  316. package/dist/services/aws/index.js +7 -0
  317. package/dist/services/azure/index.d.ts +2 -0
  318. package/dist/services/azure/index.js +7 -0
  319. package/dist/services/baseten/index.d.ts +2 -0
  320. package/dist/services/baseten/index.js +7 -0
  321. package/dist/services/bland/index.d.ts +2 -0
  322. package/dist/services/bland/index.js +7 -0
  323. package/dist/services/camb/index.d.ts +2 -0
  324. package/dist/services/camb/index.js +7 -0
  325. package/dist/services/cartesia/index.d.ts +2 -0
  326. package/dist/services/cartesia/index.js +7 -0
  327. package/dist/services/cerebras/index.d.ts +2 -0
  328. package/dist/services/cerebras/index.js +7 -0
  329. package/dist/services/crusoe/index.d.ts +2 -0
  330. package/dist/services/crusoe/index.js +7 -0
  331. package/dist/services/deepgram/index.d.ts +2 -0
  332. package/dist/services/deepgram/index.js +7 -0
  333. package/dist/services/deepseek/index.d.ts +2 -0
  334. package/dist/services/deepseek/index.js +7 -0
  335. package/dist/services/elevenlabs/index.d.ts +2 -0
  336. package/dist/services/elevenlabs/index.js +7 -0
  337. package/dist/services/fal/index.d.ts +2 -0
  338. package/dist/services/fal/index.js +7 -0
  339. package/dist/services/fireworks/index.d.ts +2 -0
  340. package/dist/services/fireworks/index.js +7 -0
  341. package/dist/services/fish/index.d.ts +2 -0
  342. package/dist/services/fish/index.js +7 -0
  343. package/dist/services/funasr/index.d.ts +3 -0
  344. package/dist/services/funasr/index.js +8 -0
  345. package/dist/services/gladia/index.d.ts +2 -0
  346. package/dist/services/gladia/index.js +7 -0
  347. package/dist/services/google/index.d.ts +2 -0
  348. package/dist/services/google/index.js +7 -0
  349. package/dist/services/gradium/index.d.ts +2 -0
  350. package/dist/services/gradium/index.js +7 -0
  351. package/dist/services/grok/index.d.ts +2 -0
  352. package/dist/services/grok/index.js +7 -0
  353. package/dist/services/groq/index.d.ts +2 -0
  354. package/dist/services/groq/index.js +7 -0
  355. package/dist/services/heygen/index.d.ts +2 -0
  356. package/dist/services/heygen/index.js +7 -0
  357. package/dist/services/hume/index.d.ts +2 -0
  358. package/dist/services/hume/index.js +7 -0
  359. package/dist/services/image_service.d.ts +52 -0
  360. package/dist/services/image_service.js +60 -0
  361. package/dist/services/inception/index.d.ts +2 -0
  362. package/dist/services/inception/index.js +7 -0
  363. package/dist/services/index.d.ts +2 -0
  364. package/dist/services/index.js +8 -0
  365. package/dist/services/inworld/index.d.ts +2 -0
  366. package/dist/services/inworld/index.js +7 -0
  367. package/dist/services/keenable/index.d.ts +2 -0
  368. package/dist/services/keenable/index.js +7 -0
  369. package/dist/services/kokoro/index.d.ts +2 -0
  370. package/dist/services/kokoro/index.js +7 -0
  371. package/dist/services/llm_service.d.ts +1106 -0
  372. package/dist/services/llm_service.js +2231 -0
  373. package/dist/services/mem0/index.d.ts +2 -0
  374. package/dist/services/mem0/index.js +7 -0
  375. package/dist/services/meta/index.d.ts +2 -0
  376. package/dist/services/meta/index.js +7 -0
  377. package/dist/services/minimax/index.d.ts +2 -0
  378. package/dist/services/minimax/index.js +7 -0
  379. package/dist/services/mistral/index.d.ts +2 -0
  380. package/dist/services/mistral/index.js +7 -0
  381. package/dist/services/moondream/index.d.ts +2 -0
  382. package/dist/services/moondream/index.js +7 -0
  383. package/dist/services/moonshine/index.d.ts +2 -0
  384. package/dist/services/moonshine/index.js +7 -0
  385. package/dist/services/nebius/index.d.ts +2 -0
  386. package/dist/services/nebius/index.js +7 -0
  387. package/dist/services/neuphonic/index.d.ts +2 -0
  388. package/dist/services/neuphonic/index.js +7 -0
  389. package/dist/services/novita/index.d.ts +2 -0
  390. package/dist/services/novita/index.js +7 -0
  391. package/dist/services/nvidia/index.d.ts +2 -0
  392. package/dist/services/nvidia/index.js +11 -0
  393. package/dist/services/ollama/index.d.ts +2 -0
  394. package/dist/services/ollama/index.js +7 -0
  395. package/dist/services/openai/index.d.ts +2 -0
  396. package/dist/services/openai/index.js +7 -0
  397. package/dist/services/openclaw/index.d.ts +14 -0
  398. package/dist/services/openclaw/index.js +19 -0
  399. package/dist/services/openrouter/index.d.ts +2 -0
  400. package/dist/services/openrouter/index.js +7 -0
  401. package/dist/services/perplexity/index.d.ts +2 -0
  402. package/dist/services/perplexity/index.js +7 -0
  403. package/dist/services/piper/index.d.ts +2 -0
  404. package/dist/services/piper/index.js +7 -0
  405. package/dist/services/pocket_tts/index.d.ts +2 -0
  406. package/dist/services/pocket_tts/index.js +7 -0
  407. package/dist/services/qwen/index.d.ts +2 -0
  408. package/dist/services/qwen/index.js +7 -0
  409. package/dist/services/resembleai/index.d.ts +2 -0
  410. package/dist/services/resembleai/index.js +7 -0
  411. package/dist/services/rime/index.d.ts +2 -0
  412. package/dist/services/rime/index.js +7 -0
  413. package/dist/services/sambanova/index.d.ts +2 -0
  414. package/dist/services/sambanova/index.js +7 -0
  415. package/dist/services/sarvam/index.d.ts +2 -0
  416. package/dist/services/sarvam/index.js +7 -0
  417. package/dist/services/settings.d.ts +356 -0
  418. package/dist/services/settings.js +437 -0
  419. package/dist/services/simli/index.d.ts +2 -0
  420. package/dist/services/simli/index.js +7 -0
  421. package/dist/services/smallest/index.d.ts +2 -0
  422. package/dist/services/smallest/index.js +7 -0
  423. package/dist/services/soniox/index.d.ts +2 -0
  424. package/dist/services/soniox/index.js +7 -0
  425. package/dist/services/speechify/index.d.ts +2 -0
  426. package/dist/services/speechify/index.js +7 -0
  427. package/dist/services/speechmatics/index.d.ts +2 -0
  428. package/dist/services/speechmatics/index.js +7 -0
  429. package/dist/services/stt_latency.d.ts +62 -0
  430. package/dist/services/stt_latency.js +71 -0
  431. package/dist/services/stt_service.d.ts +601 -0
  432. package/dist/services/stt_service.js +1044 -0
  433. package/dist/services/tavus/index.d.ts +2 -0
  434. package/dist/services/tavus/index.js +7 -0
  435. package/dist/services/together/index.d.ts +2 -0
  436. package/dist/services/together/index.js +7 -0
  437. package/dist/services/tts_service.d.ts +909 -0
  438. package/dist/services/tts_service.js +2018 -0
  439. package/dist/services/ultravox/index.d.ts +2 -0
  440. package/dist/services/ultravox/index.js +9 -0
  441. package/dist/services/vision_service.d.ts +56 -0
  442. package/dist/services/vision_service.js +62 -0
  443. package/dist/services/websocket_service.d.ts +213 -0
  444. package/dist/services/websocket_service.js +654 -0
  445. package/dist/services/whisper/index.d.ts +2 -0
  446. package/dist/services/whisper/index.js +9 -0
  447. package/dist/services/xai/index.d.ts +2 -0
  448. package/dist/services/xai/index.js +9 -0
  449. package/dist/services/xtts/index.d.ts +2 -0
  450. package/dist/services/xtts/index.js +9 -0
  451. package/dist/tests/index.d.ts +2 -0
  452. package/dist/tests/index.js +8 -0
  453. package/dist/tests/utils.d.ts +123 -0
  454. package/dist/tests/utils.js +212 -0
  455. package/dist/transcriptions/index.d.ts +2 -0
  456. package/dist/transcriptions/index.js +8 -0
  457. package/dist/transcriptions/language.d.ts +376 -0
  458. package/dist/transcriptions/language.js +543 -0
  459. package/dist/transports/base_input.d.ts +149 -0
  460. package/dist/transports/base_input.js +338 -0
  461. package/dist/transports/base_output.d.ts +432 -0
  462. package/dist/transports/base_output.js +1231 -0
  463. package/dist/transports/base_transport.d.ts +223 -0
  464. package/dist/transports/base_transport.js +167 -0
  465. package/dist/transports/daily/index.d.ts +2 -0
  466. package/dist/transports/daily/index.js +9 -0
  467. package/dist/transports/heygen/index.d.ts +2 -0
  468. package/dist/transports/heygen/index.js +9 -0
  469. package/dist/transports/index.d.ts +2 -0
  470. package/dist/transports/index.js +8 -0
  471. package/dist/transports/lemonslice/index.d.ts +2 -0
  472. package/dist/transports/lemonslice/index.js +9 -0
  473. package/dist/transports/livekit/index.d.ts +2 -0
  474. package/dist/transports/livekit/index.js +9 -0
  475. package/dist/transports/local/index.d.ts +2 -0
  476. package/dist/transports/local/index.js +9 -0
  477. package/dist/transports/moq/index.d.ts +2 -0
  478. package/dist/transports/moq/index.js +9 -0
  479. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  480. package/dist/transports/smallwebrtc/index.js +9 -0
  481. package/dist/transports/tavus/index.d.ts +2 -0
  482. package/dist/transports/tavus/index.js +9 -0
  483. package/dist/transports/video_in_sampler.d.ts +157 -0
  484. package/dist/transports/video_in_sampler.js +258 -0
  485. package/dist/transports/vonage/index.d.ts +2 -0
  486. package/dist/transports/vonage/index.js +9 -0
  487. package/dist/transports/websocket/index.d.ts +2 -0
  488. package/dist/transports/websocket/index.js +9 -0
  489. package/dist/transports/whatsapp/index.d.ts +2 -0
  490. package/dist/transports/whatsapp/index.js +9 -0
  491. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  492. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  493. package/dist/turns/empty_user_turn.d.ts +55 -0
  494. package/dist/turns/empty_user_turn.js +53 -0
  495. package/dist/turns/index.d.ts +2 -0
  496. package/dist/turns/index.js +8 -0
  497. package/dist/turns/speculation_gate.d.ts +169 -0
  498. package/dist/turns/speculation_gate.js +294 -0
  499. package/dist/turns/types.d.ts +33 -0
  500. package/dist/turns/types.js +35 -0
  501. package/dist/turns/user_idle_controller.d.ts +94 -0
  502. package/dist/turns/user_idle_controller.js +187 -0
  503. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  504. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  505. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  506. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  507. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  508. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  509. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  510. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  511. package/dist/turns/user_mute/index.d.ts +6 -0
  512. package/dist/turns/user_mute/index.js +11 -0
  513. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  514. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  515. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  516. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  517. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  518. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  519. package/dist/turns/user_start/index.d.ts +8 -0
  520. package/dist/turns/user_start/index.js +16 -0
  521. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  522. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  523. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  524. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  525. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  526. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  527. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  528. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  529. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  530. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  531. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  532. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  533. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  534. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  535. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  536. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  537. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  538. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  539. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  540. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  541. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  542. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  543. package/dist/turns/user_stop/index.d.ts +10 -0
  544. package/dist/turns/user_stop/index.js +15 -0
  545. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  546. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  547. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  548. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  549. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  550. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  551. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  552. package/dist/turns/user_turn_completion_mixin.js +591 -0
  553. package/dist/turns/user_turn_controller.d.ts +134 -0
  554. package/dist/turns/user_turn_controller.js +335 -0
  555. package/dist/turns/user_turn_processor.d.ts +87 -0
  556. package/dist/turns/user_turn_processor.js +180 -0
  557. package/dist/turns/user_turn_strategies.d.ts +187 -0
  558. package/dist/turns/user_turn_strategies.js +222 -0
  559. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  560. package/dist/utils/async_tool_cancellation.js +78 -0
  561. package/dist/utils/asyncio/index.d.ts +2 -0
  562. package/dist/utils/asyncio/index.js +7 -0
  563. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  564. package/dist/utils/asyncio/task_manager.js +105 -0
  565. package/dist/utils/base_object.d.ts +76 -0
  566. package/dist/utils/base_object.js +154 -0
  567. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  568. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  569. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  570. package/dist/utils/context/audio_context_manager.js +233 -0
  571. package/dist/utils/context/index.d.ts +2 -0
  572. package/dist/utils/context/index.js +7 -0
  573. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  574. package/dist/utils/context/llm_context_summarization.js +511 -0
  575. package/dist/utils/context/text_segment_map.d.ts +611 -0
  576. package/dist/utils/context/text_segment_map.js +1132 -0
  577. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  578. package/dist/utils/context/word_completion_tracker.js +441 -0
  579. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  580. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  581. package/dist/utils/deprecation.d.ts +28 -0
  582. package/dist/utils/deprecation.js +75 -0
  583. package/dist/utils/env.d.ts +38 -0
  584. package/dist/utils/env.js +62 -0
  585. package/dist/utils/errors.d.ts +75 -0
  586. package/dist/utils/errors.js +202 -0
  587. package/dist/utils/file_resolver.d.ts +126 -0
  588. package/dist/utils/file_resolver.js +314 -0
  589. package/dist/utils/file_storage.d.ts +115 -0
  590. package/dist/utils/file_storage.js +178 -0
  591. package/dist/utils/frame_queue.d.ts +36 -0
  592. package/dist/utils/frame_queue.js +66 -0
  593. package/dist/utils/http.d.ts +39 -0
  594. package/dist/utils/http.js +53 -0
  595. package/dist/utils/image.d.ts +14 -0
  596. package/dist/utils/image.js +63 -0
  597. package/dist/utils/index.d.ts +2 -0
  598. package/dist/utils/index.js +8 -0
  599. package/dist/utils/jpeg_encoder.d.ts +14 -0
  600. package/dist/utils/jpeg_encoder.js +315 -0
  601. package/dist/utils/log_config.d.ts +34 -0
  602. package/dist/utils/log_config.js +76 -0
  603. package/dist/utils/logger.d.ts +40 -0
  604. package/dist/utils/logger.js +91 -0
  605. package/dist/utils/mixin.d.ts +14 -0
  606. package/dist/utils/mixin.js +63 -0
  607. package/dist/utils/network.d.ts +73 -0
  608. package/dist/utils/network.js +90 -0
  609. package/dist/utils/security/allowed_origins.d.ts +16 -0
  610. package/dist/utils/security/allowed_origins.js +34 -0
  611. package/dist/utils/security/index.d.ts +2 -0
  612. package/dist/utils/security/index.js +7 -0
  613. package/dist/utils/security/redaction.d.ts +27 -0
  614. package/dist/utils/security/redaction.js +123 -0
  615. package/dist/utils/security/ssrf.d.ts +79 -0
  616. package/dist/utils/security/ssrf.js +327 -0
  617. package/dist/utils/shared.d.ts +35 -0
  618. package/dist/utils/shared.js +136 -0
  619. package/dist/utils/startup.d.ts +17 -0
  620. package/dist/utils/startup.js +130 -0
  621. package/dist/utils/string.d.ts +116 -0
  622. package/dist/utils/string.js +460 -0
  623. package/dist/utils/sync/base_notifier.d.ts +25 -0
  624. package/dist/utils/sync/base_notifier.js +16 -0
  625. package/dist/utils/sync/event_notifier.d.ts +38 -0
  626. package/dist/utils/sync/event_notifier.js +51 -0
  627. package/dist/utils/sync/index.d.ts +2 -0
  628. package/dist/utils/sync/index.js +7 -0
  629. package/dist/utils/text/alnum_utils.d.ts +109 -0
  630. package/dist/utils/text/alnum_utils.js +262 -0
  631. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  632. package/dist/utils/text/base_text_aggregator.js +102 -0
  633. package/dist/utils/text/base_text_filter.d.ts +54 -0
  634. package/dist/utils/text/base_text_filter.js +50 -0
  635. package/dist/utils/text/index.d.ts +2 -0
  636. package/dist/utils/text/index.js +7 -0
  637. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  638. package/dist/utils/text/markdown_text_filter.js +522 -0
  639. package/dist/utils/text/markup_utils.d.ts +54 -0
  640. package/dist/utils/text/markup_utils.js +156 -0
  641. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  642. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  643. package/dist/utils/text/phonemes.d.ts +60 -0
  644. package/dist/utils/text/phonemes.js +172 -0
  645. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  646. package/dist/utils/text/simple_text_aggregator.js +254 -0
  647. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  648. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  649. package/dist/utils/text/transforms/acronyms.d.ts +21 -0
  650. package/dist/utils/text/transforms/acronyms.js +31 -0
  651. package/dist/utils/text/transforms/currency.d.ts +16 -0
  652. package/dist/utils/text/transforms/currency.js +56 -0
  653. package/dist/utils/text/transforms/dates.d.ts +18 -0
  654. package/dist/utils/text/transforms/dates.js +102 -0
  655. package/dist/utils/text/transforms/email.d.ts +17 -0
  656. package/dist/utils/text/transforms/email.js +35 -0
  657. package/dist/utils/text/transforms/index.d.ts +37 -0
  658. package/dist/utils/text/transforms/index.js +42 -0
  659. package/dist/utils/text/transforms/numbers.d.ts +25 -0
  660. package/dist/utils/text/transforms/numbers.js +59 -0
  661. package/dist/utils/text/transforms/percentages.d.ts +16 -0
  662. package/dist/utils/text/transforms/percentages.js +32 -0
  663. package/dist/utils/text/transforms/phone.d.ts +21 -0
  664. package/dist/utils/text/transforms/phone.js +39 -0
  665. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  666. package/dist/utils/text/transforms/pronunciations.js +112 -0
  667. package/dist/utils/text/transforms/replacements.d.ts +39 -0
  668. package/dist/utils/text/transforms/replacements.js +46 -0
  669. package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
  670. package/dist/utils/text/transforms/strip_markdown.js +60 -0
  671. package/dist/utils/text/transforms/units.d.ts +22 -0
  672. package/dist/utils/text/transforms/units.js +81 -0
  673. package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
  674. package/dist/utils/text/transforms/voice_formatter.js +98 -0
  675. package/dist/utils/text/unicode_digits.d.ts +3 -0
  676. package/dist/utils/text/unicode_digits.js +34 -0
  677. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  678. package/dist/utils/text/word_timestamp_utils.js +52 -0
  679. package/dist/utils/time.d.ts +13 -0
  680. package/dist/utils/time.js +31 -0
  681. package/dist/utils/tracing/index.d.ts +3 -0
  682. package/dist/utils/tracing/index.js +8 -0
  683. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  684. package/dist/utils/tracing/service_attributes.js +434 -0
  685. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  686. package/dist/utils/tracing/service_decorators.js +1662 -0
  687. package/dist/utils/tracing/setup.d.ts +107 -0
  688. package/dist/utils/tracing/setup.js +160 -0
  689. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  690. package/dist/utils/tracing/tracing_context.js +97 -0
  691. package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
  692. package/dist/utils/tracing/turn_trace_observer.js +233 -0
  693. package/dist/utils/types.d.ts +80 -0
  694. package/dist/utils/types.js +108 -0
  695. package/dist/utils/utils.d.ts +5 -0
  696. package/dist/utils/utils.js +22 -0
  697. package/dist/utils/yaml.d.ts +179 -0
  698. package/dist/utils/yaml.js +556 -0
  699. package/dist/version.d.ts +3 -0
  700. package/dist/version.js +7 -0
  701. package/dist/workers/base_worker.d.ts +772 -0
  702. package/dist/workers/base_worker.js +1298 -0
  703. package/dist/workers/index.d.ts +2 -0
  704. package/dist/workers/index.js +8 -0
  705. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  706. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  707. package/dist/workers/llm/index.d.ts +6 -0
  708. package/dist/workers/llm/index.js +11 -0
  709. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  710. package/dist/workers/llm/llm_context_worker.js +72 -0
  711. package/dist/workers/llm/llm_worker.d.ts +180 -0
  712. package/dist/workers/llm/llm_worker.js +323 -0
  713. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  714. package/dist/workers/llm/tool_decorator.js +60 -0
  715. package/dist/workers/proxy/index.d.ts +3 -0
  716. package/dist/workers/proxy/index.js +9 -0
  717. package/dist/workers/proxy/websocket/client.d.ts +110 -0
  718. package/dist/workers/proxy/websocket/client.js +196 -0
  719. package/dist/workers/proxy/websocket/index.d.ts +3 -0
  720. package/dist/workers/proxy/websocket/index.js +10 -0
  721. package/dist/workers/runner.d.ts +268 -0
  722. package/dist/workers/runner.js +489 -0
  723. package/dist/workers/ui/index.d.ts +22 -0
  724. package/dist/workers/ui/index.js +27 -0
  725. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  726. package/dist/workers/ui/ui_event_decorator.js +75 -0
  727. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  728. package/dist/workers/ui/ui_job_context.js +17 -0
  729. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  730. package/dist/workers/ui/ui_prompts.js +41 -0
  731. package/dist/workers/ui/ui_tools.d.ts +32 -0
  732. package/dist/workers/ui/ui_tools.js +112 -0
  733. package/dist/workers/ui/ui_worker.d.ts +571 -0
  734. package/dist/workers/ui/ui_worker.js +1156 -0
  735. package/package.json +61 -3
  736. package/README.md +0 -5
@@ -0,0 +1,131 @@
1
+ /** Audio contexts a TTS service plays one after another. */
2
+ import { Queue } from "@pipedog/asyncio";
3
+ import { Frame, TTSAudioRawFrame } from "../../frames/frames.ts";
4
+ import { FrameQueue } from "../frame_queue.ts";
5
+ export interface AudioContextFrameOptions {
6
+ /** The audio context to play. */
7
+ contextId: string;
8
+ }
9
+ /**
10
+ * Marks where an audio context plays among the queued frames.
11
+ *
12
+ * - `contextId`: the audio context to play.
13
+ */
14
+ export declare class AudioContextFrame extends Frame {
15
+ contextId: string;
16
+ constructor(options: AudioContextFrameOptions);
17
+ }
18
+ /** The bytes of a sample split across audio chunks, with their format. */
19
+ interface AudioRemainder {
20
+ audio: Uint8Array;
21
+ sampleRate: number;
22
+ numChannels: number;
23
+ }
24
+ /** An item queued on an audio context: audio, other frames, word timestamps... `null` ends it. */
25
+ export type AudioContextItem = unknown;
26
+ /**
27
+ * Audio contexts and frames, played in the order they are queued.
28
+ *
29
+ * Each audio context has its own queue of items (audio, other frames, word
30
+ * timestamps), so a context's audio can arrive while an earlier one is still
31
+ * playing. `nextForPlayback` returns the next context or frame to play, and
32
+ * `get` returns a context's items until the context ends.
33
+ *
34
+ * `playingContextId` is the context `nextForPlayback` returned last. The
35
+ * caller sets it back to `null` when that context stops playing.
36
+ */
37
+ export declare class AudioContextManager {
38
+ #private;
39
+ protected _contexts: Map<string, Queue<unknown>>;
40
+ protected _remainders: Map<string, AudioRemainder>;
41
+ protected _queue: FrameQueue<Frame | null>;
42
+ playingContextId: string | null;
43
+ /** The audio contexts that haven't finished playing. */
44
+ get contextIds(): string[];
45
+ /**
46
+ * Whether an audio context exists and hasn't finished playing.
47
+ *
48
+ * @param contextId The audio context to check.
49
+ */
50
+ available(contextId: string): boolean;
51
+ /**
52
+ * Create an audio context and queue it to play after what's already queued.
53
+ *
54
+ * @param contextId The audio context to create.
55
+ * @param options.interruptible Whether `reset` drops the context while it
56
+ * waits to play. Defaults to true.
57
+ */
58
+ create(contextId: string, options?: {
59
+ interruptible?: boolean;
60
+ }): Promise<void>;
61
+ /**
62
+ * Append an item to an audio context. `null` ends the context.
63
+ *
64
+ * Audio is trimmed to whole samples, and a split sample is carried to the
65
+ * context's next audio frame. Providers may cut their PCM stream at any
66
+ * byte, but consumers read audio frame by frame.
67
+ *
68
+ * @param contextId The audio context to append to. It must exist.
69
+ * @param item The item to append, or `null` to end the context.
70
+ */
71
+ append(contextId: string, item: AudioContextItem): Promise<void>;
72
+ /**
73
+ * Restart the wait of `get` for an audio context, if it exists.
74
+ *
75
+ * @param contextId The audio context still in use.
76
+ */
77
+ keepalive(contextId: string): void;
78
+ /**
79
+ * Queue a frame to play after what's already queued.
80
+ *
81
+ * @param frame The frame to queue.
82
+ */
83
+ putFrame(frame: Frame): Promise<void>;
84
+ /** End playback once everything already queued has played. */
85
+ endPlayback(): Promise<void>;
86
+ /**
87
+ * Wait for the next audio context or frame to play.
88
+ *
89
+ * Contexts removed before they play are skipped.
90
+ *
91
+ * @returns An `AudioContextFrame`, whose context becomes the playing one,
92
+ * another queued frame, or `null` when playback ends.
93
+ */
94
+ nextForPlayback(): Promise<Frame | null>;
95
+ /**
96
+ * Return an audio context's next item, waiting up to `timeout` for it.
97
+ *
98
+ * A keepalive restarts the wait and is not returned.
99
+ *
100
+ * @param contextId The audio context to read.
101
+ * @param timeout Seconds to wait for an item.
102
+ * @returns The next item, or `null` when the context ends.
103
+ * @throws TimeoutError If no item arrives in time.
104
+ */
105
+ get(contextId: string, timeout: number): Promise<AudioContextItem>;
106
+ /**
107
+ * Remove an audio context and its queued items.
108
+ *
109
+ * @param contextId The audio context to remove.
110
+ */
111
+ remove(contextId: string): void;
112
+ /**
113
+ * Drop the frames and contexts waiting to play, except uninterruptible ones.
114
+ *
115
+ * The dropped contexts stay available until they are removed.
116
+ */
117
+ reset(): void;
118
+ /** Take the next item in play order. */
119
+ protected _nextQueued(): Promise<Frame | null>;
120
+ /**
121
+ * Trim an audio frame to whole samples, carrying a split sample forward.
122
+ *
123
+ * @returns False if the frame holds less than one whole sample and should
124
+ * be dropped, true otherwise.
125
+ */
126
+ protected _alignAudioFrame(contextId: string, frame: TTSAudioRawFrame): boolean;
127
+ /** Queue a context's held-back partial sample, zero-padded to a whole one. */
128
+ protected _flushAudioRemainder(contextId: string): Promise<void>;
129
+ }
130
+ export {};
131
+ //# sourceMappingURL=audio_context_manager.d.ts.map
@@ -0,0 +1,233 @@
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/utils/context/audio_context_manager.py
6
+ /** Audio contexts a TTS service plays one after another. */
7
+ import { Queue, waitFor } from "@pipedog/asyncio";
8
+ import { Frame, TTSAudioRawFrame, TTSStoppedFrame } from "../../frames/frames.js";
9
+ import { FrameQueue } from "../frame_queue.js";
10
+ /**
11
+ * Marks where an audio context plays among the queued frames.
12
+ *
13
+ * - `contextId`: the audio context to play.
14
+ */
15
+ export class AudioContextFrame extends Frame {
16
+ contextId;
17
+ constructor(options) {
18
+ super(options);
19
+ this.contextId = options.contextId;
20
+ }
21
+ }
22
+ const KEEPALIVE = Symbol("AudioContextManager.KEEPALIVE");
23
+ function concatBytes(a, b) {
24
+ const out = new Uint8Array(a.length + b.length);
25
+ out.set(a, 0);
26
+ out.set(b, a.length);
27
+ return out;
28
+ }
29
+ /**
30
+ * Audio contexts and frames, played in the order they are queued.
31
+ *
32
+ * Each audio context has its own queue of items (audio, other frames, word
33
+ * timestamps), so a context's audio can arrive while an earlier one is still
34
+ * playing. `nextForPlayback` returns the next context or frame to play, and
35
+ * `get` returns a context's items until the context ends.
36
+ *
37
+ * `playingContextId` is the context `nextForPlayback` returned last. The
38
+ * caller sets it back to `null` when that context stops playing.
39
+ */
40
+ export class AudioContextManager {
41
+ _contexts = new Map();
42
+ // Trailing bytes of a sample split across audio chunks, per context.
43
+ _remainders = new Map();
44
+ // Contexts and frames in play order. null ends playback.
45
+ _queue = new FrameQueue((item) => (item instanceof Frame ? item : null));
46
+ playingContextId = null;
47
+ /** The audio contexts that haven't finished playing. */
48
+ get contextIds() {
49
+ return [...this._contexts.keys()];
50
+ }
51
+ /**
52
+ * Whether an audio context exists and hasn't finished playing.
53
+ *
54
+ * @param contextId The audio context to check.
55
+ */
56
+ available(contextId) {
57
+ return this._contexts.has(contextId);
58
+ }
59
+ /**
60
+ * Create an audio context and queue it to play after what's already queued.
61
+ *
62
+ * @param contextId The audio context to create.
63
+ * @param options.interruptible Whether `reset` drops the context while it
64
+ * waits to play. Defaults to true.
65
+ */
66
+ async create(contextId, options = {}) {
67
+ this._contexts.set(contextId, new Queue());
68
+ const frame = new AudioContextFrame({ contextId });
69
+ frame.interruptible = options.interruptible ?? true;
70
+ await this._queue.put(frame);
71
+ }
72
+ /**
73
+ * Append an item to an audio context. `null` ends the context.
74
+ *
75
+ * Audio is trimmed to whole samples, and a split sample is carried to the
76
+ * context's next audio frame. Providers may cut their PCM stream at any
77
+ * byte, but consumers read audio frame by frame.
78
+ *
79
+ * @param contextId The audio context to append to. It must exist.
80
+ * @param item The item to append, or `null` to end the context.
81
+ */
82
+ async append(contextId, item) {
83
+ if (item instanceof TTSAudioRawFrame && !this._alignAudioFrame(contextId, item)) {
84
+ return;
85
+ }
86
+ // The context's audio ends here, so a held-back partial sample is
87
+ // queued before the stop frame (or the end marker) that follows it.
88
+ if (item === null || item instanceof TTSStoppedFrame) {
89
+ await this._flushAudioRemainder(contextId);
90
+ }
91
+ await this.#context(contextId).put(item);
92
+ }
93
+ /**
94
+ * Restart the wait of `get` for an audio context, if it exists.
95
+ *
96
+ * @param contextId The audio context still in use.
97
+ */
98
+ keepalive(contextId) {
99
+ if (this.available(contextId)) {
100
+ this.#context(contextId).putNowait(KEEPALIVE);
101
+ }
102
+ }
103
+ /**
104
+ * Queue a frame to play after what's already queued.
105
+ *
106
+ * @param frame The frame to queue.
107
+ */
108
+ async putFrame(frame) {
109
+ await this._queue.put(frame);
110
+ }
111
+ /** End playback once everything already queued has played. */
112
+ async endPlayback() {
113
+ await this._queue.put(null);
114
+ }
115
+ /**
116
+ * Wait for the next audio context or frame to play.
117
+ *
118
+ * Contexts removed before they play are skipped.
119
+ *
120
+ * @returns An `AudioContextFrame`, whose context becomes the playing one,
121
+ * another queued frame, or `null` when playback ends.
122
+ */
123
+ async nextForPlayback() {
124
+ let item = await this._nextQueued();
125
+ while (item instanceof AudioContextFrame && !this.available(item.contextId)) {
126
+ item = await this._nextQueued();
127
+ }
128
+ if (item instanceof AudioContextFrame) {
129
+ this.playingContextId = item.contextId;
130
+ }
131
+ return item;
132
+ }
133
+ /**
134
+ * Return an audio context's next item, waiting up to `timeout` for it.
135
+ *
136
+ * A keepalive restarts the wait and is not returned.
137
+ *
138
+ * @param contextId The audio context to read.
139
+ * @param timeout Seconds to wait for an item.
140
+ * @returns The next item, or `null` when the context ends.
141
+ * @throws TimeoutError If no item arrives in time.
142
+ */
143
+ async get(contextId, timeout) {
144
+ const queue = this.#context(contextId);
145
+ let item = KEEPALIVE;
146
+ while (item === KEEPALIVE) {
147
+ item = await waitFor(() => queue.get(), timeout);
148
+ }
149
+ return item;
150
+ }
151
+ /**
152
+ * Remove an audio context and its queued items.
153
+ *
154
+ * @param contextId The audio context to remove.
155
+ */
156
+ remove(contextId) {
157
+ this._contexts.delete(contextId);
158
+ this._remainders.delete(contextId);
159
+ }
160
+ /**
161
+ * Drop the frames and contexts waiting to play, except uninterruptible ones.
162
+ *
163
+ * The dropped contexts stay available until they are removed.
164
+ */
165
+ reset() {
166
+ this._queue.reset();
167
+ }
168
+ /** Take the next item in play order. */
169
+ async _nextQueued() {
170
+ const item = await this._queue.get();
171
+ this._queue.taskDone();
172
+ return item;
173
+ }
174
+ /**
175
+ * Trim an audio frame to whole samples, carrying a split sample forward.
176
+ *
177
+ * @returns False if the frame holds less than one whole sample and should
178
+ * be dropped, true otherwise.
179
+ */
180
+ _alignAudioFrame(contextId, frame) {
181
+ const blockSize = 2 * Math.max(frame.numChannels, 1);
182
+ const remainder = this._remainders.get(contextId);
183
+ this._remainders.delete(contextId);
184
+ if (!remainder && frame.audio.length % blockSize === 0) {
185
+ return true;
186
+ }
187
+ const audio = remainder ? concatBytes(remainder.audio, frame.audio) : frame.audio;
188
+ const alignedLength = audio.length - (audio.length % blockSize);
189
+ if (alignedLength < audio.length) {
190
+ this._remainders.set(contextId, {
191
+ audio: audio.slice(alignedLength),
192
+ sampleRate: frame.sampleRate,
193
+ numChannels: frame.numChannels,
194
+ });
195
+ }
196
+ if (alignedLength) {
197
+ frame.audio = audio.slice(0, alignedLength);
198
+ frame.numFrames = Math.trunc(alignedLength / blockSize);
199
+ }
200
+ return alignedLength > 0;
201
+ }
202
+ /** Queue a context's held-back partial sample, zero-padded to a whole one. */
203
+ async _flushAudioRemainder(contextId) {
204
+ const remainder = this._remainders.get(contextId);
205
+ this._remainders.delete(contextId);
206
+ if (!remainder) {
207
+ return;
208
+ }
209
+ const blockSize = 2 * Math.max(remainder.numChannels, 1);
210
+ let audio = remainder.audio;
211
+ if (audio.length < blockSize) {
212
+ const padded = new Uint8Array(blockSize);
213
+ padded.set(audio, 0);
214
+ audio = padded;
215
+ }
216
+ const frame = new TTSAudioRawFrame({
217
+ audio,
218
+ sampleRate: remainder.sampleRate,
219
+ numChannels: remainder.numChannels,
220
+ contextId,
221
+ });
222
+ await this.#context(contextId).put(frame);
223
+ }
224
+ #context(contextId) {
225
+ const queue = this._contexts.get(contextId);
226
+ if (!queue) {
227
+ // Upstream raises KeyError.
228
+ throw new Error(`KeyError: '${contextId}'`);
229
+ }
230
+ return queue;
231
+ }
232
+ }
233
+ //# sourceMappingURL=audio_context_manager.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
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/utils/context/__init__.py
6
+ export {};
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Utility for context summarization in LLM services.
3
+ *
4
+ * This module provides reusable functionality for automatically compressing
5
+ * conversation context when token limits are reached, enabling efficient
6
+ * long-running conversations.
7
+ *
8
+ * The deprecated `LLMContextSummarizationConfig` is not ported; use
9
+ * `LLMAutoContextSummarizationConfig` with a nested `LLMContextSummaryConfig`.
10
+ */
11
+ import { type LLMContext, type LLMContextMessage } from "../../processors/aggregators/llm_context.ts";
12
+ import type { LLMService } from "../../services/llm_service.ts";
13
+ /** Fallback timeout (seconds) used when summarizationTimeout is null. */
14
+ export declare const DEFAULT_SUMMARIZATION_TIMEOUT = 120;
15
+ /** Industry-standard heuristic: 1 token ≈ 4 characters. */
16
+ export declare const CHARS_PER_TOKEN = 4;
17
+ /** Estimated structural overhead per message. */
18
+ export declare const TOKEN_OVERHEAD_PER_MESSAGE = 10;
19
+ /** Rough estimate for image content. */
20
+ export declare const IMAGE_TOKEN_ESTIMATE = 500;
21
+ /** Keep summary at 80% of available space for safety. */
22
+ export declare const SUMMARY_TOKEN_BUFFER = 0.8;
23
+ /** Minimum tokens to allocate for summary. */
24
+ export declare const MIN_SUMMARY_TOKENS = 100;
25
+ export declare const DEFAULT_SUMMARIZATION_PROMPT = "You are summarizing a conversation between a user and an AI assistant.\n\nYour task:\n1. Create a concise summary that preserves:\n - Key facts, decisions, and agreements\n - Important context needed to continue the conversation\n - User preferences and requirements mentioned\n - Any unresolved questions or action items\n\n2. Format:\n - Use clear, factual statements\n - Group related information\n - Prioritize information likely to be referenced later\n - Keep the summary concise to fit within the specified token budget\n\n3. Omit:\n - Greetings and small talk\n - Redundant information\n - Tangential discussions that were resolved\n\nThe conversation transcript follows. Generate only the summary, no other text.";
26
+ export interface LLMContextSummaryConfigOptions {
27
+ /**
28
+ * Maximum token size for the generated summary. This value is passed
29
+ * directly to the LLM as the max_tokens parameter when generating the
30
+ * summary. Should be sized appropriately to allow the summary plus recent
31
+ * preserved messages to fit within reasonable context limits.
32
+ */
33
+ targetContextTokens?: number;
34
+ /**
35
+ * Number of recent messages to preserve uncompressed after each
36
+ * summarization. These messages maintain immediate conversational context.
37
+ */
38
+ minMessagesAfterSummary?: number;
39
+ /**
40
+ * Custom prompt for the LLM to use when generating summaries. If null,
41
+ * uses DEFAULT_SUMMARIZATION_PROMPT.
42
+ */
43
+ summarizationPrompt?: string | null;
44
+ /**
45
+ * Template for formatting the summary when injected into context. Must
46
+ * contain `{summary}` as a placeholder for the generated summary text.
47
+ * Allows applications to wrap the summary in custom delimiters (e.g., XML
48
+ * tags) so that system prompts can distinguish summaries from live
49
+ * conversation.
50
+ */
51
+ summaryMessageTemplate?: string;
52
+ /**
53
+ * Optional separate LLM service for generating summaries. When set,
54
+ * summarization requests are sent to this service instead of the
55
+ * pipeline's primary LLM. Useful for routing summarization to a
56
+ * cheaper/faster model (e.g., Gemini Flash) while keeping an expensive
57
+ * model for conversation. If null, uses the pipeline LLM.
58
+ */
59
+ llm?: LLMService | null;
60
+ /**
61
+ * Maximum time in seconds to wait for the LLM to generate a summary. If
62
+ * the call exceeds this timeout, summarization is aborted with an error
63
+ * and future summarizations are unblocked.
64
+ */
65
+ summarizationTimeout?: number;
66
+ }
67
+ /**
68
+ * Configuration for summary generation parameters.
69
+ *
70
+ * Contains settings that control how a summary is generated. Used by both
71
+ * automatic and manual summarization modes. See
72
+ * `LLMContextSummaryConfigOptions` for the fields.
73
+ */
74
+ export declare class LLMContextSummaryConfig {
75
+ targetContextTokens: number;
76
+ minMessagesAfterSummary: number;
77
+ summarizationPrompt: string | null;
78
+ summaryMessageTemplate: string;
79
+ llm: LLMService | null;
80
+ summarizationTimeout: number;
81
+ /**
82
+ * @throws Error If a parameter is out of range (upstream: ValueError).
83
+ */
84
+ constructor(options?: LLMContextSummaryConfigOptions);
85
+ /**
86
+ * The summarization prompt to use: the custom prompt if set, otherwise the
87
+ * default summarization prompt.
88
+ */
89
+ get summaryPrompt(): string;
90
+ }
91
+ export interface LLMAutoContextSummarizationConfigOptions {
92
+ /**
93
+ * Maximum allowed context size in tokens. When this limit is reached,
94
+ * summarization is triggered to compress the context. The tokens are
95
+ * calculated using the industry-standard approximation of 1 token ≈ 4
96
+ * characters. This measures the context messages only: the LLM service's
97
+ * `systemInstruction` is sent on every inference but is not part of the
98
+ * context, and summarization cannot compress it. Size this limit against
99
+ * the model's window minus the instruction. Set to null to disable
100
+ * token-based triggering. Defaults to 8000.
101
+ */
102
+ maxContextTokens?: number | null;
103
+ /**
104
+ * Maximum number of new messages that can accumulate since the last
105
+ * summary before triggering a new summarization. This ensures regular
106
+ * compression even if token limits are not reached. Set to null to disable
107
+ * message-count triggering. Defaults to 20.
108
+ */
109
+ maxUnsummarizedMessages?: number | null;
110
+ /**
111
+ * Configuration for summary generation parameters (prompt, token budget,
112
+ * messages to keep). If not provided, uses default `LLMContextSummaryConfig`
113
+ * values.
114
+ */
115
+ summaryConfig?: LLMContextSummaryConfig;
116
+ }
117
+ /**
118
+ * Configuration for automatic context summarization.
119
+ *
120
+ * Controls when conversation context is automatically compressed and how
121
+ * that summary is generated. Summarization is triggered when either the
122
+ * token limit or the unsummarized message count threshold is exceeded.
123
+ *
124
+ * At least one of `maxContextTokens` and `maxUnsummarizedMessages` must be
125
+ * set. Set the other to null to disable that threshold.
126
+ */
127
+ export declare class LLMAutoContextSummarizationConfig {
128
+ maxContextTokens: number | null;
129
+ maxUnsummarizedMessages: number | null;
130
+ summaryConfig: LLMContextSummaryConfig;
131
+ /**
132
+ * @throws Error If a parameter is out of range (upstream: ValueError).
133
+ */
134
+ constructor(options?: LLMAutoContextSummarizationConfigOptions);
135
+ }
136
+ export interface LLMMessagesToSummarizeOptions {
137
+ /** Messages to include in the summary. */
138
+ messages: LLMContextMessage[];
139
+ /** Index of the last message being summarized. */
140
+ lastSummarizedIndex: number;
141
+ }
142
+ /**
143
+ * Result of the getMessagesToSummarize operation.
144
+ *
145
+ * - `messages`: Messages to include in the summary.
146
+ * - `lastSummarizedIndex`: Index of the last message being summarized.
147
+ */
148
+ export declare class LLMMessagesToSummarize {
149
+ messages: LLMContextMessage[];
150
+ lastSummarizedIndex: number;
151
+ constructor(options: LLMMessagesToSummarizeOptions);
152
+ }
153
+ /**
154
+ * Utility providing context summarization capabilities for LLM processing.
155
+ *
156
+ * This utility enables automatic conversation context compression when token
157
+ * limits are reached. It provides functionality for both aggregators
158
+ * (which decide when to summarize) and LLM services (which generate summaries).
159
+ *
160
+ * Key features:
161
+ * - Token estimation using character-count heuristics (chars / 4)
162
+ * - Smart message selection (preserves system messages and recent context)
163
+ * - Function call awareness (avoids summarizing incomplete tool interactions)
164
+ * - Flexible transcript formatting for summarization
165
+ * - Maximum summary token calculation with safety buffers
166
+ *
167
+ * @example
168
+ * // Use the static methods directly on the class:
169
+ * const tokens = LLMContextSummarizationUtil.estimateContextTokens(context);
170
+ * const result = LLMContextSummarizationUtil.getMessagesToSummarize(context, 4);
171
+ * const transcript = LLMContextSummarizationUtil.formatMessagesForSummary(messages);
172
+ *
173
+ * Note: token estimation uses the industry-standard heuristic of 1 token ≈ 4 characters.
174
+ */
175
+ export declare class LLMContextSummarizationUtil {
176
+ /**
177
+ * Estimate token count for text using character count heuristic.
178
+ *
179
+ * Uses the industry-standard approximation of 1 token ≈ 4 characters.
180
+ * This works well across different content types (prose, code, etc.)
181
+ * and languages.
182
+ *
183
+ * Note: for more accurate token counts, use the model's official tokenizer.
184
+ * This is a rough estimate suitable for threshold checks and budgeting.
185
+ *
186
+ * @param text Text to estimate tokens for.
187
+ * @returns Estimated token count (characters / 4, rounded down).
188
+ */
189
+ static estimateTokens(text: string | null | undefined): number;
190
+ /**
191
+ * Estimate total token count for a context.
192
+ *
193
+ * Calculates an approximate token count by analyzing all messages,
194
+ * including text content, tool calls, and structural overhead.
195
+ *
196
+ * @param context LLM context to estimate.
197
+ * @returns The estimated total token count, covering message content (text
198
+ * and images), tool calls and their arguments, tool results, and
199
+ * `TOKEN_OVERHEAD_PER_MESSAGE` of structural overhead per message.
200
+ */
201
+ static estimateContextTokens(context: LLMContext): number;
202
+ /**
203
+ * Return true if a tool message content represents an unresolved call.
204
+ *
205
+ * A tool message is considered pending (unresolved) when its content is
206
+ * the synchronous `"IN_PROGRESS"` sentinel or the async
207
+ * `{"type": "async_tool", "status": "started"}` marker — both indicate
208
+ * that the actual result has not yet been written back to the context.
209
+ *
210
+ * @param content The `content` field of a tool-role context message.
211
+ * @returns True if the tool call should be treated as still in progress.
212
+ */
213
+ protected static _isToolMessagePending(content: string): boolean;
214
+ /**
215
+ * Find the earliest message index with incomplete function calls.
216
+ *
217
+ * Scans messages from `startIdx` up to (but not including) `summaryEnd`
218
+ * to identify tool calls whose responses either don't exist yet, fall in
219
+ * the kept portion of the context (>= summaryEnd), or are still marked as
220
+ * `IN_PROGRESS` (async calls whose results have not yet arrived).
221
+ *
222
+ * This prevents summarizing tool call requests when their responses would
223
+ * remain in the kept context as orphans, which the OpenAI API rejects,
224
+ * and avoids summarizing async function calls before their results arrive.
225
+ *
226
+ * @param messages List of messages to check.
227
+ * @param startIdx Index to start checking from.
228
+ * @param summaryEnd Exclusive upper bound for the scan (the first kept
229
+ * message index). Only tool responses within this range count as
230
+ * completing a call; responses beyond it are treated as absent, leaving
231
+ * the call "in progress".
232
+ * @returns Index of first message with function call in progress, or -1 if
233
+ * all function calls are complete within the scanned range.
234
+ */
235
+ protected static _getEarliestFunctionCallNotResolvedInRange(messages: readonly LLMContextMessage[], startIdx: number, summaryEnd: number): number;
236
+ /**
237
+ * Determine which messages should be included in summarization.
238
+ *
239
+ * Intelligently selects messages for summarization while preserving:
240
+ * - The first system message (defines assistant behavior)
241
+ * - The last N messages (maintains immediate conversation context)
242
+ * - Incomplete function call sequences (preserves tool interaction integrity)
243
+ *
244
+ * @param context The LLM context containing all messages.
245
+ * @param minMessagesToKeep Number of recent messages to exclude from summarization.
246
+ * @returns LLMMessagesToSummarize containing the messages to summarize and
247
+ * the index of the last message included.
248
+ */
249
+ static getMessagesToSummarize(context: LLMContext, minMessagesToKeep: number): LLMMessagesToSummarize;
250
+ /**
251
+ * Format messages as a transcript for summarization.
252
+ *
253
+ * @param messages Messages to format.
254
+ * @returns Formatted transcript string.
255
+ */
256
+ static formatMessagesForSummary(messages: readonly LLMContextMessage[]): string;
257
+ }
258
+ //# sourceMappingURL=llm_context_summarization.d.ts.map