dv-pipecat-ai 0.0.82.dev884__py3-none-any.whl → 0.0.85.dev1__py3-none-any.whl

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.

Potentially problematic release.


This version of dv-pipecat-ai might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-pipecat-ai
3
- Version: 0.0.82.dev884
3
+ Version: 0.0.85.dev1
4
4
  Summary: An open source framework for voice (and multimodal) assistants
5
5
  License-Expression: BSD-2-Clause
6
6
  Project-URL: Source, https://github.com/pipecat-ai/pipecat
@@ -134,6 +134,7 @@ Requires-Dist: fastapi<0.117.0,>=0.115.6; extra == "runner"
134
134
  Requires-Dist: pipecat-ai-small-webrtc-prebuilt>=1.0.0; extra == "runner"
135
135
  Provides-Extra: sambanova
136
136
  Provides-Extra: sarvam
137
+ Requires-Dist: sarvamai<1,>=0.1.19; extra == "sarvam"
137
138
  Requires-Dist: websockets<15.0,>=13.1; extra == "sarvam"
138
139
  Provides-Extra: sentry
139
140
  Requires-Dist: sentry-sdk~=2.23.1; extra == "sentry"
@@ -1,4 +1,4 @@
1
- dv_pipecat_ai-0.0.82.dev884.dist-info/licenses/LICENSE,sha256=DWY2QGf2eMCFhuu2ChairtT6CB7BEFffNVhXWc4Od08,1301
1
+ dv_pipecat_ai-0.0.85.dev1.dist-info/licenses/LICENSE,sha256=DWY2QGf2eMCFhuu2ChairtT6CB7BEFffNVhXWc4Od08,1301
2
2
  pipecat/__init__.py,sha256=j0Xm6adxHhd7D06dIyyPV_GlBYLlBnTAERVvD_jAARQ,861
3
3
  pipecat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  pipecat/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,7 +59,7 @@ pipecat/audio/turn/smart_turn/local_coreml_smart_turn.py,sha256=50kiBeZhnq7FZWZn
59
59
  pipecat/audio/turn/smart_turn/local_smart_turn.py,sha256=KVodqUTu8onfmfeOywgH98vBCNvBb-B3pvsQlTKyP_4,3570
60
60
  pipecat/audio/turn/smart_turn/local_smart_turn_v2.py,sha256=aYLMDURpmYycQgKsxbNEENtUe5oujeQ9H3Lbi0GYmZA,7160
61
61
  pipecat/audio/vad/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- pipecat/audio/vad/silero.py,sha256=FM3Qj7X13-5vL5lPYBE-irFDeVGHO5HULXyDUVLEiAU,7887
62
+ pipecat/audio/vad/silero.py,sha256=Cz4_hJjaBKbmUwZVbqMzED8orHOCsnF3zpERgBTw1Rw,7906
63
63
  pipecat/audio/vad/vad_analyzer.py,sha256=XkZLEe4z7Ja0lGoYZst1HNYqt5qOwG-vjsk_w8chiNA,7430
64
64
  pipecat/audio/vad/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
65
  pipecat/audio/vad/data/silero_vad.onnx,sha256=WX0ws-wHZgjQWUd7sUz-_9-VG_XK43DTj2XTO7_oIAQ,2327524
@@ -74,7 +74,7 @@ pipecat/extensions/voicemail/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
74
74
  pipecat/extensions/voicemail/voicemail_detector.py,sha256=g3L1m3cPJzsadeB5a8WRC9klH0D8m7xfPgB2YEaL6Do,29983
75
75
  pipecat/frames/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  pipecat/frames/frames.proto,sha256=JXZm3VXLR8zMOUcOuhVoe2mhM3MQIQGMJXLopdJO_5Y,839
77
- pipecat/frames/frames.py,sha256=2T_l8fLlG7uKIdCx2SxNhY3X5WHI-94YK1a7kxsQbiU,44294
77
+ pipecat/frames/frames.py,sha256=oqoo7p-uJOqak50mxhCGq7S0TusM0I4qp3QAftKHQnw,45428
78
78
  pipecat/frames/protobufs/frames_pb2.py,sha256=VHgGV_W7qQ4sfQK6RHb5_DggLm3PiSYMr6aBZ8_p1cQ,2590
79
79
  pipecat/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  pipecat/metrics/metrics.py,sha256=bdZNciEtLTtA-xgoKDz2RJAy6fKrXkTwz3pryVHzc2M,2713
@@ -97,11 +97,12 @@ pipecat/pipeline/service_switcher.py,sha256=GjqtBtMSyKa0XtjYa1_requMztPRQsbWDPyZ
97
97
  pipecat/pipeline/sync_parallel_pipeline.py,sha256=dZ17GoY2q8cHwNr9zPOM-TdiC4ERe9oGEkMEV9-YDtI,10654
98
98
  pipecat/pipeline/task.py,sha256=s87JozSQvdB2sLQs9fSuiEXvB62NxZn_rqY-XFbtrwo,34110
99
99
  pipecat/pipeline/task_observer.py,sha256=DswTNgdV1bS9buKNt-E5T5vNptffhjeqoD75YNmP1GQ,6835
100
+ pipecat/pipeline/tts_switcher.py,sha256=hyGFVRbDQfaIaeIzyVkUHA3sgAFpsdkRBMId_cZJ-gM,1067
100
101
  pipecat/pipeline/to_be_updated/merge_pipeline.py,sha256=jLEWdufIW3z1xZhdoLowdJ_SGz018DQw8JYGwlBYvE4,1845
101
102
  pipecat/processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
103
  pipecat/processors/async_generator.py,sha256=qPOZxk5eOad_NrF_Z06vWZ6deXIxb9AKZKYO2e5pkJs,2385
103
104
  pipecat/processors/consumer_processor.py,sha256=DrWCKnfblknZJ0bLmR_unIeJ1axQw4IPUn2IB3KLGGA,3228
104
- pipecat/processors/dtmf_aggregator.py,sha256=D9Ld0fTxi7lDneTV2MBf1kN6yzlnkK-xlNvUIIxPJ68,6861
105
+ pipecat/processors/dtmf_aggregator.py,sha256=mo_IXUlsnVl-_Xn8sbTGnRF4Lkts0h6E3uauGbeFyWs,10204
105
106
  pipecat/processors/frame_processor.py,sha256=VlU1h01FUilQ9UGzn7uuXELtNaASwbiMQxPChySJ7_g,29727
106
107
  pipecat/processors/idle_frame_processor.py,sha256=z8AuhGap61lA5K35P6XCaOpn4kkmK_9NZNppbpQxheU,3124
107
108
  pipecat/processors/logger.py,sha256=VGNwxQSc_F0rS3KBmfqas7f5aFyRQKfeljozOxfGXk4,2393
@@ -109,13 +110,13 @@ pipecat/processors/producer_processor.py,sha256=iIIOHZd77APvUGP7JqFbznAHUnCULcq_
109
110
  pipecat/processors/text_transformer.py,sha256=LnfWJYzntJhZhrQ1lgSSY4D4VbHtrQJgrC227M69ZYU,1718
110
111
  pipecat/processors/transcript_processor.py,sha256=CG9yej6WOiy_HhagNXjxkISHkHii0JDfK_V6opseC2E,11740
111
112
  pipecat/processors/two_stage_user_idle_processor.py,sha256=uf2aZh_lfW-eMxmFogP3R4taAJ1yXOSqjKsR7oXtD0Y,2938
112
- pipecat/processors/user_idle_processor.py,sha256=mGYv6UYxU7Qbgg4pTuGxDmZxnlyEtwMWaXtrQ9_fvaY,7969
113
+ pipecat/processors/user_idle_processor.py,sha256=PQItBx5bL1y_lFTtHf0zgLubjCXv60jU1jrVtm-K4bg,9268
113
114
  pipecat/processors/aggregators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
- pipecat/processors/aggregators/dtmf_aggregator.py,sha256=Vv5FKKt6NNH4tnPZT2MQBKijmekEhBDTrg4hESCeIMI,5324
115
+ pipecat/processors/aggregators/dtmf_aggregator.py,sha256=nngjLiaOtcZtuCNpYPyfUVLtUBUC6USuvS0tSdA9_zo,5054
115
116
  pipecat/processors/aggregators/gated.py,sha256=tii0sRrBkRW6y9Xq5iTWPnqlOEejU4VqPIPtdOa61pc,3073
116
117
  pipecat/processors/aggregators/gated_openai_llm_context.py,sha256=cr6MT8J6SpPzZbppKPOKe3_pt_5qXC9g6a4wvZDyrec,3005
117
118
  pipecat/processors/aggregators/llm_context.py,sha256=eDf1cQElcISLx3onaA9LCWuepzb2G_JGszLzpNXggXo,9723
118
- pipecat/processors/aggregators/llm_response.py,sha256=0w2jvDFUV6KM4K9TPe7j6UOPKF_p_vYX7SSfFnD1DIU,47559
119
+ pipecat/processors/aggregators/llm_response.py,sha256=P7DwrbzMQx6HUFmvc-9h65YPoGEU9JOpEYLwaUzkB_o,47671
119
120
  pipecat/processors/aggregators/llm_response_universal.py,sha256=fBnB3rZVdxj4iEKIWcnR7yTpqyKupbcg7IUv6XVxrDQ,34287
120
121
  pipecat/processors/aggregators/openai_llm_context.py,sha256=cC8DXdVPERRN04i0i-1Ys6kusvnbMALeH-Z8Pu5K684,12999
121
122
  pipecat/processors/aggregators/sentence.py,sha256=E7e3knfQl6HEGpYMKPklF1aO_gOn-rr7SnynErwfkQk,2235
@@ -128,7 +129,7 @@ pipecat/processors/filters/frame_filter.py,sha256=ZPtHToASfbbtwAdrnQH8POKIvT8hF0
128
129
  pipecat/processors/filters/function_filter.py,sha256=QNQZBIe1gzSPNI_4Zg2fgyeUhX-AmbIMp7r_XWNhwjU,2400
129
130
  pipecat/processors/filters/identity_filter.py,sha256=YNQWNNnuHivNwJa71Gc7A6ZHHq5Zw_kvuNrq9LUKK44,1418
130
131
  pipecat/processors/filters/null_filter.py,sha256=CourFfNXyhaesksiBuXxv5-mFSDpy6e9bOJ04p3iK40,1467
131
- pipecat/processors/filters/stt_mute_filter.py,sha256=BP1PX2Ka80ZZV1Mpp4OH9xA3V6cntsseQ7VUnXREWnw,9356
132
+ pipecat/processors/filters/stt_mute_filter.py,sha256=a9Pgp-z1pNQtDIKBtzdP4yFLf-3EhAoQAd0XSXWLpsQ,10147
132
133
  pipecat/processors/filters/wake_check_filter.py,sha256=EKOuw_DCK4EWJ794xS8Xza-QQImD-pjgWYp0wdyvHjI,5099
133
134
  pipecat/processors/filters/wake_notifier_filter.py,sha256=1yV3Tw8OROCS97nuZNs4igcNvRQyYu1RG2gNvYMWxKc,2077
134
135
  pipecat/processors/frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -145,14 +146,14 @@ pipecat/runner/livekit.py,sha256=in-2Io3FUZV-VcZZ-gQCx9L1WnKp5sHqmm7tDYlFNl4,458
145
146
  pipecat/runner/run.py,sha256=qY3Tj-sNRnhg_MrgyzbF78LriH1hh68ENnJMZi1sZAE,18815
146
147
  pipecat/runner/types.py,sha256=iG9A1ox1ePXiEo2bWANsi6RxpGOb5n_Am5O3enbojBM,1599
147
148
  pipecat/runner/utils.py,sha256=TLf5NfNFm7i4yFcNE58vDT8T-D9gbuPdtGryaHRWnIM,17722
148
- pipecat/serializers/__init__.py,sha256=OV61GQX5ZVU7l7Dt7UTBdv2wUF7ZvtbCoXryo7nnoGY,734
149
+ pipecat/serializers/__init__.py,sha256=xcmbbR7YYU5C4HPbo2WVgPij-Bl_qlrLcnunCdpcZkg,804
149
150
  pipecat/serializers/asterisk.py,sha256=bPuGuLiCf04_H0d9Gc-5BpEtqD9BRNWnpZZq5MZ1fDY,6091
150
151
  pipecat/serializers/base_serializer.py,sha256=OyBUZccs2ZT9mfkBbq2tGsUJMvci6o-j90Cl1sicPaI,2030
151
- pipecat/serializers/convox.py,sha256=MXCLhV6GMnoP8bI6-EVrObhrftEyTGOmzVeIU5ywmPo,9536
152
+ pipecat/serializers/convox.py,sha256=Irby_iZywgBtevlxiC8nE2GY3eh4yNNRi2YC-0vnNTY,11155
153
+ pipecat/serializers/custom.py,sha256=O0gHTyoSb1AZ_tEmE9VgRViYckmsNzjwCAqt-Xc2CaM,9081
152
154
  pipecat/serializers/exotel.py,sha256=U08EQeRzfW6O2P5mKeCjTy1Ur9KoTjVty3MehmVBEC0,5939
153
- pipecat/serializers/genesys.py,sha256=5g6_F-OIWSNmStgc6-bDT5mDQkCHHKxcOWSb-F4s2-A,3564
154
155
  pipecat/serializers/livekit.py,sha256=caVZlVJGV-SmEXE_H7i3DRo1RvC9FgGCVqi8IYGrpEo,2552
155
- pipecat/serializers/plivo.py,sha256=_1qYc5AQmCO8qTgMcvN5mK6lBcgjsrtdOEzgEo_r_x4,9242
156
+ pipecat/serializers/plivo.py,sha256=9hJ8gvkVp1_sFx30ELWMJPMQQskwLKWsD49DALzAsRA,9410
156
157
  pipecat/serializers/protobuf.py,sha256=h0UgVvIa3LXxtpbeQUq0tCGicGbDHxjiY6EdxXJO0_s,5162
157
158
  pipecat/serializers/telnyx.py,sha256=9JiU_Ii9d3_-5xOzXAOdQwTn9WEuT3dtKb2iGH8GeY4,10857
158
159
  pipecat/serializers/twilio.py,sha256=Eujl7fCImuJWkbgW9yrIaM2BICwNXzUalmb5RUyVKiA,9763
@@ -200,7 +201,7 @@ pipecat/services/deepgram/tts.py,sha256=H_2WCJEx3_L4ytrHHRNkA-6GKTd1coou_vvTfiEo
200
201
  pipecat/services/deepseek/__init__.py,sha256=bU5z_oNGzgrF_YpsD9pYIMtEibeZFaUobbRjJ9WcYyE,259
201
202
  pipecat/services/deepseek/llm.py,sha256=5KjpU2blmhUTM3LcRE1ymdsk6OmoFkIzeQgyNOGwQh8,3112
202
203
  pipecat/services/elevenlabs/__init__.py,sha256=fl_Z0Ua-IgONoFGn4O-pMafwufjZ9C6cCVJkR1dN5lI,288
203
- pipecat/services/elevenlabs/stt.py,sha256=yekKTu-ymsvP79LXYaXIFBF2uCBNfqqYmFoimlcSUIg,11291
204
+ pipecat/services/elevenlabs/stt.py,sha256=nMRfeboolkAopCcdMhLf4P8mHtz4WrsrCqo6-bFrwWw,11733
204
205
  pipecat/services/elevenlabs/tts.py,sha256=RZ9thg_kFWk1xhfmW047Pk0FjtWdkgnRMiGYFv3_cWk,42777
205
206
  pipecat/services/fal/__init__.py,sha256=z_kfZETvUcKy68Lyvni4B-RtdkOvz3J3eh6sFDVKq6M,278
206
207
  pipecat/services/fal/image.py,sha256=vArKLKrIGoZfw_xeZY_E7zbUzfzVsScj-R7mOmVqjRQ,4585
@@ -225,7 +226,6 @@ pipecat/services/google/llm_openai.py,sha256=CiyeRXG8t_e6A-kzAmvEGzQdvv_9v2ln96c
225
226
  pipecat/services/google/llm_vertex.py,sha256=yqs8pqUCTgRj5wvQFHPJbGduoIaXjaqPym5x-lh5LhI,5032
226
227
  pipecat/services/google/rtvi.py,sha256=PZb1yVny5YG7_XmJRXPzs3iYapeQ4XHreFN1v6KwTGM,3014
227
228
  pipecat/services/google/stt.py,sha256=1vKZNEKZ-KLKp_7lA_VijznSqTwYRFYK1sDn2qteKtI,32814
228
- pipecat/services/google/test-google-chirp.py,sha256=ji6ta7WDgKMu9yeKovuIVRlcMuk8S6XIyzIokHQY80E,1437
229
229
  pipecat/services/google/tts.py,sha256=S_JSPqzLABfuyHLRppNiDmq2g9OFcnJOrfysVg3OHbY,32038
230
230
  pipecat/services/grok/__init__.py,sha256=PyaTSnqwxd8jdF5aFTe3lWM-TBhfDyUu9ahRl6nPS-4,251
231
231
  pipecat/services/grok/llm.py,sha256=UwCWCiqGcDy_1T8Xo904CdXyAT7QfAQn3H_awtuxIcU,7409
@@ -289,14 +289,15 @@ pipecat/services/riva/tts.py,sha256=idbqx3I2NlWCXtrIFsjEaYapxA3BLIA14ai3aMBh-2w,
289
289
  pipecat/services/sambanova/__init__.py,sha256=oTXExLic-qTcsfsiWmssf3Elclf3IIWoN41_2IpoF18,128
290
290
  pipecat/services/sambanova/llm.py,sha256=5XVfPLEk__W8ykFqLdV95ZUhlGGkAaJwmbciLdZYtTc,8976
291
291
  pipecat/services/sambanova/stt.py,sha256=ZZgEZ7WQjLFHbCko-3LNTtVajjtfUvbtVLtFcaNadVQ,2536
292
- pipecat/services/sarvam/__init__.py,sha256=rfHd18ccf-oCytmkKFSyZ1tV-FWglM1D-iKNkA2_sxc,110
293
- pipecat/services/sarvam/tts.py,sha256=H7tKV7WAdefJ_JwVwSX6rPQ5m4RmdnflQnxOML-DgFY,24444
292
+ pipecat/services/sarvam/__init__.py,sha256=B4TN_tTHV9fWg0aSoPvfQlXISA0nJaQ9-u08I9UWvH4,280
293
+ pipecat/services/sarvam/stt.py,sha256=p9Iq4loMwnftNZ_S0WoFSoX7iBbRKyja6RsVWbpj508,19314
294
+ pipecat/services/sarvam/tts.py,sha256=K-AtWE1Q0ZZwshLP-7sCDmOSIWhuKOj91BCCE4N9XAk,25010
294
295
  pipecat/services/simli/__init__.py,sha256=cbDcqOaGsEgKbGYKpJ1Vv7LN4ZjOWA04sE84WW5vgQI,257
295
296
  pipecat/services/simli/video.py,sha256=fVMYsCE5epH9rTdhN_tyPPJw7W6TCMHCOe2akKHWduw,8330
296
297
  pipecat/services/soniox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
297
298
  pipecat/services/soniox/stt.py,sha256=AhJF2YOzmqgB80x22jocgzr3neYCBMyxzP_WjkYR9Gc,15441
298
299
  pipecat/services/speechmatics/__init__.py,sha256=Jgq1fqrZVkpWC21D79L1cn5Ub8PnYgnnCaqC5pOlbIc,89
299
- pipecat/services/speechmatics/stt.py,sha256=Ljc7cqDMLxdg99NTP4Fcs9rJ5Xfl_GzxH4gMiVhmR88,44261
300
+ pipecat/services/speechmatics/stt.py,sha256=K91na2r_aDVQ1ZsUFRPGTds8nIp_CO8ZpVHDmT4iojM,44741
300
301
  pipecat/services/tavus/__init__.py,sha256=SNyyi2Xq6tXIihDG2Bwvmg6Srbd-uWd1RwG-NKWcPuI,257
301
302
  pipecat/services/tavus/video.py,sha256=67WX49Th7v6xRIPoTpvbe15CB84OD9ax2ta9jL0fWiQ,10714
302
303
  pipecat/services/together/__init__.py,sha256=hNMycJDDf3CLiL9WA9fwvMdYphyDWLv0OabYIMgvC1c,259
@@ -304,7 +305,7 @@ pipecat/services/together/llm.py,sha256=VSayO-U6g9Ld0xK9CXRQPUsd5gWJKtiA8qDAyXgs
304
305
  pipecat/services/ultravox/__init__.py,sha256=EoHCSXI2o0DFQslELgkhAGZtxDj63gZi-9ZEhXljaKE,259
305
306
  pipecat/services/ultravox/stt.py,sha256=uCQm_-LbycXdXRV6IE1a6Mymis6tyww7V8PnPzAQtx8,16586
306
307
  pipecat/services/vistaar/__init__.py,sha256=UFfSWFN5rbzl6NN-E_OH_MFaSYodZWNlenAU0wk-rAI,110
307
- pipecat/services/vistaar/llm.py,sha256=CwPPZuv5ulB-2hrH65-uMGBNlAXA3Kf_rzcYIeEF-ME,17274
308
+ pipecat/services/vistaar/llm.py,sha256=5dYy5PGnOp79ccXUY1EsseQ8uSrXgBv5mhiBG5ji1bE,19202
308
309
  pipecat/services/whisper/__init__.py,sha256=smADmw0Fv98k7cGRuHTEcljKTO2WdZqLpJd0qsTCwH8,281
309
310
  pipecat/services/whisper/base_stt.py,sha256=VhslESPnYIeVbmnQTzmlZPV35TH49duxYTvJe0epNnE,7850
310
311
  pipecat/services/whisper/stt.py,sha256=9Qd56vWMzg3LtHikQnfgyMtl4odE6BCHDbpAn3HSWjw,17480
@@ -377,7 +378,7 @@ pipecat/utils/tracing/service_decorators.py,sha256=HwDCqLGijhYD3F8nxDuQmEw-YkRw0
377
378
  pipecat/utils/tracing/setup.py,sha256=7TEgPNpq6M8lww8OQvf0P9FzYc5A30xICGklVA-fua0,2892
378
379
  pipecat/utils/tracing/turn_context_provider.py,sha256=ikon3plFOx0XbMrH6DdeHttNpb-U0gzMZIm3bWLc9eI,2485
379
380
  pipecat/utils/tracing/turn_trace_observer.py,sha256=dma16SBJpYSOE58YDWy89QzHyQFc_9gQZszKeWixuwc,9725
380
- dv_pipecat_ai-0.0.82.dev884.dist-info/METADATA,sha256=Y5QzIXGi-M4w82gZ8JBv9XMh92836vwjSWGKK1oisp0,32639
381
- dv_pipecat_ai-0.0.82.dev884.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
382
- dv_pipecat_ai-0.0.82.dev884.dist-info/top_level.txt,sha256=kQzG20CxGf-nSsHmtXHx3hY2-8zHA3jYg8jk0TajqXc,8
383
- dv_pipecat_ai-0.0.82.dev884.dist-info/RECORD,,
381
+ dv_pipecat_ai-0.0.85.dev1.dist-info/METADATA,sha256=pgoQtdaXFQgc4EfFkWTTNBcDURv8diEDGXKD-gC0t04,32691
382
+ dv_pipecat_ai-0.0.85.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
383
+ dv_pipecat_ai-0.0.85.dev1.dist-info/top_level.txt,sha256=kQzG20CxGf-nSsHmtXHx3hY2-8zHA3jYg8jk0TajqXc,8
384
+ dv_pipecat_ai-0.0.85.dev1.dist-info/RECORD,,
@@ -172,7 +172,7 @@ class SileroVADAnalyzer(VADAnalyzer):
172
172
 
173
173
  self._last_reset_time = 0
174
174
 
175
- logger.debug("Loaded Silero VAD")
175
+ logger.debug(f"Loaded Silero VAD {model_file_path}")
176
176
 
177
177
  #
178
178
  # VADAnalyzer
pipecat/frames/frames.py CHANGED
@@ -1306,6 +1306,20 @@ class SpeechControlParamsFrame(SystemFrame):
1306
1306
  turn_params: Optional[SmartTurnParams] = None
1307
1307
 
1308
1308
 
1309
+ @dataclass
1310
+ class StartDTMFCaptureFrame(SystemFrame):
1311
+ """System frame indicating the bot is actively collecting DTMF input."""
1312
+
1313
+ pass
1314
+
1315
+
1316
+ @dataclass
1317
+ class EndDTMFCaptureFrame(SystemFrame):
1318
+ """System frame indicating DTMF collection has finished."""
1319
+
1320
+ pass
1321
+
1322
+
1309
1323
  #
1310
1324
  # Control frames
1311
1325
  #
@@ -1473,6 +1487,17 @@ class STTUpdateSettingsFrame(ServiceUpdateSettingsFrame):
1473
1487
  pass
1474
1488
 
1475
1489
 
1490
+ @dataclass
1491
+ class DTMFUpdateSettingsFrame(ServiceUpdateSettingsFrame):
1492
+ """Frame for updating DTMF aggregator settings.
1493
+
1494
+ Updates DTMF configuration dynamically during conversation flow.
1495
+ Settings can include: timeout, digits, end, reset parameters.
1496
+ """
1497
+
1498
+ pass
1499
+
1500
+
1476
1501
  @dataclass
1477
1502
  class VADParamsUpdateFrame(SystemFrame):
1478
1503
  """Frame for updating VAD parameters.
@@ -1564,6 +1589,19 @@ class StopUserIdleProcessorFrame(SystemFrame):
1564
1589
  pass
1565
1590
 
1566
1591
 
1592
+ @dataclass
1593
+ class ResetUserIdleProcessorFrame(SystemFrame):
1594
+ """Frame signalling the UserIdleProcessor to treat the user as active again.
1595
+
1596
+ Parameters:
1597
+ text: Optional transcription text that triggered the reset.
1598
+ is_final: Whether the transcription was marked final by STT.
1599
+ """
1600
+
1601
+ text: str = ""
1602
+ is_final: bool = False
1603
+
1604
+
1567
1605
  @dataclass
1568
1606
  class WaitForDTMFFrame(ControlFrame):
1569
1607
  """Frame to stop the UserIdleProcessor monitoring."""
@@ -1571,6 +1609,17 @@ class WaitForDTMFFrame(ControlFrame):
1571
1609
  pass
1572
1610
 
1573
1611
 
1612
+ @dataclass
1613
+ class CallTransferFrame(ControlFrame):
1614
+ """Frame to request call transfer to another number/destination.
1615
+
1616
+ Parameters:
1617
+ target: The phone number or destination to transfer the call to.
1618
+ """
1619
+
1620
+ target: str
1621
+
1622
+
1574
1623
  @dataclass
1575
1624
  class ManuallySwitchServiceFrame(ServiceSwitcherFrame):
1576
1625
  """A frame to request a manual switch in the active service in a ServiceSwitcher.
@@ -0,0 +1,30 @@
1
+ #
2
+ # Copyright (c) 2025, Daily
3
+ #
4
+ # SPDX-License-Identifier: BSD 2-Clause License
5
+ #
6
+
7
+ """TTS switcher for switching between different TTS services at runtime, with different switching strategies."""
8
+
9
+ from typing import List, Optional, Type
10
+
11
+ from pipecat.pipeline.service_switcher import ServiceSwitcher, StrategyType
12
+ from pipecat.services.tts_service import TTSService
13
+
14
+
15
+ class TTSSwitcher(ServiceSwitcher[StrategyType]):
16
+ """A pipeline that switches between different TTS services at runtime."""
17
+
18
+ def __init__(self, tts_services: List[TTSService], strategy_type: Type[StrategyType]):
19
+ """Initialize the TTS switcher with a list of TTS services and a switching strategy."""
20
+ super().__init__(tts_services, strategy_type)
21
+
22
+ @property
23
+ def tts_services(self) -> List[TTSService]:
24
+ """Get the list of TTS services managed by this switcher."""
25
+ return self.services
26
+
27
+ @property
28
+ def active_tts(self) -> Optional[TTSService]:
29
+ """Get the currently active TTS service, if any."""
30
+ return self.strategy.active_service
@@ -4,13 +4,6 @@
4
4
  # SPDX-License-Identifier: BSD 2-Clause License
5
5
  #
6
6
 
7
- """DTMF aggregation processor for converting keypad input to transcription.
8
-
9
- This module provides a frame processor that aggregates DTMF (Dual-Tone Multi-Frequency)
10
- keypad inputs into meaningful sequences and converts them to transcription frames
11
- for downstream processing by LLM context aggregators.
12
- """
13
-
14
7
  import asyncio
15
8
  from typing import Optional
16
9
 
@@ -24,7 +17,7 @@ from pipecat.frames.frames import (
24
17
  StartFrame,
25
18
  TranscriptionFrame,
26
19
  )
27
- from pipecat.processors.frame_processor import FrameDirection, FrameProcessor, FrameProcessorSetup
20
+ from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
28
21
  from pipecat.utils.time import time_now_iso8601
29
22
 
30
23
 
@@ -33,12 +26,16 @@ class DTMFAggregator(FrameProcessor):
33
26
 
34
27
  The aggregator accumulates digits from InputDTMFFrame instances and flushes
35
28
  when:
36
-
37
29
  - Timeout occurs (configurable idle period)
38
30
  - Termination digit is received (default: '#')
39
31
  - EndFrame or CancelFrame is received
40
32
 
41
33
  Emits TranscriptionFrame for compatibility with existing LLM context aggregators.
34
+
35
+ Args:
36
+ timeout: Idle timeout in seconds before flushing
37
+ termination_digit: Digit that triggers immediate flush
38
+ prefix: Prefix added to DTMF sequence in transcription
42
39
  """
43
40
 
44
41
  def __init__(
@@ -48,14 +45,6 @@ class DTMFAggregator(FrameProcessor):
48
45
  prefix: str = "DTMF: ",
49
46
  **kwargs,
50
47
  ):
51
- """Initialize the DTMF aggregator.
52
-
53
- Args:
54
- timeout: Idle timeout in seconds before flushing
55
- termination_digit: Digit that triggers immediate flush
56
- prefix: Prefix added to DTMF sequence in transcription
57
- **kwargs: Additional arguments passed to FrameProcessor
58
- """
59
48
  super().__init__(**kwargs)
60
49
  self._aggregation = ""
61
50
  self._idle_timeout = timeout
@@ -65,18 +54,7 @@ class DTMFAggregator(FrameProcessor):
65
54
  self._digit_event = asyncio.Event()
66
55
  self._aggregation_task: Optional[asyncio.Task] = None
67
56
 
68
- async def cleanup(self) -> None:
69
- """Clean up resources."""
70
- await super().cleanup()
71
- await self._stop_aggregation_task()
72
-
73
57
  async def process_frame(self, frame: Frame, direction: FrameDirection) -> None:
74
- """Process incoming frames and handle DTMF aggregation.
75
-
76
- Args:
77
- frame: The frame to process.
78
- direction: The direction of frame flow in the pipeline.
79
- """
80
58
  await super().process_frame(frame, direction)
81
59
 
82
60
  if isinstance(frame, StartFrame):
@@ -105,7 +83,7 @@ class DTMFAggregator(FrameProcessor):
105
83
 
106
84
  # For first digit, schedule interruption.
107
85
  if is_first_digit:
108
- await self.push_frame(BotInterruptionFrame(), FrameDirection.UPSTREAM)
86
+ asyncio.create_task(self._send_interruption_task())
109
87
 
110
88
  # Check for immediate flush conditions
111
89
  if frame.button == self._termination_digit:
@@ -114,6 +92,15 @@ class DTMFAggregator(FrameProcessor):
114
92
  # Signal digit received for timeout handling
115
93
  self._digit_event.set()
116
94
 
95
+ async def _send_interruption_task(self):
96
+ """Send interruption frame safely in a separate task."""
97
+ try:
98
+ # Send the interruption frame
99
+ await self.push_frame(BotInterruptionFrame(), FrameDirection.UPSTREAM)
100
+ except Exception as e:
101
+ # Log error but don't propagate
102
+ print(f"Error sending interruption: {e}")
103
+
117
104
  def _create_aggregation_task(self) -> None:
118
105
  """Creates the aggregation task if it hasn't been created yet."""
119
106
  if not self._aggregation_task:
@@ -132,6 +119,7 @@ class DTMFAggregator(FrameProcessor):
132
119
  await asyncio.wait_for(self._digit_event.wait(), timeout=self._idle_timeout)
133
120
  self._digit_event.clear()
134
121
  except asyncio.TimeoutError:
122
+ self.reset_watchdog()
135
123
  if self._aggregation:
136
124
  await self._flush_aggregation()
137
125
 
@@ -149,3 +137,8 @@ class DTMFAggregator(FrameProcessor):
149
137
  await self.push_frame(transcription_frame)
150
138
 
151
139
  self._aggregation = ""
140
+
141
+ async def cleanup(self) -> None:
142
+ """Clean up resources."""
143
+ await super().cleanup()
144
+ await self._stop_aggregation_task()
@@ -518,6 +518,7 @@ class LLMUserContextAggregator(LLMContextResponseAggregator):
518
518
  self.set_tool_choice(frame.tool_choice)
519
519
  elif isinstance(frame, LLMFullResponseStartFrame):
520
520
  self._last_llm_response_start_time = time.time()
521
+ self.logger.debug(f"Received LLMFullResponseStartFrame")
521
522
  self._latest_final_transcript = ""
522
523
  elif isinstance(frame, SpeechControlParamsFrame):
523
524
  self._vad_params = frame.vad_params
@@ -621,6 +622,7 @@ class LLMUserContextAggregator(LLMContextResponseAggregator):
621
622
  if len(self._aggregation) > 0:
622
623
  self.logger.debug(f"Dropping {self._aggregation}")
623
624
  self._aggregation = ""
625
+ self._latest_final_transcript = ""
624
626
  self._last_user_speaking_time = time.time()
625
627
  self._user_speaking = True
626
628
  self._waiting_for_aggregation = True