
    j              	       t   U d dl Zd dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
 ddlmZ ddlmZ  ej                  e      Zi Zeeej&                  f   ed<   ded	efd
Zdededeeef   d	efdZd	efdZ	 ddee   deded	ej&                  fdZded	efdZded	efdZdededeeef   d	ej&                  fdZy)    N)OptionalAnyDict)config_logging   )litellm_chat_model)
base_model_MODEL_CACHEvaluereturnc                     t        | t              r t        d | j                         D              S t        | t        t
        f      rt        d | D              S t        | t              rt        d | D              S | S )Nc              3   <   K   | ]  \  }}|t        |      f  y wN_freeze.0kvs      ~/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/evaluation/models/models_factory.py	<genexpr>z_freeze.<locals>.<genexpr>   s     C]TQ!WQZ]   c              3   2   K   | ]  }t        |        y wr   r   r   r   s     r   r   z_freeze.<locals>.<genexpr>   s     /AWQZ   c              3   2   K   | ]  }t        |        y wr   r   r   s     r   r   z_freeze.<locals>.<genexpr>   s     3UUr   )
isinstancedict	frozensetitemslisttupleset)r   s    r   r   r      sb    %CU[[]CCC%$'////%3U333L    
model_nametrackmodel_kwargsc                 L    t        d |j                         D              }| ||fS )Nc              3   <   K   | ]  \  }}|t        |      f  y wr   r   r   s      r   r   z"_make_cache_key.<locals>.<genexpr>   s     O:N$!Qq'!*o:Nr   )r    r!   )r&   r'   r(   frozen_kwargss       r   _make_cache_keyr,      s(    O,:L:L:NOOM}--r%   c                  >    t        j                         j                  S )z0Resolve the default model name from Opik config.)r   
OpikConfigdefault_llm r%   r   get_default_model_namer1      s    ***r%   c                 ~    | 
t               } t        | ||      }|t        vrt        | ||      t        |<   t        |   S )a  
    Get or create a cached LiteLLM chat model instance.

    Args:
        model_name: The name of the model to use. Defaults to OpikConfig.default_llm if None.
        track: Whether to track the model calls. When False, disables tracing for this model instance.
            Defaults to True.
        **model_kwargs: Additional keyword arguments to pass to the model constructor.

    Returns:
        A cached or newly created OpikBaseModel instance.
    )r1   r,   r   _create_model)r&   r'   r(   	cache_keys       r   getr5   $   sF     +-

E<@I$"/
E<"PY	""r%   c                 J    | j                  d      xs | j                  d      S )Nz
anthropic/claude)
startswithr&   s    r   _is_anthropic_modelr:   <   s#      .Q*2G2G2QQr%   c                     t        |       sydt        j                  v ryt        j                  j                  d      yt        j                  t        j                  dt        |        y)NF	anthropicTzAnthropic SDK is not installed. Falling back to LiteLLM for model '%s'. Install it with `pip install anthropic` for a more stable experience.)r:   sysmodules	importlibutil	find_specr   log_once_at_levelloggingWARNINGLOGGERr9   s    r   _should_use_anthropic_nativerF   @   sZ    z*ckk!~~,8	P r%   c                     t        |       r't        j                  d|        ddlm}  |d| |d|S t        j                  d| |d|S )Nz'Using native Anthropic SDK for model %sr   )AnthropicChatModel)r&   r'   r0   )rF   rE   debuganthropic.anthropic_chat_modelrH   r	   LiteLLMChatModel)r&   r'   r(   rH   s       r   r3   r3   Q   s^     $J/5	
 	G!UZuUUU.. U.: r%   )T)importlib.utilr?   rC   r=   typingr   r   r   opikr   r   litellmr	    r
   	getLogger__name__rE   r   OpikBaseModel__annotations__r   strboolr,   r1   r5   r:   rF   r3   r0   r%   r   <module>rW      s"     
 & & ! ' 			8	$46d3
0001 63 3 . .D .S#X .SV .
+ + .2##&*#CF##0RC RD RS T " 04S#Xr%   