
    Siy                    (   U d Z ddlmZ ddlmZ ddlmZ  ed       G d d             Zd:d	Zd
Z	dZ
dZdZ edddde	       edddde	       edddde	       edddde	       edddde	       edddde	       edddde
       edddde
       edddde       edddde       edddde       edddde       edddde      dZded<   i ddddd d!d"d#d$dd%dd&d!d'd(d)d(d*d+d,d-d.d/d0d-d1d/d2d3dd3Zd4ed5<   d;d6Zd<d7Zd=d>d9Zy8)?u]  모델 메타데이터 유틸리티.

실제 사용 중인 모델들의 context window, max output, 기능 지원 여부 등을
정적으로 정의한다. 외부 API 호출 없이 즉시 사용 가능.

별칭 해석 예시:
  claude-opus → claude-opus-4-6
  gpt4o       → gpt-4o
  deepseek-v3 → deepseek-chat
  gemini-pro  → gemini-2.5-pro
    )annotations)	dataclass)OptionalT)frozenc                  D    e Zd ZU dZded<   ded<   ded<   ded<   ded	<   y
)ModelMetadatau  모델 1개에 대한 기술적 메타데이터.

    Attributes:
        context_window: 최대 컨텍스트 길이 (토큰).
        max_output: 최대 출력 토큰 수.
        supports_vision: 이미지/비전 입력 지원 여부.
        supports_tools: 함수 호출/도구 사용 지원 여부.
        provider: 공급자 식별자 ("anthropic", "openai", "google", "deepseek").
    intcontext_window
max_outputboolsupports_visionsupports_toolsstrproviderN)__name__
__module____qualname____doc____annotations__     E/home/jay/workspace/.worktrees/task-2117-dev1/utils/model_metadata.pyr   r      s%     OMr   r   c                     t        | ||||      S N)r   )ctxoutvistoolsprovs        r   _mr    *   s    c3t44r   	anthropicopenaigoogledeepseeki@B i }  i   i@ i    i   i  i @  i   i   F)claude-opus-4-6claude-sonnet-4-6claude-3-5-sonnet-20241022claude-3-5-haiku-20241022zclaude-3-opus-20240229zclaude-3-haiku-20240307gpt-4ogpt-4o-minigemini-2.5-progemini-2.5-flashzgemini-2.0-flashdeepseek-chatzdeepseek-reasonerzdict[str, ModelMetadata]_METADATA_TABLEzclaude-opusr%   zclaude-sonnetr&   zclaude-haikur(   zclaude-3-sonnetr'   opussonnethaikugpt4or)   zgpt-4o-latestz
gpt4o-minir*   z
gemini-pror+   zgemini-flashr,   zgemini-2-prozgemini-2-flashzdeepseek-v3r-   zdict[str, str]_ALIAS_TABLEc                l    t         j                  | |       }|t        vrt        d|       t        |   S )u   모델 ID(또는 별칭)로 메타데이터를 조회한다.

    Args:
        model_id: 정식 모델 ID 또는 별칭.

    Returns:
        ModelMetadata 인스턴스.

    Raises:
        KeyError: 알 수 없는 모델 ID.
    u   알 수 없는 모델: )r3   getr.   KeyError)model_id	canonicals     r   get_metadatar9   d   s<       84I'0=>>9%%r   c                B    | t         v r| S t        j                  | |       S )u   별칭을 정식 모델 ID로 변환한다.

    알 수 없는 별칭은 입력 그대로 반환 (오류 없음).

    Args:
        alias: 별칭 또는 정식 모델 ID.

    Returns:
        정식 모델 ID. 알 수 없으면 alias 그대로.
    )r.   r3   r5   )aliass    r   resolve_modelr<   v   s$     E5))r   Nc                      t        t        j                               S t         fdt        j                         D              S )u   등록된 모델 ID 목록을 반환한다 (알파벳 정렬).

    Args:
        provider: 필터할 공급자 이름. None이면 전체 반환.
    c              3  H   K   | ]  \  }}|j                   k(  s|  y wr   r   ).0midmetar   s      r   	<genexpr>zlist_models.<locals>.<genexpr>   s!     \)#t$--S[B[#\s   "")sortedr.   keysitemsr?   s   `r   list_modelsrG      s9     o**,--\'<'<'>\\\r   )r   r	   r   r	   r   r   r   r   r   r   returnr   )r7   r   rH   r   )r;   r   rH   r   r   )r   zOptional[str]rH   z	list[str])r   
__future__r   dataclassesr   typingr   r   r    _AT_OA_GG_DSr.   r   r3   r9   r<   rG   r   r   r   <module>rP      s  
 # !  $  ,5  )VT4=IvtT3?"$WeT4"E!#GUD$!D %tSA!'5$cB&$c2gvtT37FD$<9fdD#>9eT4=udC8FFE5#>'-) 2 $  (  /	 
 3    !  (  X  X  -  "  &   $! " (# & ?' ( ) n 0&$* ]r   