dv-pipecat-ai 0.0.82.dev58__py3-none-any.whl → 0.0.82.dev60__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.dev58.dist-info → dv_pipecat_ai-0.0.82.dev60.dist-info}/METADATA +1 -1
- {dv_pipecat_ai-0.0.82.dev58.dist-info → dv_pipecat_ai-0.0.82.dev60.dist-info}/RECORD +8 -8
- pipecat/frames/frames.py +11 -0
- pipecat/processors/aggregators/llm_response.py +2 -0
- pipecat/serializers/custom.py +14 -0
- {dv_pipecat_ai-0.0.82.dev58.dist-info → dv_pipecat_ai-0.0.82.dev60.dist-info}/WHEEL +0 -0
- {dv_pipecat_ai-0.0.82.dev58.dist-info → dv_pipecat_ai-0.0.82.dev60.dist-info}/licenses/LICENSE +0 -0
- {dv_pipecat_ai-0.0.82.dev58.dist-info → dv_pipecat_ai-0.0.82.dev60.dist-info}/top_level.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
dv_pipecat_ai-0.0.82.
|
|
1
|
+
dv_pipecat_ai-0.0.82.dev60.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
|
|
@@ -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=mMXjaMd2dC6ILva3DWL2cyNeLTq8q_kpUs5RiHMCEVw,44812
|
|
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
|
|
@@ -116,7 +116,7 @@ pipecat/processors/aggregators/dtmf_aggregator.py,sha256=nngjLiaOtcZtuCNpYPyfUVL
|
|
|
116
116
|
pipecat/processors/aggregators/gated.py,sha256=tii0sRrBkRW6y9Xq5iTWPnqlOEejU4VqPIPtdOa61pc,3073
|
|
117
117
|
pipecat/processors/aggregators/gated_openai_llm_context.py,sha256=cr6MT8J6SpPzZbppKPOKe3_pt_5qXC9g6a4wvZDyrec,3005
|
|
118
118
|
pipecat/processors/aggregators/llm_context.py,sha256=eDf1cQElcISLx3onaA9LCWuepzb2G_JGszLzpNXggXo,9723
|
|
119
|
-
pipecat/processors/aggregators/llm_response.py,sha256=
|
|
119
|
+
pipecat/processors/aggregators/llm_response.py,sha256=P7DwrbzMQx6HUFmvc-9h65YPoGEU9JOpEYLwaUzkB_o,47671
|
|
120
120
|
pipecat/processors/aggregators/llm_response_universal.py,sha256=fBnB3rZVdxj4iEKIWcnR7yTpqyKupbcg7IUv6XVxrDQ,34287
|
|
121
121
|
pipecat/processors/aggregators/openai_llm_context.py,sha256=cC8DXdVPERRN04i0i-1Ys6kusvnbMALeH-Z8Pu5K684,12999
|
|
122
122
|
pipecat/processors/aggregators/sentence.py,sha256=E7e3knfQl6HEGpYMKPklF1aO_gOn-rr7SnynErwfkQk,2235
|
|
@@ -150,7 +150,7 @@ pipecat/serializers/__init__.py,sha256=xcmbbR7YYU5C4HPbo2WVgPij-Bl_qlrLcnunCdpcZ
|
|
|
150
150
|
pipecat/serializers/asterisk.py,sha256=bPuGuLiCf04_H0d9Gc-5BpEtqD9BRNWnpZZq5MZ1fDY,6091
|
|
151
151
|
pipecat/serializers/base_serializer.py,sha256=OyBUZccs2ZT9mfkBbq2tGsUJMvci6o-j90Cl1sicPaI,2030
|
|
152
152
|
pipecat/serializers/convox.py,sha256=Irby_iZywgBtevlxiC8nE2GY3eh4yNNRi2YC-0vnNTY,11155
|
|
153
|
-
pipecat/serializers/custom.py,sha256=
|
|
153
|
+
pipecat/serializers/custom.py,sha256=989fmUF92vppUi3ewiZOzP3FYtmMMJTtm3zyUSZEHqY,9122
|
|
154
154
|
pipecat/serializers/exotel.py,sha256=U08EQeRzfW6O2P5mKeCjTy1Ur9KoTjVty3MehmVBEC0,5939
|
|
155
155
|
pipecat/serializers/livekit.py,sha256=caVZlVJGV-SmEXE_H7i3DRo1RvC9FgGCVqi8IYGrpEo,2552
|
|
156
156
|
pipecat/serializers/plivo.py,sha256=9hJ8gvkVp1_sFx30ELWMJPMQQskwLKWsD49DALzAsRA,9410
|
|
@@ -377,7 +377,7 @@ pipecat/utils/tracing/service_decorators.py,sha256=HwDCqLGijhYD3F8nxDuQmEw-YkRw0
|
|
|
377
377
|
pipecat/utils/tracing/setup.py,sha256=7TEgPNpq6M8lww8OQvf0P9FzYc5A30xICGklVA-fua0,2892
|
|
378
378
|
pipecat/utils/tracing/turn_context_provider.py,sha256=ikon3plFOx0XbMrH6DdeHttNpb-U0gzMZIm3bWLc9eI,2485
|
|
379
379
|
pipecat/utils/tracing/turn_trace_observer.py,sha256=dma16SBJpYSOE58YDWy89QzHyQFc_9gQZszKeWixuwc,9725
|
|
380
|
-
dv_pipecat_ai-0.0.82.
|
|
381
|
-
dv_pipecat_ai-0.0.82.
|
|
382
|
-
dv_pipecat_ai-0.0.82.
|
|
383
|
-
dv_pipecat_ai-0.0.82.
|
|
380
|
+
dv_pipecat_ai-0.0.82.dev60.dist-info/METADATA,sha256=NQTL4VB1qFKpwKp0WFbTAmQbm52L3JX_eFmWOtsCdkU,32638
|
|
381
|
+
dv_pipecat_ai-0.0.82.dev60.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
382
|
+
dv_pipecat_ai-0.0.82.dev60.dist-info/top_level.txt,sha256=kQzG20CxGf-nSsHmtXHx3hY2-8zHA3jYg8jk0TajqXc,8
|
|
383
|
+
dv_pipecat_ai-0.0.82.dev60.dist-info/RECORD,,
|
pipecat/frames/frames.py
CHANGED
|
@@ -1582,6 +1582,17 @@ class WaitForDTMFFrame(ControlFrame):
|
|
|
1582
1582
|
pass
|
|
1583
1583
|
|
|
1584
1584
|
|
|
1585
|
+
@dataclass
|
|
1586
|
+
class CallTransferFrame(ControlFrame):
|
|
1587
|
+
"""Frame to request call transfer to another number/destination.
|
|
1588
|
+
|
|
1589
|
+
Parameters:
|
|
1590
|
+
target: The phone number or destination to transfer the call to.
|
|
1591
|
+
"""
|
|
1592
|
+
|
|
1593
|
+
target: str
|
|
1594
|
+
|
|
1595
|
+
|
|
1585
1596
|
@dataclass
|
|
1586
1597
|
class ManuallySwitchServiceFrame(ServiceSwitcherFrame):
|
|
1587
1598
|
"""A frame to request a manual switch in the active service in a ServiceSwitcher.
|
|
@@ -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
|
pipecat/serializers/custom.py
CHANGED
|
@@ -22,6 +22,7 @@ from pipecat.audio.utils import (
|
|
|
22
22
|
)
|
|
23
23
|
from pipecat.frames.frames import (
|
|
24
24
|
AudioRawFrame,
|
|
25
|
+
CallTransferFrame,
|
|
25
26
|
CancelFrame,
|
|
26
27
|
EndFrame,
|
|
27
28
|
Frame,
|
|
@@ -31,6 +32,7 @@ from pipecat.frames.frames import (
|
|
|
31
32
|
TransportMessageFrame,
|
|
32
33
|
TransportMessageUrgentFrame,
|
|
33
34
|
)
|
|
35
|
+
|
|
34
36
|
from pipecat.serializers.base_serializer import FrameSerializer, FrameSerializerType
|
|
35
37
|
|
|
36
38
|
|
|
@@ -45,6 +47,7 @@ class CustomFrameSerializer(FrameSerializer):
|
|
|
45
47
|
- start: Initialize call with agent configuration
|
|
46
48
|
- media: Bidirectional audio streaming
|
|
47
49
|
- clear: Clear audio buffers (interruption)
|
|
50
|
+
- call_transfer: Transfer call to another number
|
|
48
51
|
- hang_up: End call notification
|
|
49
52
|
|
|
50
53
|
Audio format:
|
|
@@ -123,6 +126,15 @@ class CustomFrameSerializer(FrameSerializer):
|
|
|
123
126
|
answer = {"event": "clear", "stream_sid": self._stream_sid}
|
|
124
127
|
return json.dumps(answer)
|
|
125
128
|
|
|
129
|
+
elif isinstance(frame, CallTransferFrame):
|
|
130
|
+
# Send call_transfer event to transfer the call to another number
|
|
131
|
+
answer = {
|
|
132
|
+
"event": "call_transfer",
|
|
133
|
+
"call_sid": self._call_sid or self._stream_sid,
|
|
134
|
+
"to": frame.target,
|
|
135
|
+
}
|
|
136
|
+
return json.dumps(answer)
|
|
137
|
+
|
|
126
138
|
elif isinstance(frame, (EndFrame, CancelFrame)):
|
|
127
139
|
# Send hang_up event to end the call
|
|
128
140
|
answer = {"event": "hang_up", "stream_sid": self._stream_sid}
|
|
@@ -189,6 +201,7 @@ class CustomFrameSerializer(FrameSerializer):
|
|
|
189
201
|
if event == "media":
|
|
190
202
|
media = message.get("media", {})
|
|
191
203
|
payload_base64 = media.get("payload")
|
|
204
|
+
uuid = message.get("uuid")
|
|
192
205
|
|
|
193
206
|
if not payload_base64:
|
|
194
207
|
logger.warning("Media event missing payload")
|
|
@@ -199,6 +212,7 @@ class CustomFrameSerializer(FrameSerializer):
|
|
|
199
212
|
except Exception as e:
|
|
200
213
|
logger.error(f"Failed to decode base64 payload: {e}")
|
|
201
214
|
return None
|
|
215
|
+
logger.debug(f"Received uuid: {uuid}")
|
|
202
216
|
|
|
203
217
|
# Convert audio based on codec
|
|
204
218
|
if self._codec == "pcmu":
|
|
File without changes
|
{dv_pipecat_ai-0.0.82.dev58.dist-info → dv_pipecat_ai-0.0.82.dev60.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|