
    /jk/                       % S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
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JrJr  S SKJrJrJr  S SKJr  S SK J!r!  SSK"J#r#  \RH                  RK                  SSSSS9r&Sr'S\(S'   Sr)\" SS9r*\" SSSSSS9r+\" S S9r,S!r-    S)S" jr.    S*S# jr/    S+S$ jr0S,S% jr1S-S& jr2S.S' jr3    S/S( jr4g)0    )annotationsN)Sequence)Any)rtc)llm)
NotGivenOr)is_given)realtime	responses)Logprob)InputAudioNoiseReductionInputAudioTranscriptionTurnDetection)AudioTranscriptionNoiseReductionTypeRealtimeAudioInputTurnDetection)LogProbProperties)NoiseReduction   )loggersemantic_vadTmedium)typecreate_response	eagernessinterrupt_responseautozresponses.ToolChoiceOptionsDEFAULT_TOOL_CHOICEinfzgpt-4o-mini-transcribe)model
server_vadg      ?i,     )r   	thresholdprefix_padding_mssilence_duration_msr   z	whisper-1i  c                    [        U 5      (       a  U c  g [        U [        5      (       a  U $ [        U [        5      (       a  [        U R                  S9$ [        U S9$ )N)r   )r	   
isinstancer   r   r   )noise_reductions    V/app/agent/.venv/lib/python3.13/site-packages/livekit/plugins/openai/realtime/utils.pyto_noise_reductionr*   ?   sT    
 O$$(?/>22/#;<<?#7#788//    c           
         [        U 5      (       d  [        $ U c  g [        U [        5      (       a%  [        R
                  " S0 U R                  SSSS9D6$ U $ )NT)by_aliasexclude_unsetexclude_defaults )r	   !DEFAULT_INPUT_AUDIO_TRANSCRIPTIONr'   r   r   model_construct
model_dump)audio_transcriptions    r)   to_audio_transcriptionr5   M   sh     '((00"%'>??!11 
!,,TD - 
 	

 r+   c                   [        U 5      (       d  [        $ U c  g [        U [        5      (       GaH  0 nU R                  S:X  a  SUS'   U R
                  b  U R
                  US'   U R                  b  U R                  US'   U R                  b  U R                  US'   U R                  b  U R                  US'   [        R                  R                  " S0 UD6$ U R                  S:X  ay  SUS'   U R                  b  U R                  US'   U R                  b  U R                  US'   U R                  b  U R                  US	'   [        R                  R                  " S0 UD6$ [        S
U R                   35      eU $ )Nr!   r   r#   r$   r%   r   r   r   r   z!unsupported turn detection type: r0   )r	   DEFAULT_TURN_DETECTIONr'   r   r   r#   r$   r%   r   r
   #realtime_audio_input_turn_detection	ServerVadr   r   SemanticVad
ValueError)turn_detectionkwargss     r)   to_turn_detectionr>   _   s{    N##%%.-00!#,.)F6N''3&4&>&>{#//;.<.N.N*+11=0>0R0R,---9,:,J,J()??IISFSS  N2+F6N--9,:,J,J()''3&4&>&>{#00</=/P/P+,??KKUfUU@ATAT@UVWWr+   c                <   U R                   S:X  aB  [        R                  " U R                  SU R                  U R
                  U R                  S9nGOU R                   S:X  a`  [        R                  " U R                  SU R                  U R                  S9nSUl         U R                  Ul        U R                  Ul        GOHU R                   S:X  Ga7  U R                  S:X  d  U R                  S:X  aq  / nU R                   HG  n[        U[        5      (       d  M  UR                  [        R                  R                  SUS	95        MI     [        R                   " SSUS
9nGOU R                  S:X  aq  / nU R                   HG  n[        U[        5      (       d  M  UR                  [        R"                  R                  SUS	95        MI     [        R$                  " SSUS
9nGO%U R                  S:X  Ga  / nU R                   GH  n[        U[        5      (       a/  UR                  [        R&                  R                  SUS	95        MH  [        U[(        R*                  5      (       a  [(        R,                  R/                  U5      nUR0                  (       a  [2        R4                  " S5        M  UR6                  c   eUR                  [        R&                  R                  SSUR8                   S[:        R<                  " UR6                  5      R?                  S5       3S95        GM+  [        U[(        R@                  5      (       d  GMM  [:        R<                  " [B        RD                  " URF                  5      RH                  5      R?                  S5      nUR                  [        R&                  R                  SUURJ                  S95        GM     [        RL                  " SSUS
9nO[O        SU R                   35      eU R                  Wl        U$ )Nfunction_call)idr   call_idname	argumentsfunction_call_output)rA   r   rB   outputmessagesystem	developer
input_text)r   text)r   rolecontent	assistantoutput_textuserz-External URL is not supported for input_imageinput_imagezdata:z;base64,zutf-8)r   	image_urlinput_audio)r   audio
transcriptzunsupported role: )(r   r
   $RealtimeConversationItemFunctionCallrA   rB   rC   rD   *RealtimeConversationItemFunctionCallOutputrF   rL   rM   r'   strappend)realtime_conversation_item_system_messageContent%RealtimeConversationItemSystemMessage,realtime_conversation_item_assistant_message(RealtimeConversationItemAssistantMessage'realtime_conversation_item_user_messager   ImageContentutilsserialize_imageexternal_urlr   warning
data_bytes	mime_typebase64	b64encodedecodeAudioContentr   combine_audio_framesframedatarU   #RealtimeConversationItemUserMessager;   )itemconversation_itemsystem_contentcassistant_contentuser_contentimgencoded_audios           r)   livekit_item_to_openai_itemrw      s|    yyO#$IIww LLnn
 
,	,$OOww'LL;;	
 "8$(LL!#';; 	i	99 DII$<_aN\\a%%")) JJRR!-!" S  " !) N N&!
 YY+%   \\a%%%,, MMUU!.!" V  " !) Q Q )!
 YY& []L\\a%% '' HHPP!-!" Q   3#3#344))33A6C'''VW >>555 '' HHPP!.(-cmm_HVEUEUVYVdVdEeElElmtEuDv&w Q   3#3#344$*$4$4S5M5Magg5V5[5[$\$c$c%M !'' HHPP!."/'(|| Q 1 "> !) L L$! 1$))=>>77r+   c                   U R                   c   S5       eU R                  S:X  a{  U R                  c   S5       eU R                  c   S5       eU R                  c   S5       e[
        R                  " U R                   U R                  U R                  U R                  S9$ U R                  S:X  a]  U R                  c   S5       eU R                  c   S5       e[
        R                  " U R                   U R                  U R                  S	S
9$ U R                  S:X  Ga  U R                  c   S5       eU R                  c   S5       e/ n[        U [        R                  5      (       aC  U R                   H1  nUR                  (       d  M  UR                  UR                  5        M3     GOU[        U [        R                   5      (       aB  U R                   H1  nUR                  (       d  M  UR                  UR                  5        M3     O[        U [        R"                  5      (       a  U R                   H  nUR                  S:X  a*  UR                  b  UR                  UR                  5        M=  UR                  S:X  a<  UR$                  b/  UR                  [
        R&                  " UR$                  S95        M  UR                  S:X  d  M  UR(                  c  M  UR                  UR(                  5        M     [
        R*                  " U R                   U R                  US9$ [-        SU R                   35      e)Nz
id is Noner@   zcall_id is Nonezname is Nonezarguments is None)rA   rB   rC   rD   rE   zoutput is NoneF)rA   rB   rF   is_errorrG   zrole is Nonezcontent is NonerJ   rQ   )imagerS   )rA   rL   rM   zunsupported item type: )rA   r   rB   rC   rD   r   FunctionCallrF   FunctionCallOutputrL   rM   r'   r
   r\   rK   rY   r^   rn   rR   r`   rU   ChatMessager;   )ro   rM   scacucs        r)   openai_item_to_livekit_itemr      s   77,,yyO#||':)::'yy$4n4$~~)>+>>)wwLLnn	
 	
 yy**||':)::'{{&8(88&%%wwLL;;	
 	
 yyIyy$4n4$||':)::')+dHJJKKll777NN277+ # hOOPPll777NN277+ # hJJKKll77l*rww/BNN277+WW-",,2JNN3#3#3",,#GHWW-"--2KNN2==1 # ww
 	
 .tyyk:
;;r+   c                    [        U [        5      (       a  U $ [        U [        5      (       a$  U S   S:X  a  [        R                  " U S   S   SS9$ [
        $ )Nr   functionrC   )rC   r   )r'   rX   dictr   ToolChoiceFunctionr   )tool_choices    r)   to_oai_tool_choicer   !  sY    +s##	K	&	&;v+>*+L++Z(0
 	

 r+   c                ~    U (       d  g[        S U  5       5      n[        R                  " U[        U 5      -  5      nU$ )ah  Calculate a confidence score from token log probabilities.

Converts log probabilities to probabilities (using exp) and returns
the geometric mean of all token probabilities as the confidence score.

Args:
    logprobs: Sequence of objects with a logprob attribute, or None

Returns:
    Confidence score between 0.0 and 1.0, or None if logprobs is None/empty
Nc              3  8   #    U  H  oR                   v   M     g 7f)N)logprob).0lps     r)   	<genexpr>5calculate_confidence_from_logprobs.<locals>.<genexpr>?  s     6Xr

Xs   )summathexplen)logprobstotal_logprobgeometric_means      r)   "calculate_confidence_from_logprobsr   .  s7     6X66MXXmc(m;<Nr+   )r(   zQNotGivenOr[InputAudioNoiseReduction | NoiseReduction | NoiseReductionType | None]returnzNoiseReduction | None)r4   z?NotGivenOr[InputAudioTranscription | AudioTranscription | None]r   zAudioTranscription | None)r<   zBNotGivenOr[RealtimeAudioInputTurnDetection | TurnDetection | None]r   z&RealtimeAudioInputTurnDetection | None)ro   llm.ChatItemr   realtime.ConversationItem)ro   r   r   r   )r   zllm.ToolChoice | Noner   z!realtime.RealtimeToolChoiceConfig)r   z:Sequence[LogProbProperties] | Sequence[BetaLogprob] | Noner   zfloat | None)5
__future__r   rg   r   collections.abcr   typingr   livekitr   livekit.agentsr   livekit.agents.typesr   livekit.agents.utilsr	   openai.typesr
   r   Vopenai.types.beta.realtime.conversation_item_input_audio_transcription_completed_eventr   BetaLogprob"openai.types.beta.realtime.sessionr   r   r   openai.types.realtimer   r   r   )openai.types.realtime.log_prob_propertiesr   1openai.types.realtime.realtime_audio_config_inputr   logr   r8   r:   r7   r   __annotations__"DEFAULT_MAX_RESPONSE_OUTPUT_TOKENSr1   AZURE_DEFAULT_TURN_DETECTION'AZURE_DEFAULT_INPUT_AUDIO_TRANSCRIPTIONDEFAULT_MAX_SESSION_DURATIONr*   r5   r>   rw   r   r   r   r0   r+   r)   <module>r      s9   "   $    * , 
 
 H L  "EEQQ		 R   4: 0 9%* "$6
"% !
  -	   +B
+ '  ' 00 	0X$!V!+!HcL5<p
Hr+   