
    .Ui                       d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddlm0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZEmFZFmGZG  G d de=      ZHy)    )annotationsN)AsyncIterator)Anycast)assert_never   )Agent)ModelBehaviorError	UserError)Handoff)logger)RunContextWrapperTContext)FunctionTool)ToolContext   )RealtimeAgent)RealtimeRunConfigRealtimeSessionModelSettingsRealtimeUserInput)RealtimeAgentEndEventRealtimeAgentStartEventRealtimeAudioRealtimeAudioEndRealtimeAudioInterruptedRealtimeErrorRealtimeEventInfoRealtimeGuardrailTrippedRealtimeHandoffEventRealtimeHistoryAddedRealtimeHistoryUpdated"RealtimeInputAudioTimeoutTriggeredRealtimeRawModelEventRealtimeSessionEventRealtimeToolEndRealtimeToolStart)realtime_handoff)AssistantAudioAssistantMessageItemAssistantText
InputAudio
InputImage	InputTextRealtimeItemUserMessageItem)RealtimeModelRealtimeModelConfigRealtimeModelListener)RealtimeModelEvent2RealtimeModelInputAudioTranscriptionCompletedEventRealtimeModelToolCallEvent)RealtimeModelSendAudioRealtimeModelSendInterruptRealtimeModelSendSessionUpdateRealtimeModelSendToolOutputRealtimeModelSendUserInputc                  $   e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZedd       ZddZddZddZ	d dZ
d!d	Zd"d
Zddd#dZd!dZd$dZd%dZd&dZd'dZe	 	 	 	 	 	 d(d       Zd)dZd*dZd+dZd!dZd!dZ	 	 	 	 	 	 d,dZe	 	 	 	 	 	 d-d       Zy).RealtimeSessiona?  A connection to a realtime model. It streams events from the model to you, and allows you to
    send messages and audio to the model.

    Example:
        ```python
        runner = RealtimeRunner(agent)
        async with await runner.run() as session:
            # Send messages
            await session.send_message("Hello")
            await session.send_audio(audio_bytes)

            # Stream events
            async for event in session:
                if event.type == "audio":
                    # Handle audio event
                    pass
        ```
    Nc                J   || _         || _        t        |      | _        t	        | j                        | _        g | _        |xs i | _        |xs i | _        | j                  j                  d      }| j                  j                  d      }i |xs i |xs i | _
        t        j                         | _        d| _        d| _        t!               | _        i | _        i | _        | j                  j                  di       j                  dd      | _        t!               | _        y)	a  Initialize the session.

        Args:
            model: The model to use.
            agent: The current agent.
            context: The context object.
            model_config: Model configuration.
            run_config: Runtime configuration including guardrails.
        )contextinitial_model_settingsmodel_settingsFNguardrails_settingsdebounce_text_lengthd   )_model_current_agentr   _context_wrapperr   _event_info_history_model_config_run_configget_base_model_settingsasyncioQueue_event_queue_closed_stored_exceptionset_interrupted_response_ids_item_transcripts_item_guardrail_run_counts_debounce_text_length_guardrail_tasks)selfmodelagentr>   model_config
run_configr?   run_config_settingss           s/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/venv/lib/python3.12/site-packages/agents/realtime/session.py__init__zRealtimeSession.__init__S   s!   " # 1' :,T5J5JK,.)/R%+!%!3!3!7!78P!Q"..223CDC
"(bC
%+C
! BI37 475&13:<'%)%5%5%9%9:OQS%T%X%X"C&
" 9<    c                    | j                   S )zMAccess the underlying model for adding listeners or other direct interaction.)rD   rX   s    r^   rY   zRealtimeSession.model   s     {{r`   c                  K   | j                   j                  |        | j                  j                         }| j	                  | j                  j                  dd      | j                         d{   |d<   | j                   j                  |       d{    | j                  t        | j                  | j                               d{    | S 7 d7 @7 
w)zStart the session by connecting to the model. After this, you will be able to stream
        events from the model and send messages and audio to the model.
        r?   Nstarting_settingsrZ   )historyinfo)rD   add_listenerrI   copy&_get_updated_model_settings_from_agentrK   rE   connect
_put_eventr!   rH   rG   )rX   r[   s     r^   
__aenter__zRealtimeSession.__aenter__   s     
 	  &))..07;7b7b"00445MtT%% 8c 8
 2
-. kk!!,/// oo"%%
 	
 	
 !2
 	0	
s6   A0C2C3%CC7CCCCCc                >   K   | j                          d{   S 7 w)zEnter the async context manager. We strongly recommend using the async context manager
        pattern instead of this method. If you use this, you need to manually call `close()` when
        you are done.
        N)rm   rb   s    r^   enterzRealtimeSession.enter   s     
 __&&&&s   c                @   K   | j                          d{    y7 w)zEnd the session.N)close)rX   	_exc_type_exc_val_exc_tbs       r^   	__aexit__zRealtimeSession.__aexit__   s     jjl   c               *  K   | j                   sf	 | j                  $| j                          d{    | j                  | j                  j	                          d{   }| | j                   seyy7 F7 # t
        j                  $ r Y yw xY ww)z%Iterate over events from the session.N)rP   rQ   _cleanuprO   rK   rM   CancelledErrorrX   events     r^   	__aiter__zRealtimeSession.__aiter__   s     ,,
))5--/))000"//3355 ,,
 * 6)) sP   BA: A6-A: A8	A: 'B4B6A: 8A: :BBBBc                @   K   | j                          d{    y7 w)zClose the session.N)rx   rb   s    r^   rq   zRealtimeSession.close   s     mmorv   c                j   K   | j                   j                  t        |             d{    y7 w)zSend a message to the model.
user_inputN)rD   
send_eventr:   )rX   messages     r^   send_messagezRealtimeSession.send_message   s$     kk$$%?7%STTTs   )313F)commitc               l   K   | j                   j                  t        ||             d{    y7 w)z$Send a raw audio chunk to the model.)audior   N)rD   r   r6   )rX   r   r   s      r^   
send_audiozRealtimeSession.send_audio   s'     kk$$%;%PV%WXXXs   *424c                f   K   | j                   j                  t                      d{    y7 w)zInterrupt the model.N)rD   r   r7   rb   s    r^   	interruptzRealtimeSession.interrupt   s"     kk$$%?%ABBBs   '1/1c                   K   || _         | j                  d| j                          d{   }| j                  j                  t	        |             d{    y7 27 w)zMUpdate the active agent for this session and apply its settings to the model.Nrd   session_settings)rE   rj   rD   r   r8   )rX   rZ   updated_settingss      r^   update_agentzRealtimeSession.update_agent   sh     #!%!L!L"%% "M "
 

 kk$$*<LM
 	
 	


	
s!   (A!A,A!AA!A!c           
     V  K   | j                  t        | j                               d {    j                  dk(  r9| j                  t	        | j                  j
                               d {    y j                  dk(  r| j                         d {    y j                  dk(  rE| j                  t        | j                  j                  j                               d {    y j                  dk(  rD| j                  t        | j                  j                  j                               d {    y j                  d	k(  rD| j                  t        | j                  j                  j                               d {    y j                  d
k(  rt        | j                        }t        j                  | j                        | _        t        | j                        |kD  rVt        | j                        dkD  r>| j                  d   }| j                  t!        | j                  |             d {    y | j                  t#        | j                  | j                               d {    y j                  dk(  r.| j                  t%        | j                               d {    y j                  dk(  rj                  }|| j&                  vrd| j&                  |<   d| j(                  |<   | j&                  |xx   j*                  z  cc<   | j                  | j                  t-        |t/        | j&                  |         g            | _        t        | j&                  |         }| j0                  }| j(                  |   dz   |z  }||k\  rA| j(                  |xx   dz  cc<   | j3                  | j&                  |   j4                         y y j                  dk(  r(t7        fd| j                  D               }j8                  t;        fd| j                  D        d       }	|	2|	j                  dk(  r"j                  dk(  r	 |	j<                  }
g }t?        j<                        D ]  \  }}|j                  dv rtA        |tB        t.        f      sJ |jD                  }|sd }|t        |
      k  r1|
|   }tA        |t.              stA        |tB              r|jD                  }jF                  dk(  r%| j&                  jI                  j                        }|r|jK                  d|i      }|jM                  |        |rjK                  d|i      | j                  | j                        | _        |rMt;        fd"| j                  D              }| j                  t!        | j                  |             d {    y | j                  t#        | j                  | j                               d {    y j                  d#k(  rtj                  }| j                  D cg c]  }|j                  |k7  s| c}| _        | j                  t#        | j                  | j                               d {    y j                  d$k(  ry j                  d%k(  r9| j                  tS        | jT                  | j                  &             d {    y j                  d'k(  rm| j&                  jW                          | j(                  jW                          | j                  tY        | jT                  | j                  &             d {    y j                  d(k(  rjZ                  | _.        y j                  d)k(  ry j                  d*k(  ry t_               y 7 7 b7 <7 7 7 K7 7 a7 '# tN        $ r tQ        j
                  dd !       Y w xY w7 %7 c c}w 7 t7 7 w)+N)datarg   errorrg   r   function_callr   )rg   r   item_idcontent_indexaudio_interrupted)rg   r   r   
audio_done#input_audio_transcription_completedr   )rg   item)rg   rf   input_audio_timeout_triggered)rg   transcript_delta )
transcriptr   contentr   item_updatedc              3  d   K   | ]'  }|j                   j                  j                   k(   ) y wNr   r   .0r   r{   s     r^   	<genexpr>z+RealtimeSession.on_event.<locals>.<genexpr>  s$     ZDT\\UZZ-?-??Zs   -0c              3  V   K   | ]   }|j                   j                   k(  s| " y wr   r   )r   iincoming_items     r^   r   z+RealtimeSession.on_event.<locals>.<genexpr>$  s"     PqQYY-:O:O-OPs   ))r   )r   input_audio	assistantr   updater   zError merging transcriptsT)exc_infoc              3  j   K   | ]*  }|j                   j                  j                   k(  s'| , y wr   r   r   s     r^   r   z+RealtimeSession.on_event.<locals>.<genexpr>S  s+       !dllejjFXFX6XD s   (33item_deletedconnection_statusturn_started)rZ   rg   
turn_ended	exceptionotherraw_server_event)0rl   r#   rG   typer   r   _handle_tool_callr   r   r   r   r   lenrH   r<   _get_new_historyr    r!   r"   rT   rU   deltar)   r(   rV   _enqueue_guardrail_taskresponse_idanyr   nextr   	enumerate
isinstancer+   r   rolerK   
model_copyappend	Exceptionr   r   rE   clearr   r   rQ   r   )rX   r{   prev_lennew_itemr   current_length	thresholdnext_run_thresholdis_newexisting_itemexisting_contentnew_contentidxentryentry_transcript	preservedthis_content
deleted_idr   r   s    `                 @r^   on_eventzRealtimeSession.on_event   s(    oo3TEUEUVWWW:: //-T5E5EU[["YZZZZZ?*((///ZZ7"//))!MM"'"5"5	   ZZ..//())5==PUPcPc  
 ZZ<'// ))5==PUPcPc  
 ZZ@@4==)H+<<T]]ERDM 4==!H,T]]1Ca1G==,oo&:@P@PW_&`aaaoo*0@0@$--X   ZZ:://2))  
 ZZ--mmGd44424&&w/;<//8""7+u{{:+ 11$#+t7M7Mg7VWXDM !!7!7!@AN22I"&"A"A'"JQ"NR[![!33//8A=8,,T-C-CG-LeN_N_` 4 ZZ>)ZDMMZZZF
 "JJM PDMMPRVM
 )!&&)3!&&)3#'4'<'<$"$K&/0E0E&F 2
U ::)AA#-ej.5Q#RR#R/4/?/?,#38<	#&-=)>#>3CC3HL'1,'OS](4jT& 5A4K4K	 $1#5#5#D040F0F0J0J=K`K`0aI#,,1,<,<\S\D],<,^E#**51326 #(5(@(@T_H`(@(a
 !11$--ODM  %)]]   oo&:@P@PW_&`aaaoo*0@0@$--X   ZZ>)J.2mmZdt||z?YTZDM//&D,<,<dmmT   ZZ..ZZ>)//'--))   ZZ<'""((*++113//%--))   ZZ;&%*__D"ZZ7"ZZ--O 	X [/ b^ ! LL!<tL b
 [s4  *`)_A`)5_6(`)_A`)2_3A`)_ A`)_#B6`)_&8`)_)	<`)_,F/`)6D_/ A*`)1`28`)*`+.`)`.`2;`)-`!.A`)`$A;`)`'A`)`)`)`) `)#`)&`))`),`)/ ``)``)`)`)$`)'`)c                V   K   | j                   j                  |       d{    y7 w)zPut an event into the queue.N)rO   putrz   s     r^   rl   zRealtimeSession._put_event  s      ##E***s   )')c                  K   t        j                  | j                  j                  | j                        | j                  | j                  | j                               d{   \  }}|D ci c]   }t        |t              s|j                  |" }}|D ci c]  }|j                  | }}|j                  |v rB| j                  t        | j                  ||j                     | j                               d{    ||j                     }t        | j                  j                  | j                  j                  |j                  |j                   |j"                        }	|j%                  |	|j"                         d{   }
| j&                  j)                  t+        |t-        |
      d             d{    | j                  t/        | j                  ||
| j                               d{    y|j                  |v r||j                     }t        | j                  j                  | j                  j                  |j                  |j                   |j"                        }	|j1                  | j                  |j"                         d{   }
t        |
t2              s$t5        d|j                   dt7        |
             | j                  }|
| _        | j9                  d| j                  	       d{   }| j                  t;        || j                  | j                  
             d{    | j&                  j)                  t=        |             d{    |j?                  |
      }| j&                  j)                  t+        ||d             d{    ytA        d|j                   d      7 lc c}w c c}w 7 7 V7 !7 7 J7 7 7 ~7 @w)zHandle a tool call event.N)rg   toolrZ   )r>   usage	tool_nametool_call_idtool_argumentsT)	tool_calloutputstart_response)rg   r   r   rZ   zHandoff z returned invalid result: rd   )
from_agentto_agentrg   r   zTool z
 not found)!rM   gatherrE   get_all_toolsrF   _get_handoffsr   r   namer   rl   r&   rG   r   r>   r   call_id	argumentson_invoke_toolrD   r   r9   strr%   on_invoke_handoffr   r   r   rj   r   r8   get_transfer_messager
   )rX   r{   toolshandoffsr   function_maphandoffhandoff_map	func_tooltool_contextresultprevious_agentr   transfer_messages                 r^   r   z!RealtimeSession._handle_tool_call  s     '--d.C.CDt22D4I4IJ!
 
x 5:\DZl=[		4\\AIJgw(('1JJ::%//!))%ejj1--   %UZZ0I&--55++11**"]]$L %33L%//RRF++((+#CK   //))"!--	   ZZ;&!%**-G&--55++11**"]]$L #44T5J5JEOO\\Ffm4w0011KDQWL>Z 
 "00N #)D &*%P%P"&)) &Q &   //$-!00))   ++((.@PQ  
  ';;FC++((+#+#'   %uUZZL
%CDD{
 ]J  S& ] s   A!O3#O$O3/OOO3O.AO3 OBO3	O
7O3O"9O3;O%<B"O3O(A+O3
O+8O3O-,O30O/1?O30O11O3O3O3"O3%O3(O3+O3-O3/O31O3c                    t        t              rg }d}|D ]  }|j                  j                  k(  r|j                  dk(  r|j                  dk(  rg }|j
                  D ]R  }|j                  dk(  r0|j                  dj                  i      }|j                  |       B|j                  |       T |j                  |j                  |dd             d	}|j                  |        |du r;|j                  t        j                  t        j                  
      g             |S t        fdt        |      D        d       }	|	U|j                         }j                  dk(  r3j
                  &t        j
                        dkD  r||	   }
|
j                  dk(  rj                  dk(  r
|
j                  dk(  r|
j
                  }j
                  }g }t        |      D ]  \  }}|t        |      k\  r|j                  |       &||   }|j                  dk(  r0|j                  |j                  |       X|j                  |       jt        |t              r|j                   nd }||j                   |j                  |       |j                  |        j                  d|i      }|||	<   |S j                  dk(  r|
j                  dk(  r|
j
                  }j
                  }t#        |      }dd}t%               }|D ]/  }t        |t&              s ||      }|s|j)                  |       1 g }|D ]4  }t        |t&              s ||      }|s||vs$|j                  |       6 |r||z   }g }t        |      D ]  \  }}|j                  dk(  rnt+        |dd       }|M|t        |      k  r?||   }t        |t,              r*|j                  |j                  d|j                  i      }|j                  |       |j                  dk(  rtt+        |dd       }||dk(  rM|t        |      k  r?||   }t        |t              r*|j                   r|j                  d|j                   i      }|j                  |       |j                  |        j                  d|i      } | ||	<   |S j                  dk(  r|
j                  dk(  r|
j
                  }!j
                  }"g }#t        |"      D ]g  \  }}$|t        |!      k\  r|#j                  |$       &|!|   }%|%j                   }||$j                   |#j                  |%       W|#j                  |$       i j                  d|#i      }&|&||	<   |S ||	<   |S ||	<   |S j.                  rGt        fdt        |      D        d       }'|''|j                         }|j1                  |'dz          |S |gz   S )NFr   userr   r   r   	completed)r   statusT)textr   c              3  \   K   | ]#  \  }}|j                   j                   k(  s | % y wr   r   r   r   r   r{   s      r^   r   z3RealtimeSession._get_new_history.<locals>.<genexpr>	  s$     V71d8UQV   !,,r   r   r   r   c                D    t        | t              r| j                  xs d S y r   )r   r,   	image_url)vals    r^   _image_url_strz8RealtimeSession._get_new_history.<locals>._image_url_str7  s    )#z:'*}}'< <#'r`   
input_textr   r   systemc              3  \   K   | ]#  \  }}|j                   j                  k(  s | % y wr   )r   previous_item_idr   s      r^   r   z3RealtimeSession._get_new_history.<locals>.<genexpr>  s&     cwq$DLLELbLb<bcr  r   )r  objectreturnz
str | None)r   r4   r   r   r   r   r   r   r   r/   r-   r   r   ri   r   r*   r   listrR   r,   addgetattrr+   r	  insert)(clsold_historyr{   new_historyexisting_item_foundr   r   r   copied_entryexisting_indexr   assistant_existing_contentassistant_incomingassistant_new_contentr   acassistant_currentcur_textupdated_assistantuser_existing_contentuser_incominguser_new_contentr  incoming_image_urlspartumissing_imagesmergeducr   prevr   updated_usersystem_existing_contentsystem_incomingsystem_new_contentscsystem_currentupdated_systemprevious_indexs(     `                                     r^   r   z RealtimeSession._get_new_history  sO    eOP.0K"'# -<<5==0TYY)5KPTPYPY]cPc<>G!% 2 ::6+0+;+;LRWRbRbCc+;+dL#NN<8#NN512  &&7k/Z[ +/'&&t,-  #e+""# %	uGWGW8X7Y
 
 Vi4VX\
 %%**,KzzY&5==+DU]]I[^_I_ +N ; %%2zz[0]5G5G;5V5B5J5J2-2]]*VX-'01C'D EGC"c*D&EE 5 < <R @ (0J30O-!ww'1#%==#8$9$@$@AR$S$9$@$@$D (22C]'S %6$:$:)- !)
 $,#7BGGO$9$@$@AR$S$9$@$@$D'E( -2,<,<$-/D#E -= -) 7HN3f e v--2D2D2N0=0E0E-(- W[)W(
( 9<+$1 ?D)$
;$24$8#$$7$;$;A$>	? <>$9 @D)$
;$24$8#$2E)E$2$9$9$$?	@ */=@P/P, MO'01A'B 2GC!ww-7-4Rt-L
#-#5#DY@Z:Z+@+ED'1$
'CHc-/]]<QUQ`Q`Ba]-b &b 1!#L!8'.r64'@$(LDBJC#$9K" E" ,A+ED'1$	'Btyy-/]]6499BU]-V &b 1 &b 1'2* (-'7'7	6?R'7'S6BN30 / x/M4F4F(4R2?2G2G/*/-->@*'0'A 	>GC"c*A&BB 2 9 9" = (-DS-IN'5':':H'3 2 9 9. I 2 9 9" =	> */)9)9)M_A`)9)a6DN3 	 7<N3  38K/ ##!c)K"8cN ))..0"">A#5u="" eW$$r`   c                  K   | j                   j                  | j                  j                  dg       z   }t	               }g }|D ]4  }t        |      }||vs|j                  |       |j                  |       6 |r|| j                  v ryg }|D ]n  }	 |j                  | j                  t        t        t           | j                         |       d{   }	|	j                  j                  r|j                  |	       p |r|| j                  v ry| j                  j                  |       | j#                  t%        ||| j&                               d{    | j(                  j+                  t-                      d{    |D 	cg c]  }	|	j.                  j1                          }
}	| j(                  j+                  t3        ddj5                  |
                    d{    yy7 # t         $ r Y nw xY w7 7 c c}	w 7 "w)	zURun output guardrails on the given text. Returns True if any guardrail was triggered.output_guardrailsFN)guardrail_resultsr   rg   zguardrail triggered: z, r   T)rE   r0  rJ   rK   rR   idr   r  rS   runrF   r   r	   r   r   tripwire_triggeredr   rl   r   rG   rD   r   r7   	guardrailget_namer:   join)rX   r   r   combined_guardrailsseen_idsr0  r5  guardrail_idtriggered_resultsr   guardrail_namess              r^   _run_output_guardrailsz&RealtimeSession._run_output_guardrails  s    "11CCdFVFVFZFZG
 
 !U, 	+Ii=L8+!((3\*		+ !K43Q3Q$Q* 	I(}}))sT%8%89	   ==33%,,V4	 d<<< **..{; //(&7 ))   ++(()C)EFFF J[[vv//88:[O[++((*!6tyy7Q6RS   U   G \s   AH<H?G2G/+G2?AHH*HHH!H,<H(H)H/G22	G?;H>G??HHHc                    t        j                  | j                  ||            }| j                  j	                  |       |j                  | j                         y r   )rM   create_taskr=  rW   r  add_done_callback_on_guardrail_task_done)rX   r   r   tasks       r^   r   z'RealtimeSession._enqueue_guardrail_task  sK     ""4#>#>t[#QR!!$' 	t;;<r`   c                   | j                   j                  |       |j                         s[|j                         }|rHt	        j
                  | j                  t        | j                  ddt        |       i                   yyy)z&Handle completion of a guardrail task.r   zGuardrail task failed: r   N)
rW   discard	cancelledr   rM   r?  rl   r   rG   r   )rX   rB  r   s      r^   rA  z'RealtimeSession._on_guardrail_task_done  s}     	%%d+ ~~(I##OO%!%!1!1#,0GIGW.X"Y   r`   c                    | j                   D ]#  }|j                         r|j                          % | j                   j                          y r   )rW   donecancelr   )rX   rB  s     r^   _cleanup_guardrail_tasksz(RealtimeSession._cleanup_guardrail_tasks  s=    )) 	D99;	 	##%r`   c                   K   | j                          | j                  j                  |        | j                  j                          d{    d| _        y7 w)z2Clean up all resources and mark session as closed.NT)rI  rD   remove_listenerrq   rP   rb   s    r^   rx   zRealtimeSession._cleanup  sN      	%%' 	##D) kk!!!  	"s   A	AAAc                  K   | j                   j                         }|j                  |j                  |d<   t        j                  |j                  | j                        |j                  | j                        | j                  || j                               d {   \  }}}|xs d|d<   |xs g |d<   |xs g |d<   |r|j                  |       | j                  j                  dd      }|rd |d<   |S 7 [w)	Npromptr   instructionsr   r   tracing_disabledFtracing)rL   ri   rM  rM   r   get_system_promptrF   r   r   r   rJ   rK   )rX   re   rZ   r   rN  r   r   disable_tracings           r^   rj   z6RealtimeSession._get_updated_model_settings_from_agent  s      4499;<<#).X&.5nn##D$9$9: 5 56ud&;&;</
 )
%eX
 ,8+=2($)KR!'/~2$ ##$56**../A5I*.Y'#)
s   BC<C:AC<c                z  	K   g }j                   D ]O  }t        |t              r|j                  |       %t        |t              s6|j                  t        |             Q dfd	t        j                  	fd|D          d {   }t        ||      D cg c]
  \  }}|s	| }}}|S 7 'c c}}w w)Nc                   K   | j                   }t        |t              r|S  |      }t        j                  |      r
| d {   S |S 7 wr   )
is_enabledr   boolinspectisawaitable)handoff_objattrresrZ   context_wrappers      r^   _check_handoff_enabledz=RealtimeSession._get_handoffs.<locals>._check_handoff_enabled*  sM     ))D$%.C""3' y J !s   AAAAc              3  .   K   | ]  } |        y wr    )r   hr]  s     r^   r   z0RealtimeSession._get_handoffs.<locals>.<genexpr>3  s     (Uq)?)B(Us   )rY  z Handoff[Any, RealtimeAgent[Any]]r  rV  )	r   r   r   r   r   r'   rM   r   zip)
r  rZ   r\  r   handoff_itemresultsr`  okenabledr]  s
    ``      @r^   r   zRealtimeSession._get_handoffs  s      <>!NN 	@L,0-L-8 0 >?		@	  (UH(UVV"%h"8?BB1?? W?s1   AB;
AB;B3B;
B5*B5.B;5B;)NN)rY   r0   rZ   r   r>   zTContext | Noner[   zRealtimeModelConfig | Noner\   zRealtimeRunConfig | Noner  None)r  r0   )r  r<   )rr   r   rs   r   rt   r   r  rf  )r  z#AsyncIterator[RealtimeSessionEvent])r  rf  )r   r   r  rf  )r   bytesr   rV  r  rf  )rZ   r   r  rf  )r{   r3   r  rf  )r{   r$   r  rf  )r{   r5   r  rf  )r  list[RealtimeItem]r{   zARealtimeModelInputAudioTranscriptionCompletedEvent | RealtimeItemr  rh  )r   r   r   r   r  rV  )r   r   r   r   r  rf  )rB  zasyncio.Task[Any]r  rf  )re   z#RealtimeSessionModelSettings | NonerZ   r   r  r   )rZ   zRealtimeAgent[Any]r\  zRunContextWrapper[Any]r  z&list[Handoff[Any, RealtimeAgent[Any]]])__name__
__module____qualname____doc__r_   propertyrY   rm   ro   ru   r|   rq   r   r   r   r   r   rl   r   classmethodr   r=  r   rA  rI  rx   rj   r   r_  r`   r^   r<   r<   ?   sL   0 48/3*>*> *> !	*>
 1*> -*> 
*>X  4'U @E YC
h T+_EB i%'i% Qi% 
	i% i%V?B=&& >    
&	 < &9O	/ r`   r<   )I
__future__r   rM   rW  collections.abcr   typingr   r   typing_extensionsr   rZ   r	   
exceptionsr
   r   r   r   r   run_contextr   r   r   r   r   r   r   configr   r   r   eventsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   itemsr(   r)   r*   r+   r,   r-   r.   r/   rY   r0   r1   r2   model_eventsr3   r4   r5   model_inputsr6   r7   r8   r9   r:   r<   r_  r`   r^   <module>rz     s    "   )  *  6   5  &   V V    $ '	 	 	 M L 
 v+ vr`   