
    j                    B   U d Z ddlmZ ddlmZmZmZmZmZ ee	ge
f   Zh dZded<   eD  ch c]  } | j                          c} ZddhZded	<   dd
ZddZddZddZ G d d      Z e       Zej-                  de       ej-                  de       eZg dZyc c} w )z
Capability registry for evaluation models.

The registry is designed to grow beyond vision support (e.g. audio in the future).
    )annotations)CallableDictIterableOptionalSet>   yi-vlgpt-4ogpt-4.1qwen-vlclaude-3qwen2-vl
claude-3-5
gpt-5-minigpt-4-turbogpt-4o-minigpt-4-visiongpt-4.1-minigpt-4.1-nanophi-3-visiongemini-1.5-prophi-3.5-visiongpt-4.1-previewgemini-1.5-flashgemini-2.0-flashchatgpt-4o-latestgemini-pro-visionllama-3.2-11b-visionllama-3.2-90b-visionllavacogvlmpixtralzSet[str]VISION_MODEL_PREFIXESz-visionz-vlVISION_MODEL_SUFFIXESc                <    d| vr| S | j                  dd      \  }}|S )N/   )split)
model_name_suffixs      /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/evaluation/models/model_capabilities.py_strip_provider_prefixr-   4   s+    
*  a(IAvM    c                N    	 dd l }|j                  |       S # t        $ r Y yw xY w)Nr   )modelF)litellmsupports_vision	Exception)r)   r1   s     r,   _litellm_supports_visionr4   ;   s0    &&Z&88 s    	$$c                    t        |       }| |h}|D ]S  }t        |      r y|j                         t        fdt        D              r yt        fdt
        D              sS y y)NTc              3  @   K   | ]  }j                  |        y wN)
startswith).0prefix
normalizeds     r,   	<genexpr>z-vision_capability_detector.<locals>.<genexpr>K   s     Q;Pz$$V,;P   c              3  @   K   | ]  }j                  |        y wr7   )endswith)r9   r+   r;   s     r,   r<   z-vision_capability_detector.<locals>.<genexpr>M   s     O9Nvz""6*9Nr=   F)r-   r4   loweranyr#   r$   r)   stripped
candidates	candidater;   s       @r,   vision_capability_detectorrF   D   sa    %j1Hh'J	#I.__&
Q;PQQO9NOO   r.   c                    t        |       }| |h}|D ]#  }|j                         }d|v r yd|v sd|v s# y t        |       S )a  
    Heuristically determine whether a model accepts video inputs.

    Providers rarely expose structured metadata for video support, so we fall back
    to naming conventions (e.g. models whose names contain ``video`` or ``qwen``
    + ``vl``). When those heuristics fail we delegate to the vision detector since
    current SDK integrations treat video as an extension of multimodal/vision APIs.
    videoTqwenvl)r-   r@   rF   rB   s        r,   video_capability_detectorrK   R   sX     &j1Hh'J	__&
j ZDJ$6   &j11r.   c                      e Zd ZdZddZ	 	 	 	 	 	 ddZddZddZddZddZ	ddZ
dd	Zedd
       Zedd       Zy)ModelCapabilitiesRegistryz:
    Central registry for model capability detection.
    c                    i | _         y r7   _capability_detectors)selfs    r,   __init__z"ModelCapabilitiesRegistry.__init__n   s
    DF"r.   c                "    || j                   |<   y)zE
        Register a detector callable for a capability name.
        NrO   )rQ   
capabilitydetectors      r,   register_capability_detectorz6ModelCapabilitiesRegistry.register_capability_detectorq   s     2:"":.r.   c                t    |sy| j                   j                  |      }|y	  ||      S # t        $ r Y yw xY w)z]
        Return True when the supplied model name supports the requested capability.
        F)rP   getr3   )rQ   rT   r)   rU   s       r,   supportsz"ModelCapabilitiesRegistry.supportsy   sK     --11*=	J'' 		s   + 	77c                &    | j                  d|      S )zC
        Convenience wrapper for vision-capable detection.
        visionrY   rQ   r)   s     r,   r2   z)ModelCapabilitiesRegistry.supports_vision   s     }}Xz22r.   c                &    | j                  d|      S )zB
        Convenience wrapper for video-capable detection.
        rH   r\   r]   s     r,   supports_videoz(ModelCapabilitiesRegistry.supports_video   s     }}Wj11r.   c                h    t         j                  | j                  |      j                                y r7   )r#   addr-   r@   r]   s     r,   add_vision_modelz*ModelCapabilitiesRegistry.add_vision_model   s$    !!$"="=j"I"O"O"QRr.   c                4    |D ]  }| j                  |        y r7   )rb   )rQ   model_namesr)   s      r,   add_vision_modelsz+ModelCapabilitiesRegistry.add_vision_models   s    %J!!*- &r.   c                    t        |      S r7   )rF   r]   s     r,   _supports_visionz*ModelCapabilitiesRegistry._supports_vision   s    )*55r.   c                    t        |       S r7   )r-   r)   s    r,   r-   z0ModelCapabilitiesRegistry._strip_provider_prefix   s    %j11r.   c                    t        |       S r7   )r4   ri   s    r,   r4   z2ModelCapabilitiesRegistry._litellm_supports_vision   s    '
33r.   N)returnNone)rT   strrU   CapabilityDetectorrk   rl   )rT   rm   r)   Optional[str]rk   bool)r)   ro   rk   rp   )r)   rm   rk   rl   )rd   zIterable[str]rk   rl   r)   rm   rk   rp   r)   rm   rk   rm   )__name__
__module____qualname____doc__rR   rV   rY   r2   r_   rb   re   rg   staticmethodr-   r4    r.   r,   rM   rM   i   sq    G::);:	: 32S.6 2 2 4 4r.   rM   r[   rH   )rM   MODEL_CAPABILITIES_REGISTRYModelCapabilitiesrF   rK   Nrr   rq   )rv   
__future__r   typingr   r   r   r   r   rm   rp   rn   r#   __annotations__r@   r$   r-   r4   rF   rK   rM   ry   rV   rz   __all__)r:   s   0r,   <module>r      s    # : :seTk* !# x !D 7LL6KF6KL #,e"4 x 42.=4 =4@ 89   8 8(  8 8&
 0 K Ms   B