
    i                        U d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ ddl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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.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; e"jx                  e"jz                  e"j|                  e"j|                  dZ?ee@e"f   eAd<    G d de      ZBy)zJ
This file contains the transformation logic for the Gemini realtime API.
    N)AnyDictListOptionalUnioncast)verbose_logger)uuid)Logging)BaseRealtimeConfigVertexGeminiConfig) LiteLLMCompletionResponsesConfig)AutomaticActivityDetection BidiGenerateContentRealtimeInput&BidiGenerateContentRealtimeInputConfig BidiGenerateContentServerContent BidiGenerateContentServerMessageBidiGenerateContentSetup)OpenAIRealtimeContentPartDone%OpenAIRealtimeConversationItemCreatedOpenAIRealtimeDoneEventOpenAIRealtimeEventsOpenAIRealtimeEventTypesOpenAIRealtimeOutputItemDoneOpenAIRealtimeResponseAudioDone&OpenAIRealtimeResponseContentPartAddedOpenAIRealtimeResponseDelta OpenAIRealtimeResponseDoneObjectOpenAIRealtimeResponseTextDone&OpenAIRealtimeStreamResponseBaseObject+OpenAIRealtimeStreamResponseOutputItemAddedOpenAIRealtimeStreamSession!OpenAIRealtimeStreamSessionEventsOpenAIRealtimeTurnDetection)GeminiResponseModalitiesHttpxBlobTypeHttpxContentType)ALL_DELTA_TYPES'RealtimeModalityResponseTransformOutputRealtimeResponseTransformInputRealtimeResponseTypedDict)get_empty_usage   )encode_unserializable_typesget_api_key_from_env)setupCompletez serverContent.generationCompletezserverContent.turnCompletezserverContent.interrupted MAP_GEMINI_FIELD_TO_OPENAI_EVENTc                   H   e Zd Z	 d=dededee   defdZ	 d=dee   dedee   defdZd	ede	fd
Z
dee   de	fdZd>defdZdedefdZdedee   fdZdededefdZ	 d=dededee   dee   fdZ	 d=dededee   defdZ	 d=deee      defdZ	 d=dededededee   dee   fdZdededededef
d Zd!eee      d"ee   d#ee   dedeee f   f
d$Z!d"ee   d#ee   d%eee f   dedee   f
d&Z"e#d'ed(ede$fd)       Z%d*eeee   f   d+eee      deee      fd,Z&d*eeee   f   d-eee'      deee'      fd.Z(	 d=de)d#ee   d/ee   d0eee'      dee   de*fd1Z+d2e	d3ed4e,dede-f
d5Z.d6eded7ee   d3ede	f
d8Z/deee0f   ded9e1d4e,de2f
d:Z3defd;Z4dedefd<Z5y)?GeminiRealtimeConfigNheadersmodelapi_keyreturnc                     |S N )selfr5   r6   r7   s       |/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/gemini/realtime/transformation.pyvalidate_environmentz)GeminiRealtimeConfig.validate_environmentD   s	         api_basec                     |d}|
t               }|t        d      |j                  dd      }|j                  dd      }| d| S )z
        Example output:
        "BACKEND_WS_URL = "wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent"";
        z'wss://generativelanguage.googleapis.comz(api_key is required for Gemini API callszhttps://zwss://zhttp://zws://zR/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=)r0   
ValueErrorreplace)r<   r@   r6   r7   s       r=   get_complete_urlz%GeminiRealtimeConfig.get_complete_urlI   se     @H?*,G?GHH##J9##Iw7mnumvwwr?   
model_turnc                    d|v rp|d   }t        |      dk7  r"t        j                  dt        |       d       |d   }d|v rt        j                  S d|v rt        j
                  S t        d|       t        d	|       )
aO  
        Map the model turn event to the OpenAI realtime events.

        Returns either:
        - response.text.delta - model_turn: {"parts": [{"text": "..."}]}
        - response.audio.delta - model_turn: {"parts": [{"inlineData": {"mimeType": "audio/pcm", "data": "..."}}]}

        Assumes parts is a single element list.
        parts   zRealtime: Expected 1 part, got z for Gemini model turn event.r   text
inlineDatazUnexpected part type: z-Unexpected model turn event, no 'parts' key: )lenr	   warningr   RESPONSE_TEXT_DELTARESPONSE_AUDIO_DELTArB   )r<   rE   rG   parts       r=   map_model_turn_eventz)GeminiRealtimeConfig.map_model_turn_eventZ   s     j w'E5zQ&&5c%j\A^_ 8D~/CCC%/DDD #9$!@AAHUVVr?   
delta_typec                 r    |dk(  rt         j                  S |dk(  rt         j                  S t        d|       )NrI   audiozUnexpected delta type: )r   RESPONSE_TEXT_DONERESPONSE_AUDIO_DONErB   )r<   rQ   s     r=   map_generation_complete_eventz2GeminiRealtimeConfig.map_generation_complete_eventu   s?     +>>>7"+???6zlCDDr?   input_audio_formatc                 2    dddd}|j                  |d      S )Nz	audio/pcmz
audio/pcmuz
audio/pcma)pcm16	g711_ulaw	g711_alawzapplication/octet-stream)get)r<   rW   
mime_typess      r=   get_audio_mime_typez(GeminiRealtimeConfig.get_audio_mime_type   s'     %%

 ~~02LMMr?   valuec                     t               }d|v rt        |d   t              r
|d    |d<   nd|d<   d|v rt        |d   t              r|d   |d<   d|v rt        |d   t              r|d   |d<   |S )Ncreate_responsedisabledTprefix_padding_msprefixPaddingMssilence_duration_mssilenceDurationMs)r   
isinstanceboolint)r<   r_   automatic_activity_dections      r=   map_automatic_turn_detectionz1GeminiRealtimeConfig.map_automatic_turn_detection   s     &@%A"%*U;L5Mt*T9>?P9Q5Q&z259&z2%'Ju=P7QSV,W<ABU<V&'89 E)j'(#/
 ?D%?&':; *)r?   c                 
    g dS )N)instructionstemperaturemax_response_output_tokens
modalitiestoolsinput_audio_transcriptionturn_detectionr;   )r<   r6   s     r=   get_supported_openai_paramsz0GeminiRealtimeConfig.get_supported_openai_params   s    
 	
r?   optional_paramsnon_default_paramsc                 z   d|vri |d<   |j                         D ]  \  }}|dk(  rt        dd|ig      |d<   |dk(  r	||d   d<   -|dk(  r	||d   d	<   ;|d
k(  r:t        t        t           |      D cg c]  }|j                          c}|d   d<   z|dk(  r'ddlm}  |       }|j                  ||      |d   d<   |dk(  r|i |d<   |dk(  st        t        |      }| j                  |      }	t        |	      dkD  st        |	      |d<    t        |d         dk(  r|j                  d       |S c c}w )NgenerationConfigrm   userrI   )rolerG   systemInstructionrn   ro   maxOutputTokensrp   responseModalitiesrq   r   r   )r_   ru   rr   inputAudioTranscriptionrs   )automaticActivityDetectionrealtimeInputConfig)itemsr(   r   r   strupper@litellm.llms.vertex_ai.gemini.vertex_and_google_ai_studio_geminir   _map_functionr%   rk   rK   r   pop)
r<   ru   rv   keyr_   modalityr   vertex_gemini_configvalue_typed!transformed_audio_activity_configs
             r=   map_openai_paramsz&GeminiRealtimeConfig.map_openai_params   s    _424O./,224JCn$7G'88 34 %EJ 23MB44IN 234EF$59$s)U5KM5KHNN$5KM 234HI  (:';$ )66 7    23
 338I=? 9:(("#>F484U4U51 9:Q> ?3T $-E 5N 123q8 23?Ms   3D8messagesession_configuration_requestc           
      X   i }	 t        j                  |      }g }|j                  d      }|dk(  rF| j                  i |d         }	d	| |	d
<   |j                  t        j                  d|	i             |S |dk(  rg S |dk(  r"t        | j                         |d         |d<   n|dk(  r|j                  di       }
|
j                  dg       }|D cg c]8  }t        |t              r&|j                  d      dk(  r|j                  dd      : }}dj                  t!        d |            }|sg S ||d<   ng S t#        |      dk7  r1t        dt#        |       dt%        |j'                                      t)        t*        t-        t)        t.        t        t0        f   |                  }|j                  t        j                  d|i             |S # t         j                  $ r> t        |t              r|j                  dd      }nt        |      }t        d|       w xY wc c}w )Nutf-8rC   errorsInvalid JSON message: typezsession.updatesession)ru   rv   models/r6   setupzresponse.createzinput_audio_buffer.appendrS   )mimeTypedatazconversation.item.createitemcontent
input_textrI     rH   z"Only one argument can be set, got z: realtime_input)jsonloadsJSONDecodeErrorrg   bytesdecoder   rB   r\   r   appenddumpsr'   r^   dictjoinfilterrK   listkeysr   r   r/   r   object)r<   r   r6   r   realtime_input_dictjson_messagemessage_strmessagesmsg_type$client_session_configuration_requestr   content_listc
text_partsrI   s                  r=   transform_realtime_requestz/GeminiRealtimeConfig.transform_realtime_request   sf    AC	E::g.L !##F+ ''373I3I "|I7N 4J 40 ?FeW<M09OODJJ1U'VWXO ((I 22+8113,w:O,( 33##FB/D88Ir2L &%Aa&155=L+H fb!%  
 88F445D	*.' I"#q(4S9L5M4N O,113457 
 #,'T#v+->@S(TU

 	

$46I#JKLu ## 	E'5)%nnWYnG!'l5k]CDD	E@s   G =H'AH$logging_session_idc                    |r&t        j                  |      j                  di       }ni }|j                  d      xs |}|j                  di       xs i }|j                  ddg      }t        t        t
           |      D cg c]  }|j                          }	}|j                  d      }
t        ||	      }|
t        |
t
              r|
|d<   |Tt        |t
              rDd	|v r|j                  d	      d
   |d<   n(|j                  d      r|t        d      d  |d<   n||d<   t        d|t        t        j                                     S c c}w )Nr   r6   rx   r}   TEXTr{   )idrp   rm   z/models/r   zsession.created)r   r   event_id)r   r   r\   r   r   r   lowerr#   rg   split
startswithrK   r$   r
   uuid4)r<   r6   r   r   "session_configuration_request_dict_modelgeneration_configgemini_modalitiesr   _modalities_system_instructionr   s               r=   transform_session_created_eventz4GeminiRealtimeConfig.transform_session_created_event  sr    )KO::-Lc'2 / 24.377@IE.223ErJPb 	 .112FQ-1$s)=N-O
-OHNN-O 	 
 ADD
 .!"
 *z:Ms/S&9GN#*VS"9 V##)<<
#;B#? ""9-#)#i.*:#; #) 0"&
 	
3
s   Eprevious_messagesc                 d    |t        |      dk(  ryd|d   v r|d   d   j                  d      ryy)Nr   Tr   r   deltaF)rK   endswith)r<   r   s     r=   _is_new_content_deltaz*GeminiRealtimeConfig._is_new_content_deltaK  sK     $,=(>!(C&r**/@/DV/L/U/U0
 r?   response_idoutput_item_idconversation_idc                 z   |t        d      t        j                  |      j                  di       }|j                  di       }|j                  ddg      }t	        t
        t           |      D 	cg c]  }	|	j                          }
}	|j                  d      }|j                  d      }g }t        dd	j                  t        j                               d
|dg ||
||d      }|j                  |       t        d|d|ddddg d      }|j                  |       t        dd	j                  t        j                               |ddddg d      }|j                  |       t        dddd	j                  t        j                               ||dk(  rdddnddd|      }|j                  |       |S c c}	w )Nz>session_configuration_request is required for Gemini API callsr   rx   r}   r   rn   r|   zresponse.createdevent_{}realtime.responsein_progress)r   r   statusoutputr   rp   rn   max_output_tokensr   r   responsezresponse.output_item.addedr   realtime.itemr   	assistantr   r   r   r   rz   r   )r   r   output_indexr   zconversation.item.created)r   r   r   zresponse.content_part.addedrI   r   r   rI   rS   r   
transcript)r   content_indexr   r   item_idrO   r   )rB   r   r   r\   r   r   r   r   r!   formatr
   r   r   r"   r   r   )r<   r   r   r   rQ   r   r   r   r   r   r   _temperature_max_output_tokensresponse_itemsresponse_createdresponse_output_item_addedconversation_item_createdresponse_content_part_addeds                     r=   return_new_content_delta_eventsz4GeminiRealtimeConfig.return_new_content_delta_eventsW  s    )0P  HLzz)H

#gr
 	+ ?BB
 .112FQ-1$s)=N-O
-OHNN-O 	 
 ),,];.223DE57 B#&&tzz|4-!'#2)+%7	
 	./ &Q-#$)!'#	&
" 	89$I,&&tzz|4$)!'#%
! 	78&L.&&tzz|4" ' # $"$
 $#'
#& 	9:Y
s   1F8c           	      D   d}	 d|v r>d|d   v r7|d   d   D ],  }d|v r	||d   z  }d|v s||d   j                  dd      z  }. t        |dk(  rd	nd
ddj	                  t        j                               |d||      S # t        $ r}t        d| d|       d }~ww xY w)Nr   	modelTurnrG   rI   rJ   r   z)Error transforming content delta events: z, got message: response.text.deltazresponse.audio.deltar   r   )r   r   r   r   r   r   r   )r\   	ExceptionrB   r   r   r
   r   )r<   r   r   r   rQ   r   rO   es           r=   transform_content_delta_eventsz3GeminiRealtimeConfig.transform_content_delta_events  s     
	g%'W[5I*I#K09D~f-%-l!3!7!7!CC	 : + ' &+&&tzz|4"#
 	
  	;A3ogYW 	s   'B  B   	B	BBdelta_chunkscurrent_output_item_idcurrent_response_idc           	         |r#dj                  |D cg c]  }|d   	 c}      }nd}|#dj                  t        j                               }|#dj                  t        j                               }|dk(  r3t	        dddj                  t        j                               |d||	      S |d
k(  r2t        dddj                  t        j                               |d|      S y c c}w )Nr   r   item_{}resp_{}rI   zresponse.text.doner   r   )r   r   r   r   r   r   rI   rS   zresponse.audio.done)r   r   r   r   r   r   )r   r   r
   r   r    r   )r<   r   r   r   rQ   delta_chunkr   s          r=   transform_content_done_eventz1GeminiRealtimeConfig.transform_content_done_event  s     GG\R\k[1\RSEE!)%.%5%5djjl%C"&"+"2"24::<"@1)#**4::<8./  7"2*#**4::<8./  ## Ss   C"delta_done_eventc                 B   |#dj                  t        j                               }|#dj                  t        j                               }g }t        t        t
           |j                  d            }t        dddj                  t        j                               |d|r
|dk(  rd|dndd	d
|      }|j                  |       t        ddj                  t        j                               d||dddd|r
|dk(  rd|dndd	d
gd      }|j                  |       |S )z`
        - return response.content_part.done
        - return response.output_item.done
        r   r   rI   zresponse.content_part.doner   r   r   rS   r   r   )r   r   r   r   r   rO   r   response.output_item.doner   r   	completedr   r   )r   r   r   r   r   )
r   r
   r   r   r   r   r\   r   r   r   )	r<   r   r   r   rQ   returned_itemsdelta_done_event_textresponse_content_part_doneresponse_output_item_dones	            r=   %return_additional_content_done_eventsz:GeminiRealtimeConfig.return_additional_content_done_events  sA    ")%.%5%5djjl%C"&"+"2"24::<"@57 $Xc]4D4H4H4P Q%B-&&tzz|4* )Z6-A  )>? $"$
 ,&
"  	89$@,&&tzz|4+,)!%# 1Z65I "(1FG %,*,		%
!. 	78r?   objpathc                 p    |j                  d      }| }|D ]  }t        |t              r
||v r||   } y  |S )N.)r   rg   r   )r  r  r   currentr   s        r=   get_nested_valuez%GeminiRealtimeConfig.get_nested_value?  sA    zz#C'4(SG^!#,	 
 r?   transformed_messagecurrent_delta_chunksc                 @   	 t        |t              r;g }d}|D ],  }|d   dk(  s|j                  t        t        |             d}. |sd }|S |d   dk(  r%|g }|j                  t        t        |             |S d }|S # t
        $ r}t        d| d|       d }~ww xY w)NFr   r   Tz%Error updating current delta chunks: , got transformed_message: )rg   r   r   r   r   r   rB   )r<   r  r	  any_delta_chunkeventr   s         r=   update_current_delta_chunksz0GeminiRealtimeConfig.update_current_delta_chunksJ  s    
	-t4')$"'0EV}(==,33 !<eD +/ 1 ' ) (' (/3HH+3/1,(//8:MN
 (' ,0('' 	7s:UViUjk 	(   !A> (A> ,A> :A> >	BBBcurrent_item_chunksc                 @   	 t        |t              r;g }d}|D ],  }|d   dk(  s|j                  t        t        |             d}. |sd }|S |d   dk(  r%|g }|j                  t        t        |             |S d }|S # t
        $ r}t        d| d|       d }~ww xY w)NFr   r   Tz$Error updating current item chunks: r  )rg   r   r   r   r   r   rB   )r<   r  r  any_item_chunkr  r   s         r=   update_current_item_chunksz/GeminiRealtimeConfig.update_current_item_chunksn  s    
	-t4&(#!&0EV}(CC+22 !=uE *. 1 & ( '& 'v.2MM*2.0+'..9;NO
 '& +/'&& 	6qc9TUhTij 	r  current_conversation_idoutput_itemsc                 T   |#dj                  t        j                               }|#dj                  t        j                               }|r&t        j                  |      j                  di       }ni }|j                  di       }|j                  d      }|j                  d      }	|j                  ddg      }
t        t        t           |
      D cg c]  }|j                          }}d	|v rt        j                  |
      }n
t               }t        j                  |      }t        ddj                  t        j                               t!        d|d|r|D cg c]  }|d   	 c}ng |||j#                                     }|||d   d<   |	|	|d   d<   |S c c}w c c}w )Nconv_{}r   r   rx   rn   r   r}   r   usageMetadata)completion_responsezresponse.doner   r   r   r   )r   r   r   r   r   rp   usager   r   )r   r
   r   r   r   r\   r   r   r   r   r   _calculate_usager-   r   3_transform_chat_completion_usage_to_responses_usager   r   
model_dump)r<   r   r   r  r  r   r   r   rn   r   r   r   r   _chat_completion_usageresponses_api_usageoutput_itemresponse_done_events                    r=   transform_response_done_eventz2GeminiRealtimeConfig.transform_response_done_event  s    #*&/&6&6tzz|&D#&"+"2"24::<"@(KO::-Lc'2 / 24.>BB
 (++M:-112EF-112FQ-1$s)=N-O
-OHNN-O 	 
 g%%7%H%H$+&" &5%6">rr"
 6 &&tzz|45*&" $ =IIL[[(LI 7&)446
" "=H
+M:(CT
+,?@""G
* Js   F F%openai_eventr   !realtime_response_transform_inputc                 *   |d   }|d   }|d   }|d   }|d   }	g }
|t         j                  k(  s|t         j                  k(  r|xs# dj                  t	        j
                               }|s`dj                  t	        j
                               }|xs# dj                  t	        j
                               }| j                  |	||||	      }
| j                  t        di |d
   |||      }|
j                  |       n|t         j                  k(  s|t         j                  k(  rh| j                  ||||      }|g}
|j                  d      xs |}|j                  d      xs |}| j                  ||||      }|
j                  |       |
|||||dS )Nr   r   r  r	  r   r   r   r  )r   r   r   r   rQ   serverContentrQ   )r   r   r   rQ   r   r   )r   r   r   rQ   )returned_messager   r   r  r	  current_delta_typer;   )r   rM   rN   r   r
   r   r   r   r   r   rT   rU   r   r\   r  extend)r<   r#  r   r$  rQ   r   r   r  r	  r   r(  r  transformed_content_done_eventresolved_item_idresolved_response_idadditional_itemss                   r=   handle_openai_modality_eventz1GeminiRealtimeConfig.handle_openai_modality_event  s    "C$"
 @@UV"C%#
  AAWX(I+)
% 8:4HHH7LLL"5"W9I9I$**,9W))2)9)9$**,)G&*A +YEUEUJJLF' $(#G#G2O 3#9$;) $H $  #'"E"E0Q<3PQ&#%	 #F # ##$784GGG7KKK-1-N-N'=$71%	 .O .* !??
 /229=WAW  /22=AXEX !  $II'7$8!?%	  J   ##$45 !1&<#6'>$8",
 	
r?   r   r)  c                 H   |j                  d      }|j                  d      }d }|r| j                  |      }nV|r| j                  |      }nAt        j	                         D ]*  \  }}||k(  sd|v st
        j                  ||      	 (|} n |t        d| d|       |S )Nr   generationCompleter'  r  Unknown openai event: z	, value: )r\   rP   rV   r2   r   r4   r  rB   )	r<   r   r_   r)  r   model_turn_eventgeneration_complete_eventr#  map_keys	            r=   map_openai_eventz%GeminiRealtimeConfig.map_openai_event$  s     !99[1$)II.B$C!;?445EFL&==- > L
 *J)O)O)Q%c>7N,==lGT  $0L *R 5cU)E7KLLr?   logging_objc                 `   	 t        j                  |      }|j                  }|d   }|d   }	|d   }
|d   }|d	   }|d
   }|d   }g }|j                  d      t        t              rj                  d      }t        |t              r{|j                  d      rj|j                  t        t        ddj                  t        j                                |d   dj                  t        j                                dd             j                  d      }t        |t              r|j                  d      r|j                  t        t        ddj                  t        j                                |d   |xs# dj                  t        j                                |	xs# dj                  t        j                                ddd             h d}t#        fd|D              s|||	||
|||dS |j%                         D ][  \  }}| j'                  ||||      }|t(        j*                  k(  r=| j-                  |||d	         }t        j.                  |      }|j                  |       l|t(        j0                  k(  r1| j3                  t5        d%i ||	|
|d      }|j                  |       |t(        j6                  k(  s9|t(        j8                  k(  s&|t(        j:                  k(  s|t(        j<                  k(  rT| j?                  |||d|j@                  v rdnd      }|jC                  |d           |d   }|d   }	|d   }
|d   }|d   }Pt        d!|        tE        |      dk(  r=t        |t              r|j                  dd      }nt        |      }t        d"|       | jG                  ||#      }| jI                  ||$      }|||	||
|||dS # t         j                  $ r> t        |t              r|j                  dd      }nt        |      }t        d|       w xY w)&z
        Keep this state less - leave the state management (e.g. tracking current_output_item_id, current_response_id, current_conversation_id, current_delta_chunks) to the caller.
        r   rC   r   r   r   r   r  r	  r   r  r)  r&  inputTranscriptionrI   z5conversation.item.input_audio_transcription.completedr   r   r   )r   r   r   r   r   outputTranscriptionzresponse.audio_transcript.deltar   )r   r   r   r   r   r   r   >   r   interruptedturnCompleter1  c              3   &   K   | ]  }|v  
 y wr:   r;   ).0kserver_contents     r=   	<genexpr>zCGeminiRealtimeConfig.transform_realtime_response.<locals>.<genexpr>  s     H4GqqN*4Gs   )r   r   r   r	  r  r  r)  r   )r   r_   r)  r   N)r   r   r  r   r  rS   r'  r(  r2  zUnknown message type: )r  r	  )r  r  r;   )%r   r   r   rg   r   r   r   rB   litellm_trace_idr\   r   r   r   r   r   r
   r   anyr   r6  r   SESSION_CREATEDr   r   RESPONSE_DONEr"  r   rM   rT   rN   rU   r/  r_   r*  rK   r  r  )r<   r   r6   r7  r$  r   r   r   r   r   r  r	  r   r  r)  r(  input_tx	output_tx_model_content_keysr   r_   r#  r  transformed_response_done_event_returned_messager@  s                            @r=   transform_realtime_responsez0GeminiRealtimeConfig.transform_realtime_responseB  s   	E::g.L )99!B$"
 @@UV"C%#
  AAWX(I+)
% @@UV ..BC 	 8:
 &))/:nd+%))*>?H(D)hll6.B '',$[(2(9(9$**,(G*26*:'0'7'7

'E-.	 '**+@AI)T*y}}V/D '',$E(2(9(9$**,(G%.v%6'= (>(//

=+> ,>(//

=,--.
&# H4GHH 0.D+>,@/F+>*<5R	 	 ',,.JC00#5)	 1 L 7GGG&*&J&J&56UV'#
 15

;N0O- ''(;<!9!G!GG262T2T<L|L(;,C2O!% 3U 3/ !''(GH 8 L LL#;#N#NN#;#P#PP#;#O#OO$($E$E  5)/<3E3E)Ev7	 %F %! !''(9:L(MN):;S)T&&78M&N#*;<U*V''89O'P$%67K%L" #9,!HII[ /\  A%'5)%nnWYnG!'l5k]CDD#?? 0!5  @  
 #== 0 3 > 

 )&<#6$8'>#6"4-J	
 		
e ## 	E'5)%nnWYnG!'l5k]CDD	Es   O AP-c                      y)NTr;   )r<   s    r=   requires_session_configurationz3GeminiRealtimeConfig.requires_session_configuration  s    r?   c                 ^    dg}d}d| d|ii d}|ri |d<   t        j                  d|i      S )ac  

        ```
        {
            "model": string,
            "generationConfig": {
                "candidateCount": integer,
                "maxOutputTokens": integer,
                "temperature": number,
                "topP": number,
                "topK": integer,
                "presencePenalty": number,
                "frequencyPenalty": number,
                "responseModalities": [string],
                "speechConfig": object,
                "mediaResolution": object
            },
            "systemInstruction": string,
            "tools": [object]
        }
        ```
        AUDIOFr   r}   )r6   rx   r~   outputAudioTranscriptionr   )r   r   )r<   r6   response_modalitiesoutput_audio_transcriptionsetup_configs        r=   r   z2GeminiRealtimeConfig.session_configuration_request  s^    0 @Gi%*"
 ug&!57J K')	2
 &79L34zz
 	
r?   r:   )rY   )6__name__
__module____qualname__r   r   r   r>   rD   r(   r   rP   r)   rV   r^   r%   r   rk   r   rt   r   r   r$   r   r   rh   r   r   r   r   r   r   r    r   r   r  staticmethodr   r  r  r   r  r   r   r"  r+   r*   r/  r6  r   LiteLLMLoggingObjr,   rK  rM  r   r;   r?   r=   r4   r4   C   s   BF$'2:3-	 MQx x.1x<DSMx	x"W*W	!W6E"?3E	!ENc N*0*	#*$	
 	
c 	
.#.9=.	.h 8<	CC C (0}	C
 
cCR 8<	/
/
  /
 (0}	/

 
+/
f CG
#D)=$>?
 

$ 8<`` ` 	`
 $` (0}` 
"	#`D 
1 
  
 	 

 $ 
 
% 
D!t$?@A! !)! &c]	!
 $! 
-/NN	O!F? (? &c]?  *,KK
	? $? 
"	#?B d # #  ""#7>R9S#ST" 't,G'HI" 
$23	4	"H "#7>R9S#ST  &d+G&HI  
$34	5	 P 8<=#1=# &c]=# "*#	=#
 t$@AB=# (0}=# 
!=#~S
.S
 S
 ,J	S

 $S
 
1S
j  %_5	
  
"<g
sEz"g
 g
 '	g

 ,Jg
 
#g
R )
3 )
3 )
r?   r4   )C__doc__r   typingr   r   r   r   r   r   litellmr	   litellm._uuidr
   *litellm.litellm_core_utils.litellm_loggingr   rX  -litellm.llms.base_llm.realtime.transformationr   r   r   Blitellm.responses.litellm_completion_transformation.transformationr   litellm.types.llms.geminir   r   r   r   r   r   litellm.types.llms.openair   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   litellm.types.llms.vertex_air&   r'   r(   litellm.types.realtimer)   r*   r+   r,   litellm.utilsr-   common_utilsr/   r0   rD  rT   rE  r2   r   __annotations__r4   r;   r?   r=   <module>rg     s     9 9 "  S L     $ 
  * L .==(@(S(S":"H"H!9!G!G	I  $s,D'D"E T
- T
r?   