
    Cj                       S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	  SSK
Jr  SSKJrJrJr  \(       a  SSKJr  SS	KJr   " S
 S\5      r\" S\" SSSSS9\R*                  " \R,                  " 5       \R.                  " 5       \R0                  " S5      5      S9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 S jr S S jr!g)!z SDK model configuration helpers.    )annotationsN)TYPE_CHECKING)set_default_openai_apiset_default_openai_keyset_tracing_disabled)MultiProvider)ModelRetryBackoffSettingsModelRetrySettingsretry_policies)ModelProvider)Settingsc                  @   ^  \ rS rSrSr        SU 4S jjrSrU =r$ )StrixProvider   zRoute any non-OpenAI prefix through LiteLLM with the prefix preserved,
so users type ``deepseek/deepseek-chat`` rather than
``litellm/deepseek/deepseek-chat``.
c               T   > US;   a  [         TU ]  UUUS9$ U R                  S5      U4$ )N>   openailitellmany-llm)original_model_nameprefixstripped_model_namer   )super_resolve_prefixed_model_get_fallback_provider)selfr   r   r   	__class__s       e/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/strix/config/models.pyr   %StrixProvider._resolve_prefixed_model   sG     5572$7$7 3  
 **957JJJ     )r   strr   r!   r   
str | Nonereturnz tuple[ModelProvider, str | None])__name__
__module____qualname____firstlineno____doc__r   __static_attributes____classcell__)r   s   @r   r   r      s@    
K !K 	K
 (K 
*K Kr   r      g       @g     V@F)initial_delay	max_delay
multiplierjitter)i  i  i  i  i  )max_retriesbackoffpolicyc                   U R                   n[        S5        [        5         UR                  (       aJ  [	        UR                  SS9  [        SUR                  5        [        UR                  UR                  5        UR                  (       a?  UR                  [        R                  S'   [        SUR                  5        [        S5        g	[        S5        g	)
z*Apply Strix config to SDK-native defaults.TF)use_for_tracingapi_keyOPENAI_BASE_URLapi_basechat_completions	responsesN)llmr    _configure_litellm_compatibilityr5   r   _configure_litellm_default_mirror_api_key_to_provider_envmodelr7   osenvironr   )settingsr:   s     r   configure_sdk_model_defaultsrB   =   s    
,,C$&
{{s{{EB"9ckk:'		3;;?
||(+

$%":s||<12{+r   c                   U (       d  g SS K nU R                  5       nS H7  nUR                  5       R                  U5      (       d  M)  U[	        U5      S  n  O    UR                  UR                  5       S9nUR                  S5      =(       d    /  H:  nUR                  S5      (       d  M  [        R                  R                  Xa5        M<     g ! [         a     g f = f)Nr   )litellm/any-llm/)r>   missing_keys_API_KEY)r   striplower
startswithlenvalidate_environment	Exceptiongetendswithr?   r@   
setdefault)
model_namer5   r   namer   reportenv_keys          r   r=   r=   N   s    D*::<""6**F&D +--DJJL-A ::n-33J''JJ!!'3 4  s   C 
CCc                 f    SSK n SU l        SU l        SU l        SU l        SU l        [        5         g)zEEnable LiteLLM's permissive param handling and disable its callbacks.r   NT)r   drop_paramsmodify_paramsturn_off_message_loggingdisable_streaming_loggingsuppress_debug_info_register_litellm_cost_callback)r   s    r   r;   r;   a   s3    G G'+G$(,G%"&G#%r   c                     SS K n SSKJn  S H>  n[        XS 5      n[	        U[
        5      (       d  M&  X;   a  M-  UR                  U5        M@     g )Nr   )litellm_cost_callback)success_callback_async_success_callback)r   strix.report.stater]   getattr
isinstancelistappend)r   r]   bucket_namebuckets       r   r[   r[   n   sE    8Ft4&$'' *+, Gr   c                $    SSK n[        X U5        g)zFSet LiteLLM's module-level defaults without adding a provider wrapper.r   N)r   setattr)rR   valuer   s      r   r<   r<   |   s    G5!r   c                    U R                  5       R                  5       nSU;   a  UR                  S5      (       d  gUR                  R                  (       a  g[        U 5      (       + $ )zKReturn whether the resolved SDK route can only receive JSON function tools./openai/T)rH   rI   rJ   r:   r7   model_supports_reasoning)rQ   rA   r>   s      r   !uses_chat_completions_tool_schemarn      sQ    $$&E
e|E,,Y77||'
333r   c                   SS K nU R                  5       R                  5       nS H)  nUR                  U5      (       d  M  U[	        U5      S  n  O   UR
                  R                  U5      nUc4  SU;   a.  UR
                  R                  UR                  SS5      S   5      n[        U=(       a    UR                  S5      5      $ )Nr   )rD   rE   rl   rk      supports_reasoning)	r   rH   rI   rJ   rK   
model_costrN   rsplitbool)rQ   r   rR   r   entrys        r   rm   rm      s    ##%D5??6""F&D 6 ""4(E}""&&t{{3':1'=>9%))$89::r   c                    SS K nU R                  5       R                  5       nU(       a  SU;   a  gUR                  R	                  U5      n[        U=(       a    UR	                  S5      S:H  5      $ )Nr   rk   Flitellm_providerr   )r   rH   rI   rr   rN   rt   )rQ   r   rR   ru   s       r   is_known_openai_bare_modelrx      s]    ##%D3$;""4(EC%))$678CDDr   )rA   r   r#   None)rQ   r"   r5   r!   r#   ry   )r#   ry   )rR   r!   ri   r!   r#   ry   )rQ   r!   rA   r   r#   rt   )rQ   r!   r#   rt   )"r(   
__future__r   r?   typingr   agentsr   r   r   agents.models.multi_providerr   agents.retryr	   r
   r   agents.models.interfacer   strix.config.settingsr   r   anyprovider_suggestednetwork_errorhttp_statusDEFAULT_MODEL_RETRYrB   r=   r;   r[   r<   rn   rm   rx   r    r   r   <module>r      s    & " 	   W W 6  5.KM K, )%	 ))+$$&""#<=  ,"4&
&-"4;Er   