+
    i                      v   ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIt]P                  ! RR4      t]P                  ! RR4      t	]P                  ! RR4      t
]P                  ! R	R
4      t]P                  ! R4      t]! RR7       ! R R4      4       tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR# )    N)	dataclassRABBITMQ_URLz"amqp://guest:guest@localhost:5672/AI_UTTERANCES_QUEUEzai.utterancesTTS_QUEUE_PREFIXztts.CONTROL_QUEUE_PREFIXzmcube.control.zmcube.mqT)frozenc                   >   a  ] tR t^t o V 3R lR ltV 3R ltRtV tR# )McubeMessagec                    < V ^8  d   QhRS[ /#    return)bytes)format__classdict__s   "TE:\live-kit-agent\livekit_voicebot\backend\agent_runtime\src\mcube_integration\mq.py__annotate__McubeMessage.__annotate__   s     5 5% 5    c                `    \         P                  ! V P                  4      P                  R 4      # )utf-8)jsondumpsbodyencode)selfs   &r   to_bytesMcubeMessage.to_bytes   s     zz$))$++G44r   c                &   < V ^8  d   Qh/ S[ ;R&   # )r   r   )dict)r   r   s   "r   r   r      s     
J r    N)__name__
__module____qualname____firstlineno__r   __annotate_func____static_attributes____classdictcell__)r   s   @r   r
   r
      s     5 5	  r   r
   c                8    V ^8  d   QhR\         P                  /# r   )aio_pikaRobustConnection)r   s   "r   r   r      s     ' 'x00 'r   c            
       "   \        \        P                  ! RR4      4      p \        \        P                  ! RR4      4      p^ p  \        P                  ! \
        4      G Rj  xL
 #  L  \         do   pT^,          p\        Y^\        T^4      ,          ,          4      p\        P                  RTTT4       \        P                  ! T4      G Rj  xL 
   Rp?K  Rp?ii ; i5i)a$  
Connect to RabbitMQ with retries.

Local dev can start consumers before RabbitMQ is fully ready; in that case aio-pika
may raise (e.g. "Server connection unexpectedly closed") and crash the whole process.
Keeping a retry loop here prevents websocket disconnects caused by consumer shutdown.
RABBITMQ_CONNECT_RETRY_BASE_Sz1.0RABBITMQ_CONNECT_RETRY_MAX_Sz10.0Nz5RabbitMQ connect failed (attempt=%s delay_s=%.1f): %s)floatosgetenvr*   connect_robustr   	Exceptionminlogwarningasynciosleep)base_smax_sattemptedelays        r   connectr>      s      299<eDEF")):FCDEG
	'!00>>>> 		'qLGc'1o)=>?EKKG	 --&&&		'sO   AC'A+ $A)%A+ (C')A+ +C$6ACCCC'C$$C'c                l    V ^8  d   QhR\         P                  R\         P                  P                  /# )r   
connectionr   )r*   r+   abcAbstractChannel)r   s   "r   r   r   7   s*      (";"; @\@\ r   c                    "   V P                  4       G R j  xL
 pVP                  \        \        P                  ! RR4      4      R7      G R j  xL
  V#  L> L5i)NRABBITMQ_PREFETCH10)prefetch_count)channelset_qosintr0   r1   )r@   rG   s   & r   get_channelrJ   7   sH     &&((G
//RYY7JD-Q)R/
SSSN )Ss!   AA7AAAAc                    V ^8  d   QhR\         P                  P                  R\        R\         P                  P                  /# )r   rG   
queue_namer   )r*   rA   rB   strAbstractQueue)r   s   "r   r   r   =   s=     A A\\))A7:A\\Ar   c                 D   "   V P                  VR R7      G Rj  xL
 #  L5i)T)durableN)declare_queue)rG   rL   s   &&r   declare_durable_queuerR   =   s#      &&z4&@@@@s     c                0    V ^8  d   QhR\         R\         /# r   call_idr   rM   )r   s   "r   r   r   C   s     * *C *C *r   c                     \          V  2# N)r   rU   s   &r   tts_queue_namerZ   C   s    y))r   c                0    V ^8  d   QhR\         R\         /# rT   rV   )r   s   "r   r   r   H   s     . . . .r   c                     \          V  2# rX   )r   rY   s   &r   control_queue_namer]   H   s    "#G9--r   c                h    V ^8  d   QhR\         P                  P                  R\        R\        RR/# )r   rG   rL   payloadr   N)r*   rA   rB   rM   r    )r   s   "r   r   r   M   s:     < <\\))<< < 
	<r   c                 
  "   V P                   p\        P                  ! V4      P                  R 4      p\        P
                  ! V\        P                  P                  RR7      pVP                  WQR7      G Rj  xL
  R#  L5i)r   zapplication/json)r   delivery_modecontent_type)routing_keyN)	default_exchanger   r   r   r*   MessageDeliveryMode
PERSISTENTpublish)rG   rL   r_   exchanger   messages   &&&   r   publish_jsonrk   M   si     
 ''H::g%%g.D++66'G
 

7

;;;s   A8B:B;Bc                D    V ^8  d   QhR\         P                  R\        /# )r   msgr   )r*   IncomingMessager    )r   s   "r   r   r   \   s       X%=%= $ r   c                    "   V P                   P                  R RR7      p \        P                  ! V4      #   \        P                   d    RT/u # i ; i5i)r   replace)errors_raw)r   decoder   loadsJSONDecodeError)rm   raws   & r   safe_get_message_textrw   \   sL     
((//')/
4Czz# }s%   A7 AAAAA)r7   loggingr   r0   dataclassesr   r*   r1   r   r   r   r   	getLoggerr5   r
   r>   rJ   rR   rZ   r]   rk   rw   r!   r   r   <module>r{      s       	 !  yy)MNii 5G 99/8 yy,  
# $5 5 5'4A*
.
<r   