
    /jG                       % S SK Jr  S SKrS SKrS SKJr  S SKJrJrJ	r	  S SK
r
S SKrS SKJrJrJrJrJr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J r   S
SKJ!r!J"r#  S
SK$J%r%  S
SK&J'r'  S
SK(J)r)  S
SK*J+r+J,r,J-r-J.r.  S
SK"J/r/  SSK0J1r1J2r2J3r3  \4" \Rj                  " SS 5      5      r61 Skr7S\8S'   1 Skr9S\8S'   \7\7\7\7\9\9\9S.r:S\8S'   SS1r;S\8S '    S1       S2S! jjr<\S"   r=\S#   r>\S$   r?\S%   r@\S&   rA\=\>-  \?-  \@-  \A-  rB " S' S(\S)S*9rC\ " S+ S,5      5       rD " S- S.\R                  5      rE " S/ S0\R                  5      rFg)3    )annotationsN)	dataclass)AnyLiteralcast)ChatCompletionChunkChatCompletionMessageParam$ChatCompletionPredictionContentParam#ChatCompletionToolChoiceOptionParamChatCompletionToolParamcompletion_create_params)Choice)ReasoningEffort)Metadata)	TypedDict   )llm)APIConnectionErrorAPIStatusErrorAPITimeoutError)
ToolChoiceutils)ChatContext)Tool)logger)DEFAULT_API_CONNECT_OPTIONS	NOT_GIVENAPIConnectOptions
NotGivenOr)is_given   )create_access_tokenget_default_inference_urlget_inference_headersLK_OPENAI_DEBUG>   ntop_plogprobs
logit_biastemperaturetop_logprobspresence_penaltyfrequency_penaltyzset[str]_REASONING_UNSUPPORTED_PARAMS>   stopr,   r-   !_XAI_REASONING_UNSUPPORTED_PARAMS)o1o3o4zgpt-5zgrok-4-1-fast-reasoningzgrok-4.20-0309-reasoningzgrok-4.20-multi-agentzdict[str, set[str]]_UNSUPPORTED_PARAMSzgpt-5.2zgpt-5.4,_REASONING_EFFORT_TOOL_INCOMPATIBLE_PREFIXESc                  ^ SU ;   a  U R                  S5      S   OU m[        R                  5        HH  u  p4TR                  U5      (       d  M  UR                  5        VVs0 s H  u  pVXT;  d  M  XV_M     nnn  O   U(       aJ  [	        U4S j[
         5       5      (       a,  UR                  5        VVs0 s H  u  pVUS:w  d  M  XV_M     nnnU$ s  snnf s  snnf )zRemove parameters that are not supported by the given model.

Strips any provider prefix (e.g. ``openai/o3-pro`` -> ``o3-pro``) before
matching against known model prefixes.
/c              3  F   >#    U  H  nTR                  U5      v   M     g 7fN)
startswith).0p
model_names     M/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/inference/llm.py	<genexpr>*drop_unsupported_params.<locals>.<genexpr>T   s#      *VQ
a  *Vs   !reasoning_effort)splitr4   itemsr;   anyr5   )modelparamstoolsprefixunsupportedkvr>   s          @r?   drop_unsupported_paramsrM   G   s     *-S!"%5J288:  (('-||~N~tq9Mdad~FN  ;  *V   $*<<>M>41Q:L5L$!$>MM O
 Ns   "C1C6CC)zopenai/gpt-4ozopenai/gpt-4o-minizopenai/gpt-4.1zopenai/gpt-4.1-minizopenai/gpt-4.1-nanozopenai/gpt-5zopenai/gpt-5-minizopenai/gpt-5-nanozopenai/gpt-5.1zopenai/gpt-5.1-chat-latestzopenai/gpt-5.2zopenai/gpt-5.2-chat-latestzopenai/gpt-5.3-chat-latestzopenai/gpt-5.4zopenai/gpt-oss-120b)zgoogle/gemini-3-prozgoogle/gemini-3-flashzgoogle/gemini-2.5-prozgoogle/gemini-2.5-flashzgoogle/gemini-2.5-flash-litezmoonshotai/kimi-k2-instruct)zdeepseek-ai/deepseek-v3zdeepseek-ai/deepseek-v3.2)zxai/grok-4-1-fast-non-reasoningzxai/grok-4-1-fast-reasoningz xai/grok-4.20-0309-non-reasoningzxai/grok-4.20-0309-reasoningzxai/grok-4.20-multi-agent-0309c                     \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S '   S\S!'   S\S"'   S\S#'   S\S$'   S\S%'   S&\S''   S(\S)'   S*\S+'   S,rg-).ChatCompletionOptions   zfloat | Noner-   zdict[str, int] | Noner)   zbool | Noner(   z
int | Nonemax_completion_tokens
max_tokenszMetadata | Nonemetadataz%list[Literal['text', 'audio']] | None
modalitiesr&   boolparallel_tool_callsz+ChatCompletionPredictionContentParam | None
predictionr,   strprompt_cache_keyz"Literal['in_memory', '24h'] | Noneprompt_cache_retentionzReasoningEffort | NonerB   safety_identifierseedz>Literal['auto', 'default', 'flex', 'scale', 'priority'] | Noneservice_tierzstr | None | list[str] | Noner/   storer*   r+   r'   userz'Literal['low', 'medium', 'high'] | None	verbosityz)completion_create_params.WebSearchOptionsweb_search_optionsr   tool_choice N__name__
__module____qualname____firstlineno____annotations____static_attributes__rc       r?   rO   rO      s    ##%%%%55M;;"">>,,
PP
''
I66AA rk   rO   F)totalc                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   Srg)_LLMOptions   LLMModels | strrF   
str | NoneproviderrX   base_urlapi_key
api_secretz&ChatCompletionOptions | dict[str, Any]extra_kwargsrc   Nrd   rc   rk   r?   rn   rn      s#    MLO88rk   rn   c                     ^  \ rS rSrSSSSSS.             SU 4S jjjrSS jr\SS j5       r\SS j5       r	\SS j5       r
S\\\\\S	.               SS
 jjrSrU =r$ )LLM   N)rr   rs   rt   ru   rv   c                 > [         T
U ]  5         U(       a  UO	[        5       nU(       a  UO+[        R                  " S[        R                  " SS5      5      nU(       d  [        S5      eU(       a  UO+[        R                  " S[        R                  " SS5      5      n	U	(       d  [        S5      e[        UUUUU	U=(       d    0 S9U l        [        R                  " [        U R                  R                  U R                  R                  5      U R                  R                  [        R                  " [        R                  " S	S
S
S
S9S[        R                   " SSSS9S9S9U l        g )NLIVEKIT_INFERENCE_API_KEYLIVEKIT_API_KEY zUapi_key is required, either as argument or set LIVEKIT_API_KEY environmental variableLIVEKIT_INFERENCE_API_SECRETLIVEKIT_API_SECRETz[api_secret is required, either as argument or set LIVEKIT_API_SECRET environmental variable)rF   rr   rs   rt   ru   rv   g      .@g      @)connectreadwritepoolT2   x   )max_connectionsmax_keepalive_connectionskeepalive_expiry)timeoutfollow_redirectslimits)rt   rs   http_client)super__init__r#   osgetenv
ValueErrorrn   _optsopenaiAsyncClientr"   rt   ru   rs   httpxTimeoutLimits_client)selfrF   rr   rs   rt   ru   rv   lk_base_url
lk_api_keylk_api_secret	__class__s             r?   r   LLM.__init__   s8    	"*h0I0K  6		BSUW8XY 	
 g   9299EY[];^_ 	
 m  ! $%+

 ))'

(:(:DJJ<Q<QRZZ(())dCcR!%||$&"WZ

rk   c                T   #    U R                   R                  5       I S h  vN   g  N7fr:   )r   closer   s    r?   aclose
LLM.aclose   s     ll  """s   (&(c                    U " U5      $ )z)Create a LLM instance from a model stringrc   )clsrF   s     r?   from_model_stringLLM.from_model_string   s     5zrk   c                .    U R                   R                  $ )z)Get the model name for this LLM instance.)r   rF   r   s    r?   rF   	LLM.model   s     zzrk   c                    g)Nlivekitrc   r   s    r?   rr   LLM.provider   s    rk   )rH   conn_optionsrV   rb   response_formatrv   c                  0 n[        U5      (       a  UR                  U5        [        U5      (       a  UO)U R                  R                  R	                  S[
        5      n[        U5      (       a  XHS'   U R                  R                  R	                  S[
        5      n	[        U5      (       a  UOU	n[        U5      (       a3  [        U[        5      (       a  SSUS   S   0S.n
XS'   OUS;   a  Un
XS'   [        U5      (       a  [        R                  " U5      US'   UR                  U R                  R                  5        [        U R                  R                  U R                  R                  5      U R                  l        [        U U R                  R                  U R                  R                   SU R                  UU=(       d    / UUS	9	$ )
NrV   rb   functionname)typer   )autorequirednoner   T)rF   rr   strict_tool_schemaclientchat_ctxrH   r   rv   )r    updater   rv   getr   
isinstancedict	llm_utilsto_openai_response_formatr"   rt   ru   r   	LLMStreamrF   rr   )r   r   rH   r   rV   rb   r   rv   extraextra_tool_choiceoai_tool_choices              r?   chatLLM.chat   s    L!!LL& +,,  ((,,-BIN 	
 '((+>'( JJ3377yQ%-k%:%:k@QK  +t,,&!'Z)@)H I# (7m$ <<"-'6m$O$$'0'J'J?'[E#$TZZ,,-24::3E3EtzzG\G\]**""ZZ((#<<+2%

 
	
rk   )r   r   )rF   rp   rr   rq   rs   rq   rt   rq   ru   rq   rv   z-ChatCompletionOptions | dict[str, Any] | NonereturnNoner   r   )rF   rX   r   rx   )r   rX   )r   r   rH   zlist[Tool] | Noner   r   rV   zNotGivenOr[bool]rb   zNotGivenOr[ToolChoice]r   zUNotGivenOr[completion_create_params.ResponseFormat | type[llm_utils.ResponseFormatT]]rv   zNotGivenOr[dict[str, Any]]r   r   )re   rf   rg   rh   r   r   classmethodr   propertyrF   rr   r   r   r   rj   __classcell__r   s   @r?   rx   rx      s   
  $#"!%FJ4
4
 	4

 4
 4
 4
 D4
 
4
 4
l#         $(*E09.7 3<7
 7
 !	7

 (7
 .7
 ,7

7
 17
 
7
 7
rk   rx   c                     ^  \ rS rSrSSS.                     S	U 4S jjjrS
S jr        SS jrSrU =r$ )r   i4  Nr   )rr   provider_fmtc       	           > [         TU ]  XXxS9  X l        X0l        Xl        X@l        XPl        Xl        [        X)US9U l	        [        R                  " U5      U l        g )N)r   rH   r   )rH   )r   r   _model	_provider_provider_fmt_strict_tool_schemar   _llmrM   _extra_kwargsr   ToolContext	_tool_ctx)r   llm_vrF   rr   r   r   r   rH   r   rv   r   r   s              r?   r   LLMStream.__init__5  sW     	Z!)#5 	4UPUV/rk   c                :  #    S U l         S U l        S U l        S U l        S U l        S U l        Sn U R                  R                  U R                  S9u  p#[        [        [           U R                  R                  SU R                  S95      n[        (       a9  U R                   R#                  S[$        5      n[&        R(                  " SUUUS.S9  U R*                  (       d  U R                   R-                  SS 5        U R                   R/                  S	0 5      nUR1                  [3        5       5        U R4                  (       a  U R4                  US
'   U R6                  R8                  R:                  R<                  " S[        [        [>           U5      U=(       d    [@        RB                  U RD                  SS0S[F        RH                  " U RJ                  RL                  5      S.U R                   D6I S h  vN =U l         n[N        RP                  " 5       nU IS h  vN   U  S h  vN n	U	RR                   HA  n
U RU                  U	RV                  X5      nUc  M$  SnU RX                  R[                  U5        MC     U	R\                  c  Mi  SnU	R\                  R^                  nU(       a  UR`                  OSn[b        Rd                  " U	RV                  [b        Rf                  " U	R\                  Rh                  U	R\                  Rj                  U=(       d    SU	R\                  Rl                  [o        U	SS 5      S9S9nU RX                  R[                  U5        GM9   GNg GNC GN;
 S S S 5      IS h  vN    g ! , IS h  vN  (       d  f       g = f! [@        Rp                   a    [q        US9S e[@        Rr                   a;  n[s        URt                  URv                  URx                  URz                  US9S eS nAf[|         a  n[        US9UeS nAff = f7f)NT)formatr   )strictrb   zchat.completions.create)fnc_ctxrb   r   )r   extra_headerszX-LiveKit-Inference-Providerinclude_usage)messagesrH   rF   stream_optionsstreamr   Fr   r]   )completion_tokensprompt_tokensprompt_cached_tokenstotal_tokensr]   )idusage)	retryable)status_code
request_idbodyr   rc   )@_oai_stream_tool_call_id	_fnc_name_fnc_raw_arguments_tool_extra_tool_index	_chat_ctxto_provider_formatr   r   listr   r   parse_function_toolsr   lk_oai_debugr   r   r   r   debug_toolspop
setdefaultr   r$   r   r   r   completionscreater	   r   omitr   r   r   _conn_optionsr   asyncioEventchoices_parse_choicer   	_event_chsend_nowaitr   prompt_tokens_detailscached_tokensr   	ChatChunkCompletionUsager   r   r   getattrr   r   messager   r   r   	Exceptionr   )r   r   r   _tool_schemasrb   r   r   thinkingchunkchoice
chat_chunktokens_detailsr  usage_chunkes                   r?   _runLLMStream._runM  sX     LP)-%).226'+	G	A..;;4CUCU;VKH,-33HTE]E]3^L |"0044]IN-#/'2$, ;;""&&}d; ..99/2NM  !6!89~~@D<=.2ll.?.?.K.K.R.R /d#=>I"1fkkkk /6d&8&8&@&@A/ $$/ ) Dv }}Hv#) @%"'--%)%7%7&%S
%1(-I NN66zB	 #0 {{.$)	).)J)JHV(D(D\]&)mm$xx"%"5"527++2O2O.3kk.G.G5B5Ga-2[[-E-E-4UND-Q#	' 22;?C) @6 vvvvv0 %% 	A!I6D@$$ 	 		MM<<VV#   	A$y9q@	As   -PGN 8M9&N M" N #M;&M(*M%+M(.-M;,M;CM;N "N %M((M;)N 4M75N :P;NNNN PN 1P6O<<P	
PPPc                   UR                   nUc  g UR                  (       Ga  UR                   GH  nUR                  (       d  M  S nU R                  (       a  UR                  (       a  UR
                  U R                  :w  a  [        R                  " U[        R                  " SUR                  [        R                  " U R                  =(       d    SU R                  =(       d    SU R                  =(       d    SU R                  S9/S9S9nS =U l        =U l        U l        S U l        UR                  R                  (       at  UR
                  U l        UR                  U l        UR                  R                  U l        UR                  R                   =(       d    SU l        [#        USS 5      U l        ODUR                  R                   (       a)  U =R                  UR                  R                   -  sl        Uc  GM  Us  $    UR$                  S;   a  U R                  (       a  [#        USS 5      n[        R                  " U[        R                  " SUR                  U[        R                  " U R                  =(       d    SU R                  =(       d    SU R                  =(       d    SU R                  S9/S9S9nS =U l        =U l        U l        S U l        U$ [&        R(                  " UR                  U5      Ul
        [#        USS 5      nUR                  (       d  U(       d  g [        R                  " U[        R                  " UR                  SUS	9S9$ )
N	assistantr}   )	argumentsr   call_idr   )rolecontent
tool_calls)r   deltaextra_content)r  r/   )r  r  r   r  )r  r  r   )r  r  r   r   r   indexr   r   r  ChoiceDeltar  FunctionToolCallr   r   r   r   r  r	  finish_reasonr   strip_thinking_tokens)	r   r   r  r  r  tool
call_chunkfinish_extradelta_extras	            r?   r  LLMStream._parse_choice  s     =((}}!
%%$''djjDDTDT6T!$!oo!,$)MM # 4 4.2.E.E.K)-)=2,0,>,>,D"*.*:*:	!"("J UYXD&X$:Q'+D$==%%'+zzD$)-D&%)]]%7%7DN.2mm.E.E.KD+'.t_d'KD$]],,++t}}/F/FF+)%%G )J #99d>P>P"5/4@Loo$!MM&,,&*&=&=&C!%!52$($6$6$<""&"2"2	 	J  MQPDP$2I#D!77xP e_d;}}[}}// !
 	
rk   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   zLLM | llm.LLMrF   rp   rr   rq   r   rU   r   zopenai.AsyncClientr   zllm.ChatContextrH   z
list[Tool]r   r   rv   dict[str, Any]r   rX   r   r   r   )r   rX   r  r   r  zasyncio.Eventr   zllm.ChatChunk | None)	re   rf   rg   rh   r   r  r  rj   r   r   s   @r?   r   r   4  s      $ %00 	0
 0 !0 #0 "0 0 (0 %0 0 
0 00RAhU
U
%U
1>U
	U
 U
rk   r   r:   )rF   rX   rG   r*  rH   zlist[Any] | Noner   r*  )G
__future__r   r   r   dataclassesr   typingr   r   r   r   r   openai.types.chatr   r	   r
   r   r   r   'openai.types.chat.chat_completion_chunkr   $openai.types.shared.reasoning_effortr   openai.types.shared_paramsr   typing_extensionsr   r}   r   _exceptionsr   r   r   r   r   r   llm.chat_contextr   llm.tool_contextr   logr   typesr   r   r   r   r    _utilsr"   r#   r$   intr   r   r.   ri   r0   r4   r5   rM   OpenAIModelsGoogleModels
KimiModelsDeepSeekModels	XAIModels	LLMModelsrO   rn   rx   r   rc   rk   r?   <module>r@     s   "  	 ! % %    ; @ / '  M M 0 * #  Y Y  Y Y299.23	+ x 	/ !8  (
'
'*@ A>, (  ;DY9O ,h O CG&/?( $ $ 23
!
 &	 <'*4~E	Q	IU B 9 9 9
#'' 
DB
 B
rk   