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.
- {dv_pipecat_ai-0.0.82.dev884.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/METADATA +2 -1
- {dv_pipecat_ai-0.0.82.dev884.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/RECORD +23 -22
- pipecat/audio/vad/silero.py +1 -1
- 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.dev884.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/WHEEL +0 -0
- {dv_pipecat_ai-0.0.82.dev884.dist-info → dv_pipecat_ai-0.0.85.dev1.dist-info}/licenses/LICENSE +0 -0
- {dv_pipecat_ai-0.0.82.dev884.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,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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
293
|
-
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
|
|
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=
|
|
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=
|
|
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.
|
|
381
|
-
dv_pipecat_ai-0.0.
|
|
382
|
-
dv_pipecat_ai-0.0.
|
|
383
|
-
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,,
|
pipecat/audio/vad/silero.py
CHANGED
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
|