
    Cj                       S SK Jr  S SKrS SKJr  S SKJrJr  SSKJ	r	  SSK
Jr  SS	KJrJr  SS
KJr  SSKJr   " S S\5      r " S S5      r " S S\R*                  5      r " S S\5      r " S S\R*                  5      rg)    )annotationsN)Callable)NotRequired	TypedDict   )MaybeAwaitable   )calculate_audio_length_ms)RealtimeAudioFormatRealtimeSessionModelSettings)RealtimeModelEvent)RealtimeModelSendEventc                  8    \ rS rSr% S\S'    S\S'    S\S'   Srg	)
RealtimePlaybackState   z
str | Nonecurrent_item_idz
int | Nonecurrent_item_content_indexzfloat | None
elapsed_ms N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       g/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/agents/realtime/model.pyr   r      s    7 **=Dr   r   c                  T    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
S	rg
)RealtimePlaybackTracker   a<  If you have custom playback logic or expect that audio is played with delays or at different
speeds, create an instance of RealtimePlaybackTracker and pass it to the session. You are
responsible for tracking the audio playback progress and calling `on_play_bytes` or
`on_play_ms` when the user has played some audio.c                .    S U l         S U l        S U l        g )N)_format_current_item_elapsed_msselfs    r   __init__ RealtimePlaybackTracker.__init__#   s    3759)-r   c                T    [        U R                  U5      nU R                  XU5        g)zCalled by you when you have played some audio.

Args:
    item_id: The item ID of the audio being played.
    item_content_index: The index of the audio content in `item.content`
    bytes: The audio bytes that have been fully played.
N)r
   r"   
on_play_ms)r&   item_iditem_content_indexbytesmss        r   on_play_bytes%RealtimePlaybackTracker.on_play_bytes)   s"     't||U;R8r   c                    U R                   X4:w  a  X4U l         X0l        gU R                  c   eU =R                  U-  sl        g)zCalled by you when you have played some audio.

Args:
    item_id: The item ID of the audio being played.
    item_content_index: The index of the audio content in `item.content`
    ms: The number of milliseconds of audio that have been played.
Nr#   r$   )r&   r+   r,   r.   s       r   r*   "RealtimePlaybackTracker.on_play_ms4   sI     '!>>")!>D!##///"r   c                     SU l         SU l        g)zACalled by the model when the audio playback has been interrupted.Nr2   r%   s    r   on_interrupted&RealtimePlaybackTracker.on_interruptedC   s    !r   c                    Xl         g)zaWill be called by the model to set the audio format.

Args:
    format: The audio format to use.
N)r"   )r&   formats     r   set_audio_format(RealtimePlaybackTracker.set_audio_formatH   s	     r   c                    U R                   c  SSSS.$ U R                  c   eU R                   u  pUUU R                  S.$ )z>Will be called by the model to get the current playback state.N)r   r   r   r2   )r&   r+   r,   s      r   	get_state!RealtimePlaybackTracker.get_stateP   s\    %#'.2" 
 +++&*&8&8#&*<**
 	
r   )r#   r$   r"   NreturnNone)r+   strr,   intr-   r-   r?   r@   )r+   rA   r,   rB   r.   floatr?   r@   )r8   r   r?   r@   )r?   r   )r   r   r   r   __doc__r'   r/   r*   r5   r9   r<   r   r   r   r   r   r      s%    9
.	9# 

r   r   c                  @    \ rS rSrSr\R                  SS j5       rSrg)RealtimeModelListenerb   z)A listener for realtime transport events.c                   #    g7f)z:Called when an event is emitted by the realtime transport.Nr   r&   events     r   on_eventRealtimeModelListener.on_evente   
      	   r   N)rJ   r   r?   r@   )	r   r   r   r   rD   abcabstractmethodrK   r   r   r   r   rF   rF   b   s    3 r   rF   c                  `    \ rS rSr% SrS\S'    S\S'    S\S'    S	\S
'    S\S'    S\S'   Srg)RealtimeModelConfigk   z+Options for connecting to a realtime model.z4NotRequired[str | Callable[[], MaybeAwaitable[str]]]api_keyzNotRequired[str]urlzNotRequired[dict[str, str]]headersz)NotRequired[RealtimeSessionModelSettings]initial_model_settingsz$NotRequired[RealtimePlaybackTracker]playback_trackercall_idr   N)r   r   r   r   rD   r   r   r   r   r   rR   rR   k   sN    5AA
 
 )(
 FE<::	 r   rR   c                      \ rS rSrSr\R                  S
S j5       r\R                  SS j5       r\R                  SS j5       r	\R                  SS j5       r
\R                  SS j5       rSrg	)RealtimeModel   zJInterface for connecting to a realtime model and sending/receiving events.c                   #    g7f)z6Establish a connection to the model and keep it alive.Nr   )r&   optionss     r   connectRealtimeModel.connect   rM   rN   c                    g)zAdd a listener to the model.Nr   r&   listeners     r   add_listenerRealtimeModel.add_listener        	r   c                    g)z!Remove a listener from the model.Nr   rb   s     r   remove_listenerRealtimeModel.remove_listener   rf   r   c                   #    g7f)zSend an event to the model.Nr   rI   s     r   
send_eventRealtimeModel.send_event   rM   rN   c                   #    g7f)zClose the session.Nr   r%   s    r   closeRealtimeModel.close   rM   rN   r   N)r^   rR   r?   r@   )rc   rF   r?   r@   )rJ   r   r?   r@   r>   )r   r   r   r   rD   rO   rP   r_   rd   rh   rk   rn   r   r   r   r   r[   r[      s    T  	  	  	  	 r   r[   )
__future__r   rO   collections.abcr   typing_extensionsr   r   util._typesr   _utilr
   configr   r   model_eventsr   model_inputsr   r   r   ABCrF   rR   r[   r   r   r   <module>ry      sl    " 
 $ 4 ( , - 0EI EB
 B
JCGG )) )XCGG r   