
    qiT                         d Z ddlZddlZddlmZ ddlmc mc mZ	 ddl
mZmZmZmZmZmZmZmZ ddlmZ ej*                   G d d             Z G d d	e      Zy)
z)Protobuf frame serialization for Pipecat.    N)logger)FrameInputAudioRawFrameInputTransportMessageFrameOutputAudioRawFrameOutputTransportMessageFrame!OutputTransportMessageUrgentFrame	TextFrameTranscriptionFrame)FrameSerializerc                       e Zd ZU dZeed<   y)MessageFramezData class for converting transport messages into Protobuf format.

    Parameters:
        data: JSON-encoded message data for transport.
    dataN)__name__
__module____qualname____doc__str__annotations__     o/home/ccuser/rateright-growth/voice-assistant/venv/lib/python3.12/site-packages/pipecat/serializers/protobuf.pyr   r      s     Ir   r   c                   *   e Zd ZdZedededediZej                         D  ci c]  \  }}||
 c}}} Z
edededediZej                         D  ci c]  \  }}||
 c}}} Zd Zdedeez  d	z  fd
Zdeez  ded	z  fdZy	c c}}} w c c}}} w )ProtobufFrameSerializera#  Serializer for converting Pipecat frames to/from Protocol Buffer format.

    Provides efficient binary serialization for frame transport over network
    connections. Supports text, audio, transcription, and message frames with
    automatic conversion between transport message types.
    textaudiotranscriptionmessagec                      y)z)Initialize the Protobuf frame serializer.Nr   )selfs    r   __init__z ProtobufFrameSerializer.__init__?   s    r   framereturnNc                 N  K   t        |t        t        f      r)t        t	        j
                  |j                              }t        j                         }t        |      | j                  vr#t        j                  dt        |       d       y| j                  t        |         }t        ||      }t        j                  |      D ]I  }t        ||j                         }|st#        ||j                         s3t%        ||j                   |       K |j'                         S w)zSerialize a frame to Protocol Buffer binary format.

        Args:
            frame: The frame to serialize.

        Returns:
            Serialized frame as bytes, or None if frame type is not serializable.
        )r   zFrame type z is not serializableN)
isinstancer   r	   r   jsondumpsr   frame_protosr   typeSERIALIZABLE_TYPESr   warninggetattrdataclassesfieldsnamehasattrsetattrSerializeToString)r    r"   proto_frameproto_optional_name
proto_attrfieldvalues          r   	serializez!ProtobufFrameSerializer.serializeC   s      e9;\]^ ZZ.E #((*;d555NN[e5IJK #55d5kB[*=>
 ''. 	7EE5::.EUZZ8
EJJ6	7
 ,,..s   C"D%%D%<)D%r   c                 f  K   t         j                  j                  |      }|j                  d      }|| j                  vrt        j                  d       y| j                  |   }t        ||      }i }|j                  j                  |   j                  j                  D ]%  }t        ||j                        ||j                  <   ' t        |dd      }t        |dd      }	t        |dd      }
d|v r|d= d|v r|d= d|v r|d= |t        k(  r>	 t        j                  |d         }t!        |      }t        j"                  d	|        n |di |}|rt'        |d|       |	rt'        |d|	       |
rt'        |d|
       |S # t$        $ r"}t        j                  d
|        Y d}~yd}~ww xY ww)zDeserialize Protocol Buffer binary data to a frame.

        Args:
            data: Binary protobuf data to deserialize.

        Returns:
            Deserialized frame instance, or None if deserialization fails.
        r"   z#Unable to deserialize a valid frameNidr/   ptsr   )r   z+ProtobufFrameSerializer: Transport message z!Error parsing MessageFrame data: r   )r(   r   
FromString
WhichOneofDESERIALIZABLE_FIELDSr   errorr,   
DESCRIPTORfields_by_namemessage_typer.   r/   r   r&   loadsr   debug	Exceptionr1   )r    r   protowhich
class_nameargs	args_dictr6   r:   r/   r;   msginstancees                 r   deserializez#ProtobufFrameSerializer.deserializea   s     ""--d3  )222LL>?//6
ue$	%%44U;HHOO 	>E$+D%**$=Iejj!	> T4&tVT*dE4(9$Y&!I%  %jj6!235cBJ8*UV ".I.H HdB'Hfd+HeS)  @DEs0   DF1<F 8F1	F.F)$F1)F..F1)r   r   r   r   r
   r   r   r   r*   itemsSERIALIZABLE_FIELDSr   DESERIALIZABLE_TYPESr>   r!   r   r   bytesr8   rN   ).0kvs   000r   r   r   '   s     	6WOi	 -?,D,D,FGGDAq1a4G 	6GOi	 /C.H.H.JKKdaQTK/U /sU{T/A /<5cEk 5edl 5Y H Ls   BBr   )r   r-   r&   logurur   #pipecat.frames.protobufs.frames_pb2frames	protobufs
frames_pb2r(   pipecat.frames.framesr   r   r   r   r   r	   r
   r   #pipecat.serializers.base_serializerr   	dataclassr   r   r   r   r   <module>r^      s[    0    : :	 	 	 @   oo or   