
    hv                     r    d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ ddlmZ ddlmZ  G d d	e	      Zy
)    )AnyOptionalTuplecastList)AuthenticationError)OpenAIConfig)AllMessageValues   )Authenticator)GetAPIKeyErrorc                        e Zd ZdZ	 	 	 ddee   dee   deddf fdZdedee   dee   dedeee   ee   ef   f
d	Zdefd
Z		 	 dde
dedee   de
de
dee   dee   de
f fdZdee   defdZ xZS )GithubCopilotConfigzhttps://api.githubcopilot.com/Napi_keyapi_basecustom_llm_providerreturnc                 @    t         |           t               | _        y )N)super__init__r   authenticator)selfr   r   r   	__class__s       k/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/github_copilot/chat/transformation.pyr   zGithubCopilotConfig.__init__   s     	*_    modelc                     | j                   j                         xs | j                  }	 | j                   j                         }|||fS # t        $ r}t        ||t        |            d }~ww xY w)N)r   llm_providermessage)r   get_api_baseGITHUB_COPILOT_API_BASEget_api_keyr   r   str)r   r   r   r   r   dynamic_api_basedynamic_api_keyes           r   $_get_openai_compatible_provider_infoz8GithubCopilotConfig._get_openai_compatible_provider_info   s{     ++-M1M1M 		"00<<>O  2EEE  	%0A 	s   A	 		A.A))A.c                 z    dd l }|j                  }|s(|D ]#  }d|v s|d   dk(  sdt        t        |      d<   % |S )Nr   rolesystem	assistant)litellm#disable_copilot_system_to_assistantr   r   )r   messagesr   r,   r-   r   s         r   _transform_messagesz'GithubCopilotConfig._transform_messages+   sQ    
 	 77 	, 3#W$H)D1<Dg&v. $ r   headersr.   optional_paramslitellm_paramsc           	      ^    t         
|   |||||||      }| j                  |      }	|	|d<   |S )NzX-Initiator)r   validate_environment_determine_initiator)r   r0   r   r.   r1   r2   r   r   validated_headers	initiatorr   s             r   r4   z(GithubCopilotConfig.validate_environment;   sH     "G8UHo~wPX

 --h7	+4-(  r   c                 @    |D ]  }|j                  d      }|dv s y y)z
        Determine if request is user or agent initiated based on message roles.
        Returns 'agent' if any message has role 'tool' or 'assistant', otherwise 'user'.
        r)   )toolr+   agentuser)get)r   r.   r   r)   s       r   r5   z(GithubCopilotConfig._determine_initiatorP   s-    
  G;;v&D,,   r   )NNopenai)NN)__name__
__module____qualname__r!   r   r#   r   r   r'   r/   dictr   r
   r4   r5   __classcell__)r   s   @r   r   r      s/   > "&"&#+	-#- 3-- !	-
 
-FF 3-F #	F
 !F 
x}hsmS0	1F( . "&"&!! ! '(	!
 ! ! #! 3-! 
!*	T2B-C 	 	r   r   N)typingr   r   r   r   r   litellm.exceptionsr   litellm.llms.openai.openair	   litellm.types.llms.openair
   r   r   common_utilsr   r    r   r   <module>rI      s(    3 3 2 3 6 ) )N, Nr   