dv-pipecat-ai 0.0.82.dev881__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.
- {dv_pipecat_ai-0.0.82.dev881.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/METADATA +2 -1
- {dv_pipecat_ai-0.0.82.dev881.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/RECORD +24 -22
- pipecat/audio/vad/data/silero_vad_v2.onnx +0 -0
- pipecat/audio/vad/silero.py +9 -3
- pipecat/frames/frames.py +49 -0
- pipecat/pipeline/tts_switcher.py +30 -0
- pipecat/processors/aggregators/dtmf_aggregator.py +22 -29
- pipecat/processors/aggregators/llm_response.py +2 -0
- pipecat/processors/dtmf_aggregator.py +175 -74
- pipecat/processors/filters/stt_mute_filter.py +15 -0
- pipecat/processors/user_idle_processor.py +32 -5
- pipecat/serializers/__init__.py +3 -1
- pipecat/serializers/convox.py +40 -3
- pipecat/serializers/custom.py +257 -0
- pipecat/serializers/plivo.py +4 -1
- pipecat/services/elevenlabs/stt.py +18 -8
- pipecat/services/sarvam/__init__.py +7 -0
- pipecat/services/sarvam/stt.py +540 -0
- pipecat/services/sarvam/tts.py +13 -1
- pipecat/services/speechmatics/stt.py +16 -0
- pipecat/services/vistaar/llm.py +45 -7
- pipecat/serializers/genesys.py +0 -95
- pipecat/services/google/test-google-chirp.py +0 -45
- {dv_pipecat_ai-0.0.82.dev881.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/WHEEL +0 -0
- {dv_pipecat_ai-0.0.82.dev881.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/licenses/LICENSE +0 -0
- {dv_pipecat_ai-0.0.82.dev881.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dv-pipecat-ai
|
|
3
|
-
Version: 0.0.
|
|
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.
|
|
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,10 +59,11 @@ 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=
|
|
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
|
|
66
|
+
pipecat/audio/vad/data/silero_vad_v2.onnx,sha256=JiOilT9v89LB5hdAxs23FoEzR5smff7xFKSjzFvdeI8,2327524
|
|
66
67
|
pipecat/clocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
68
|
pipecat/clocks/base_clock.py,sha256=PuTmCtPKz5VG0VxhN5cyhbvduEBnfNPgA6GLAu1eSns,929
|
|
68
69
|
pipecat/clocks/system_clock.py,sha256=ht6TdDAn0JVXEmhLdt5igcHMQOkKO4YHNuOjuKcxkUU,1315
|
|
@@ -73,7 +74,7 @@ pipecat/extensions/voicemail/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
|
73
74
|
pipecat/extensions/voicemail/voicemail_detector.py,sha256=g3L1m3cPJzsadeB5a8WRC9klH0D8m7xfPgB2YEaL6Do,29983
|
|
74
75
|
pipecat/frames/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
76
|
pipecat/frames/frames.proto,sha256=JXZm3VXLR8zMOUcOuhVoe2mhM3MQIQGMJXLopdJO_5Y,839
|
|
76
|
-
pipecat/frames/frames.py,sha256=
|
|
77
|
+
pipecat/frames/frames.py,sha256=oqoo7p-uJOqak50mxhCGq7S0TusM0I4qp3QAftKHQnw,45428
|
|
77
78
|
pipecat/frames/protobufs/frames_pb2.py,sha256=VHgGV_W7qQ4sfQK6RHb5_DggLm3PiSYMr6aBZ8_p1cQ,2590
|
|
78
79
|
pipecat/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
80
|
pipecat/metrics/metrics.py,sha256=bdZNciEtLTtA-xgoKDz2RJAy6fKrXkTwz3pryVHzc2M,2713
|
|
@@ -96,11 +97,12 @@ pipecat/pipeline/service_switcher.py,sha256=GjqtBtMSyKa0XtjYa1_requMztPRQsbWDPyZ
|
|
|
96
97
|
pipecat/pipeline/sync_parallel_pipeline.py,sha256=dZ17GoY2q8cHwNr9zPOM-TdiC4ERe9oGEkMEV9-YDtI,10654
|
|
97
98
|
pipecat/pipeline/task.py,sha256=s87JozSQvdB2sLQs9fSuiEXvB62NxZn_rqY-XFbtrwo,34110
|
|
98
99
|
pipecat/pipeline/task_observer.py,sha256=DswTNgdV1bS9buKNt-E5T5vNptffhjeqoD75YNmP1GQ,6835
|
|
100
|
+
pipecat/pipeline/tts_switcher.py,sha256=hyGFVRbDQfaIaeIzyVkUHA3sgAFpsdkRBMId_cZJ-gM,1067
|
|
99
101
|
pipecat/pipeline/to_be_updated/merge_pipeline.py,sha256=jLEWdufIW3z1xZhdoLowdJ_SGz018DQw8JYGwlBYvE4,1845
|
|
100
102
|
pipecat/processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
103
|
pipecat/processors/async_generator.py,sha256=qPOZxk5eOad_NrF_Z06vWZ6deXIxb9AKZKYO2e5pkJs,2385
|
|
102
104
|
pipecat/processors/consumer_processor.py,sha256=DrWCKnfblknZJ0bLmR_unIeJ1axQw4IPUn2IB3KLGGA,3228
|
|
103
|
-
pipecat/processors/dtmf_aggregator.py,sha256=
|
|
105
|
+
pipecat/processors/dtmf_aggregator.py,sha256=mo_IXUlsnVl-_Xn8sbTGnRF4Lkts0h6E3uauGbeFyWs,10204
|
|
104
106
|
pipecat/processors/frame_processor.py,sha256=VlU1h01FUilQ9UGzn7uuXELtNaASwbiMQxPChySJ7_g,29727
|
|
105
107
|
pipecat/processors/idle_frame_processor.py,sha256=z8AuhGap61lA5K35P6XCaOpn4kkmK_9NZNppbpQxheU,3124
|
|
106
108
|
pipecat/processors/logger.py,sha256=VGNwxQSc_F0rS3KBmfqas7f5aFyRQKfeljozOxfGXk4,2393
|
|
@@ -108,13 +110,13 @@ pipecat/processors/producer_processor.py,sha256=iIIOHZd77APvUGP7JqFbznAHUnCULcq_
|
|
|
108
110
|
pipecat/processors/text_transformer.py,sha256=LnfWJYzntJhZhrQ1lgSSY4D4VbHtrQJgrC227M69ZYU,1718
|
|
109
111
|
pipecat/processors/transcript_processor.py,sha256=CG9yej6WOiy_HhagNXjxkISHkHii0JDfK_V6opseC2E,11740
|
|
110
112
|
pipecat/processors/two_stage_user_idle_processor.py,sha256=uf2aZh_lfW-eMxmFogP3R4taAJ1yXOSqjKsR7oXtD0Y,2938
|
|
111
|
-
pipecat/processors/user_idle_processor.py,sha256=
|
|
113
|
+
pipecat/processors/user_idle_processor.py,sha256=PQItBx5bL1y_lFTtHf0zgLubjCXv60jU1jrVtm-K4bg,9268
|
|
112
114
|
pipecat/processors/aggregators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
113
|
-
pipecat/processors/aggregators/dtmf_aggregator.py,sha256=
|
|
115
|
+
pipecat/processors/aggregators/dtmf_aggregator.py,sha256=nngjLiaOtcZtuCNpYPyfUVLtUBUC6USuvS0tSdA9_zo,5054
|
|
114
116
|
pipecat/processors/aggregators/gated.py,sha256=tii0sRrBkRW6y9Xq5iTWPnqlOEejU4VqPIPtdOa61pc,3073
|
|
115
117
|
pipecat/processors/aggregators/gated_openai_llm_context.py,sha256=cr6MT8J6SpPzZbppKPOKe3_pt_5qXC9g6a4wvZDyrec,3005
|
|
116
118
|
pipecat/processors/aggregators/llm_context.py,sha256=eDf1cQElcISLx3onaA9LCWuepzb2G_JGszLzpNXggXo,9723
|
|
117
|
-
pipecat/processors/aggregators/llm_response.py,sha256=
|
|
119
|
+
pipecat/processors/aggregators/llm_response.py,sha256=P7DwrbzMQx6HUFmvc-9h65YPoGEU9JOpEYLwaUzkB_o,47671
|
|
118
120
|
pipecat/processors/aggregators/llm_response_universal.py,sha256=fBnB3rZVdxj4iEKIWcnR7yTpqyKupbcg7IUv6XVxrDQ,34287
|
|
119
121
|
pipecat/processors/aggregators/openai_llm_context.py,sha256=cC8DXdVPERRN04i0i-1Ys6kusvnbMALeH-Z8Pu5K684,12999
|
|
120
122
|
pipecat/processors/aggregators/sentence.py,sha256=E7e3knfQl6HEGpYMKPklF1aO_gOn-rr7SnynErwfkQk,2235
|
|
@@ -127,7 +129,7 @@ pipecat/processors/filters/frame_filter.py,sha256=ZPtHToASfbbtwAdrnQH8POKIvT8hF0
|
|
|
127
129
|
pipecat/processors/filters/function_filter.py,sha256=QNQZBIe1gzSPNI_4Zg2fgyeUhX-AmbIMp7r_XWNhwjU,2400
|
|
128
130
|
pipecat/processors/filters/identity_filter.py,sha256=YNQWNNnuHivNwJa71Gc7A6ZHHq5Zw_kvuNrq9LUKK44,1418
|
|
129
131
|
pipecat/processors/filters/null_filter.py,sha256=CourFfNXyhaesksiBuXxv5-mFSDpy6e9bOJ04p3iK40,1467
|
|
130
|
-
pipecat/processors/filters/stt_mute_filter.py,sha256=
|
|
132
|
+
pipecat/processors/filters/stt_mute_filter.py,sha256=a9Pgp-z1pNQtDIKBtzdP4yFLf-3EhAoQAd0XSXWLpsQ,10147
|
|
131
133
|
pipecat/processors/filters/wake_check_filter.py,sha256=EKOuw_DCK4EWJ794xS8Xza-QQImD-pjgWYp0wdyvHjI,5099
|
|
132
134
|
pipecat/processors/filters/wake_notifier_filter.py,sha256=1yV3Tw8OROCS97nuZNs4igcNvRQyYu1RG2gNvYMWxKc,2077
|
|
133
135
|
pipecat/processors/frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -144,14 +146,14 @@ pipecat/runner/livekit.py,sha256=in-2Io3FUZV-VcZZ-gQCx9L1WnKp5sHqmm7tDYlFNl4,458
|
|
|
144
146
|
pipecat/runner/run.py,sha256=qY3Tj-sNRnhg_MrgyzbF78LriH1hh68ENnJMZi1sZAE,18815
|
|
145
147
|
pipecat/runner/types.py,sha256=iG9A1ox1ePXiEo2bWANsi6RxpGOb5n_Am5O3enbojBM,1599
|
|
146
148
|
pipecat/runner/utils.py,sha256=TLf5NfNFm7i4yFcNE58vDT8T-D9gbuPdtGryaHRWnIM,17722
|
|
147
|
-
pipecat/serializers/__init__.py,sha256=
|
|
149
|
+
pipecat/serializers/__init__.py,sha256=xcmbbR7YYU5C4HPbo2WVgPij-Bl_qlrLcnunCdpcZkg,804
|
|
148
150
|
pipecat/serializers/asterisk.py,sha256=bPuGuLiCf04_H0d9Gc-5BpEtqD9BRNWnpZZq5MZ1fDY,6091
|
|
149
151
|
pipecat/serializers/base_serializer.py,sha256=OyBUZccs2ZT9mfkBbq2tGsUJMvci6o-j90Cl1sicPaI,2030
|
|
150
|
-
pipecat/serializers/convox.py,sha256=
|
|
152
|
+
pipecat/serializers/convox.py,sha256=Irby_iZywgBtevlxiC8nE2GY3eh4yNNRi2YC-0vnNTY,11155
|
|
153
|
+
pipecat/serializers/custom.py,sha256=O0gHTyoSb1AZ_tEmE9VgRViYckmsNzjwCAqt-Xc2CaM,9081
|
|
151
154
|
pipecat/serializers/exotel.py,sha256=U08EQeRzfW6O2P5mKeCjTy1Ur9KoTjVty3MehmVBEC0,5939
|
|
152
|
-
pipecat/serializers/genesys.py,sha256=5g6_F-OIWSNmStgc6-bDT5mDQkCHHKxcOWSb-F4s2-A,3564
|
|
153
155
|
pipecat/serializers/livekit.py,sha256=caVZlVJGV-SmEXE_H7i3DRo1RvC9FgGCVqi8IYGrpEo,2552
|
|
154
|
-
pipecat/serializers/plivo.py,sha256=
|
|
156
|
+
pipecat/serializers/plivo.py,sha256=9hJ8gvkVp1_sFx30ELWMJPMQQskwLKWsD49DALzAsRA,9410
|
|
155
157
|
pipecat/serializers/protobuf.py,sha256=h0UgVvIa3LXxtpbeQUq0tCGicGbDHxjiY6EdxXJO0_s,5162
|
|
156
158
|
pipecat/serializers/telnyx.py,sha256=9JiU_Ii9d3_-5xOzXAOdQwTn9WEuT3dtKb2iGH8GeY4,10857
|
|
157
159
|
pipecat/serializers/twilio.py,sha256=Eujl7fCImuJWkbgW9yrIaM2BICwNXzUalmb5RUyVKiA,9763
|
|
@@ -199,7 +201,7 @@ pipecat/services/deepgram/tts.py,sha256=H_2WCJEx3_L4ytrHHRNkA-6GKTd1coou_vvTfiEo
|
|
|
199
201
|
pipecat/services/deepseek/__init__.py,sha256=bU5z_oNGzgrF_YpsD9pYIMtEibeZFaUobbRjJ9WcYyE,259
|
|
200
202
|
pipecat/services/deepseek/llm.py,sha256=5KjpU2blmhUTM3LcRE1ymdsk6OmoFkIzeQgyNOGwQh8,3112
|
|
201
203
|
pipecat/services/elevenlabs/__init__.py,sha256=fl_Z0Ua-IgONoFGn4O-pMafwufjZ9C6cCVJkR1dN5lI,288
|
|
202
|
-
pipecat/services/elevenlabs/stt.py,sha256=
|
|
204
|
+
pipecat/services/elevenlabs/stt.py,sha256=nMRfeboolkAopCcdMhLf4P8mHtz4WrsrCqo6-bFrwWw,11733
|
|
203
205
|
pipecat/services/elevenlabs/tts.py,sha256=RZ9thg_kFWk1xhfmW047Pk0FjtWdkgnRMiGYFv3_cWk,42777
|
|
204
206
|
pipecat/services/fal/__init__.py,sha256=z_kfZETvUcKy68Lyvni4B-RtdkOvz3J3eh6sFDVKq6M,278
|
|
205
207
|
pipecat/services/fal/image.py,sha256=vArKLKrIGoZfw_xeZY_E7zbUzfzVsScj-R7mOmVqjRQ,4585
|
|
@@ -224,7 +226,6 @@ pipecat/services/google/llm_openai.py,sha256=CiyeRXG8t_e6A-kzAmvEGzQdvv_9v2ln96c
|
|
|
224
226
|
pipecat/services/google/llm_vertex.py,sha256=yqs8pqUCTgRj5wvQFHPJbGduoIaXjaqPym5x-lh5LhI,5032
|
|
225
227
|
pipecat/services/google/rtvi.py,sha256=PZb1yVny5YG7_XmJRXPzs3iYapeQ4XHreFN1v6KwTGM,3014
|
|
226
228
|
pipecat/services/google/stt.py,sha256=1vKZNEKZ-KLKp_7lA_VijznSqTwYRFYK1sDn2qteKtI,32814
|
|
227
|
-
pipecat/services/google/test-google-chirp.py,sha256=ji6ta7WDgKMu9yeKovuIVRlcMuk8S6XIyzIokHQY80E,1437
|
|
228
229
|
pipecat/services/google/tts.py,sha256=S_JSPqzLABfuyHLRppNiDmq2g9OFcnJOrfysVg3OHbY,32038
|
|
229
230
|
pipecat/services/grok/__init__.py,sha256=PyaTSnqwxd8jdF5aFTe3lWM-TBhfDyUu9ahRl6nPS-4,251
|
|
230
231
|
pipecat/services/grok/llm.py,sha256=UwCWCiqGcDy_1T8Xo904CdXyAT7QfAQn3H_awtuxIcU,7409
|
|
@@ -288,14 +289,15 @@ pipecat/services/riva/tts.py,sha256=idbqx3I2NlWCXtrIFsjEaYapxA3BLIA14ai3aMBh-2w,
|
|
|
288
289
|
pipecat/services/sambanova/__init__.py,sha256=oTXExLic-qTcsfsiWmssf3Elclf3IIWoN41_2IpoF18,128
|
|
289
290
|
pipecat/services/sambanova/llm.py,sha256=5XVfPLEk__W8ykFqLdV95ZUhlGGkAaJwmbciLdZYtTc,8976
|
|
290
291
|
pipecat/services/sambanova/stt.py,sha256=ZZgEZ7WQjLFHbCko-3LNTtVajjtfUvbtVLtFcaNadVQ,2536
|
|
291
|
-
pipecat/services/sarvam/__init__.py,sha256=
|
|
292
|
-
pipecat/services/sarvam/
|
|
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
|
|
293
295
|
pipecat/services/simli/__init__.py,sha256=cbDcqOaGsEgKbGYKpJ1Vv7LN4ZjOWA04sE84WW5vgQI,257
|
|
294
296
|
pipecat/services/simli/video.py,sha256=fVMYsCE5epH9rTdhN_tyPPJw7W6TCMHCOe2akKHWduw,8330
|
|
295
297
|
pipecat/services/soniox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
296
298
|
pipecat/services/soniox/stt.py,sha256=AhJF2YOzmqgB80x22jocgzr3neYCBMyxzP_WjkYR9Gc,15441
|
|
297
299
|
pipecat/services/speechmatics/__init__.py,sha256=Jgq1fqrZVkpWC21D79L1cn5Ub8PnYgnnCaqC5pOlbIc,89
|
|
298
|
-
pipecat/services/speechmatics/stt.py,sha256=
|
|
300
|
+
pipecat/services/speechmatics/stt.py,sha256=K91na2r_aDVQ1ZsUFRPGTds8nIp_CO8ZpVHDmT4iojM,44741
|
|
299
301
|
pipecat/services/tavus/__init__.py,sha256=SNyyi2Xq6tXIihDG2Bwvmg6Srbd-uWd1RwG-NKWcPuI,257
|
|
300
302
|
pipecat/services/tavus/video.py,sha256=67WX49Th7v6xRIPoTpvbe15CB84OD9ax2ta9jL0fWiQ,10714
|
|
301
303
|
pipecat/services/together/__init__.py,sha256=hNMycJDDf3CLiL9WA9fwvMdYphyDWLv0OabYIMgvC1c,259
|
|
@@ -303,7 +305,7 @@ pipecat/services/together/llm.py,sha256=VSayO-U6g9Ld0xK9CXRQPUsd5gWJKtiA8qDAyXgs
|
|
|
303
305
|
pipecat/services/ultravox/__init__.py,sha256=EoHCSXI2o0DFQslELgkhAGZtxDj63gZi-9ZEhXljaKE,259
|
|
304
306
|
pipecat/services/ultravox/stt.py,sha256=uCQm_-LbycXdXRV6IE1a6Mymis6tyww7V8PnPzAQtx8,16586
|
|
305
307
|
pipecat/services/vistaar/__init__.py,sha256=UFfSWFN5rbzl6NN-E_OH_MFaSYodZWNlenAU0wk-rAI,110
|
|
306
|
-
pipecat/services/vistaar/llm.py,sha256=
|
|
308
|
+
pipecat/services/vistaar/llm.py,sha256=5dYy5PGnOp79ccXUY1EsseQ8uSrXgBv5mhiBG5ji1bE,19202
|
|
307
309
|
pipecat/services/whisper/__init__.py,sha256=smADmw0Fv98k7cGRuHTEcljKTO2WdZqLpJd0qsTCwH8,281
|
|
308
310
|
pipecat/services/whisper/base_stt.py,sha256=VhslESPnYIeVbmnQTzmlZPV35TH49duxYTvJe0epNnE,7850
|
|
309
311
|
pipecat/services/whisper/stt.py,sha256=9Qd56vWMzg3LtHikQnfgyMtl4odE6BCHDbpAn3HSWjw,17480
|
|
@@ -376,7 +378,7 @@ pipecat/utils/tracing/service_decorators.py,sha256=HwDCqLGijhYD3F8nxDuQmEw-YkRw0
|
|
|
376
378
|
pipecat/utils/tracing/setup.py,sha256=7TEgPNpq6M8lww8OQvf0P9FzYc5A30xICGklVA-fua0,2892
|
|
377
379
|
pipecat/utils/tracing/turn_context_provider.py,sha256=ikon3plFOx0XbMrH6DdeHttNpb-U0gzMZIm3bWLc9eI,2485
|
|
378
380
|
pipecat/utils/tracing/turn_trace_observer.py,sha256=dma16SBJpYSOE58YDWy89QzHyQFc_9gQZszKeWixuwc,9725
|
|
379
|
-
dv_pipecat_ai-0.0.
|
|
380
|
-
dv_pipecat_ai-0.0.
|
|
381
|
-
dv_pipecat_ai-0.0.
|
|
382
|
-
dv_pipecat_ai-0.0.
|
|
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,,
|
|
Binary file
|
pipecat/audio/vad/silero.py
CHANGED
|
@@ -135,7 +135,13 @@ class SileroVADAnalyzer(VADAnalyzer):
|
|
|
135
135
|
with automatic model state management and periodic resets.
|
|
136
136
|
"""
|
|
137
137
|
|
|
138
|
-
def __init__(
|
|
138
|
+
def __init__(
|
|
139
|
+
self,
|
|
140
|
+
*,
|
|
141
|
+
sample_rate: Optional[int] = None,
|
|
142
|
+
params: Optional[VADParams] = None,
|
|
143
|
+
model_name: Optional[str] = None,
|
|
144
|
+
):
|
|
139
145
|
"""Initialize the Silero VAD analyzer.
|
|
140
146
|
|
|
141
147
|
Args:
|
|
@@ -146,7 +152,7 @@ class SileroVADAnalyzer(VADAnalyzer):
|
|
|
146
152
|
|
|
147
153
|
logger.debug("Loading Silero VAD model...")
|
|
148
154
|
|
|
149
|
-
model_name = "silero_vad.onnx"
|
|
155
|
+
model_name = model_name or "silero_vad.onnx"
|
|
150
156
|
package_path = "pipecat.audio.vad.data"
|
|
151
157
|
|
|
152
158
|
try:
|
|
@@ -166,7 +172,7 @@ class SileroVADAnalyzer(VADAnalyzer):
|
|
|
166
172
|
|
|
167
173
|
self._last_reset_time = 0
|
|
168
174
|
|
|
169
|
-
logger.debug("Loaded Silero VAD")
|
|
175
|
+
logger.debug(f"Loaded Silero VAD {model_file_path}")
|
|
170
176
|
|
|
171
177
|
#
|
|
172
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
|
|
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
|
-
|
|
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
|