Ë
    uPêj‘  ã            
       óâ  — U d Z ddlZddlZddlmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZ ddlmZ dd	lmZ d
Zeed<   dZeed<   dZeed<    e	«       Zeed<    G d„ de«      Zdedz  fd„Zdefd„Zdefd„Zdefd„Z	 	 	 d!dedz  dedz  dedz  defd„Z	 	 	 d!dedz  dedz  dedz  defd„Z dededede!ee"f   fd„Z#dededede!ee"f   fd„Z$dejJ                  de!ee"f   fd „Z&y)"zˆ
GigaChat OAuth Authenticator

Handles OAuth 2.0 token management for GigaChat API.
Based on official GigaChat SDK authentication flow.
é    N)ÚFinal)Úverbose_logger)ÚInMemoryCache)ÚBaseLLMException)ÚHTTPHandlerÚ_get_httpx_clientÚget_async_httpx_client©Úget_secret_str)ÚLlmProvidersz1https://ngw.devices.sberbank.ru:9443/api/v2/oauthÚGIGACHAT_AUTH_URLÚGIGACHAT_API_PERSÚGIGACHAT_SCOPEi`ê  ÚTOKEN_EXPIRY_BUFFER_MSÚ_token_cachec                   ó   — e Zd ZdZy)ÚGigaChatAuthErrorzGigaChat authentication error.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úh/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/gigachat/authenticator.pyr   r   &   s   „ Ú(r   r   Úreturnc                  ó2   — t        d«      xs t        d«      S )z*Get GigaChat credentials from environment.ÚGIGACHAT_CREDENTIALSÚGIGACHAT_API_KEYr
   r   r   r   Ú_get_credentialsr   *   s   € äÐ0Ó1ÒW´^ÐDVÓ5WÐWr   c                  ó(   — t        d«      xs t        S )z6Get GigaChat auth URL from environment or use default.r   )r   r   r   r   r   Ú_get_auth_urlr!   /   s   € äÐ-Ó.ÒCÔ2CÐCr   c                  ó(   — t        d«      xs t        S )z3Get GigaChat scope from environment or use default.r   )r   r   r   r   r   Ú
_get_scoper#   4   s   € äÐ*Ó+Ò=¬~Ð=r   c                  ó   — t        ddi¬«      S )z7Get cached httpx client with SSL verification disabled.Ú
ssl_verifyF)Úparams)r   r   r   r   Ú_get_http_clientr'   9   s   € ä \°5Ð$9Ô:Ð:r   ÚcredentialsÚscopeÚauth_urlc                 óê  — | xs
 t        «       } | st        dd¬«      ‚|xs
 t        «       }|xs
 t        «       }d| dd › �}t        j                  |«      }|r=|\  }}t        j                  «       dz  |t        z
  k  rt        j                  d«       |S t        | ||«      \  }}t        d	|t        z
  t        j                  «       dz  z
  dz  «      }|d	kD  rt        j                  |||f|¬
«       |S )ae  
    Get valid access token, using cache if available.

    Args:
        credentials: Base64-encoded credentials (client_id:client_secret)
        scope: API scope (GIGACHAT_API_PERS, GIGACHAT_API_CORP, etc.)
        auth_url: OAuth endpoint URL

    Returns:
        Access token string

    Raises:
        GigaChatAuthError: If authentication fails
    é‘  úeGigaChat credentials not provided. Set GIGACHAT_CREDENTIALS or GIGACHAT_API_KEY environment variable.©Ústatus_codeÚmessageúgigachat_token:Né   éè  ú"Using cached GigaChat access tokenr   ©Úttl)r   r   r#   r!   r   Ú	get_cacheÚtimer   r   ÚdebugÚ_request_token_syncÚmaxÚ	set_cache©r(   r)   r*   Ú	cache_keyÚcachedÚtokenÚ
expires_atÚttl_secondss           r   Úget_access_tokenrC   >   s  € ð& Ò3Ô!1Ó!3€KÙÜØØ{ô
ð 	
ð
 Ò!”Z“\€EØÒ*œ=›?€Hð )¨°S°bÐ)9Ð(:Ð;€IÜ ×*Ñ*¨9Ó5€FÙØ"Ñˆˆzä�9‰9‹;˜Ñ 
Ô-CÑ CÒCÜ× Ñ Ð!EÔFØˆLô ,¨K¸ÀÓIÑ€Eˆ:ô ˜Q Ô.DÑ!DÄtÇyÁyÃ{ÐUYÑGYÑ!YÐ]aÑ aÓb€KØ�Q‚Ü×Ñ˜y¨5°*Ð*=À;ÐÔOà€Lr   c              ƒ   ó  K  — | xs
 t        «       } | st        dd¬«      ‚|xs
 t        «       }|xs
 t        «       }d| dd › �}t        j                  |«      }|r=|\  }}t        j                  «       dz  |t        z
  k  rt        j                  d«       |S t        | ||«      ƒ d{  –—† \  }}t        d	|t        z
  t        j                  «       dz  z
  dz  «      }|d	kD  rt        j                  |||f|¬
«       |S 7 ŒV­w)z"Async version of get_access_token.r,   r-   r.   r1   Nr2   r3   r4   r   r5   )r   r   r#   r!   r   r7   r8   r   r   r9   Ú_request_token_asyncr;   r<   r=   s           r   Úget_access_token_asyncrF   p   s  è ø€ ð Ò3Ô!1Ó!3€KÙÜØØ{ô
ð 	
ð
 Ò!”Z“\€EØÒ*œ=›?€Hð )¨°S°bÐ)9Ð(:Ð;€IÜ ×*Ñ*¨9Ó5€FÙØ"ÑˆˆzÜ�9‰9‹;˜Ñ 
Ô-CÑ CÒCÜ× Ñ Ð!EÔFØˆLô 3°;ÀÀxÓP×PÑ€Eˆ:ô ˜Q Ô.DÑ!DÄtÇyÁyÃ{ÐUYÑGYÑ!YÐ]aÑ aÓb€KØ�Q‚Ü×Ñ˜y¨5°*Ð*=À;ÐÔOà€Lð Qús   ‚B&DÂ(C?Â)ADc                 óæ  — d| › �t        t        j                  «       «      ddœ}d|i}t        j                  d|«       	 t        «       }|j                  |||d¬«      }|j                  «        t        |«      S # t        j                  $ r=}t        |j                  j                  d|j                  j                  › �¬	«      ‚d
}~wt        j                  $ r}t        dd|› �¬	«      ‚d
}~ww xY w)z„
    Request new access token from GigaChat OAuth endpoint (sync).

    Returns:
        Tuple of (access_token, expires_at_ms)
    úBasic ú!application/x-www-form-urlencoded©ÚAuthorizationÚRqUIDzContent-Typer)   ú(Requesting GigaChat access token from %sé   ©ÚheadersÚdataÚtimeoutú GigaChat authentication failed: r.   Néô  ú(GigaChat authentication request failed: )ÚstrÚuuidÚuuid4r   r9   r'   ÚpostÚraise_for_statusÚ_parse_token_responseÚhttpxÚHTTPStatusErrorr   Úresponser/   ÚtextÚRequestError©r(   r)   r*   rP   rQ   Úclientr^   Úes           r   r:   r:   ”   sì   € ð " + Ð/Ü”T—Z‘Z“\Ó"Ø;ñ€Gð
 ˜EÐ"€Dä×ÑÐCÀXÔNð
Ü(Ó*ˆØ Ÿ+™+ h¸ÀdÐTV˜+ÓWˆØ×!Ñ!Ô#Ü$ XÓ.Ð.øÜ× Ñ ò 
ÜØŸ
™
×.Ñ.Ø6°q·z±z·±Ð6GÐHô
ð 	
ûô ×Ñò 
ÜØØ>¸q¸cÐBô
ð 	
ûð
ús$   Á 9A: Á:C0Â8CÃC0ÃC+Ã+C0c              ƒ   ó(  K  — d| › �t        t        j                  «       «      ddœ}d|i}t        j                  d|«       	 t        t        j                  ddi¬«      }|j                  |||d	¬
«      ƒ d{  –—† }|j                  «        t        |«      S 7 Œ# t        j                  $ r=}t        |j                  j                  d|j                  j                   › �¬«      ‚d}~wt        j"                  $ r}t        dd|› �¬«      ‚d}~ww xY w­w)z%Async version of _request_token_sync.rH   rI   rJ   r)   rM   r%   F)Úllm_providerr&   rN   rO   NrS   r.   rT   rU   )rV   rW   rX   r   r9   r	   r   ÚGIGACHATrY   rZ   r[   r\   r]   r   r^   r/   r_   r`   ra   s           r   rE   rE   ¹   s  è ø€ ð " + Ð/Ü”T—Z‘Z“\Ó"Ø;ñ€Gð
 ˜EÐ"€Dä×ÑÐCÀXÔNð
Ü.Ü%×.Ñ.Ø  %Ð(ô
ˆð !'§¡¨H¸gÈDÐZ\ Ó ]×]ˆØ×!Ñ!Ô#Ü$ XÓ.Ð.ð ^ùô × Ñ ò 
ÜØŸ
™
×.Ñ.Ø6°q·z±z·±Ð6GÐHô
ð 	
ûô ×Ñò 
ÜØØ>¸q¸cÐBô
ð 	
ûð
üsG   ‚?DÁ5B Á7BÁ8B ÂDÂB ÂDÂ,8C$Ã$DÃ:D
Ä
DÄDr^   c                 ó>  — | j                  «       }|j                  d«      xs |j                  d«      }|j                  d«      xs |j                  d«      }|st        dd|› �¬«      ‚t        |t        «      rt        |«      }t        j                  d«       ||fS )	zParse OAuth token response.ÚtokÚaccess_tokenÚexprA   rT   zInvalid token response: r.   z+GigaChat access token obtained successfully)ÚjsonÚgetr   Ú
isinstancerV   Úintr   r9   )r^   rQ   ri   rA   s       r   r[   r[   Ü   s‘   € à—-‘-“/€Dð Ÿ(™( 5›/ÒE¨T¯X©X°nÓ-E€LØ—‘˜%“Ò: D§H¡H¨\Ó$:€JáÜØØ.¨t¨fÐ5ô
ð 	
ô �*œcÔ"Ü˜“_ˆ
ä×ÑÐFÔGØ˜Ð#Ð#r   )NNN)'r   r8   rW   Útypingr   r\   Úlitellm._loggingr   Úlitellm.caching.cachingr   Ú)litellm.llms.base_llm.chat.transformationr   Ú&litellm.llms.custom_httpx.http_handlerr   r   r	   Úlitellm.secret_managers.mainr   Úlitellm.types.utilsr   r   Ú__annotations__r   r   r   r   rV   r   r!   r#   r'   rC   rF   Útuplern   r:   rE   ÚResponser[   r   r   r   ú<module>ry      s²  ðòó Û Ý ã å +Ý 1Ý F÷ñ õ
 8Ý ,ð OÐ �5Ó Nð ,€�Ó +ð !&Ð ˜Ó %ñ $“o€ˆeÓ %ô)Ð(ô )ðX˜# ™*ó Xð
D�só Dð
>�Có >ð
;˜+ó ;ð #ØØñ/Ø�t‘ð/à�‰:ð/ð �D‰jð/ð 	ó	/ðf #ØØñ!Ø�t‘ð!à�‰:ð!ð �D‰jð!ð 	ó	!ðH"
Øð"
àð"
ð ð"
ð ˆ3�ˆ8�_ó	"
ðJ 
Øð 
àð 
ð ð 
ð ˆ3�ˆ8�_ó	 
ðF$ E§N¡Nð $°u¸SÀ#¸X±ô $r   