
    3fi&                         d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZmZmZmZ  e j8                  e      Z G d d	ed
      Z G d de      Z y)    N)AnyDictListMappingOptionalcast)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModel)	AIMessageBaseMessageChatMessageFunctionMessageHumanMessageSystemMessage)ChatGeneration
ChatResult)	BaseModel
ConfigDictField	SecretStrc                   N    e Zd ZU dZdZeed<   dZee	e
      ed<   dZee   ed<   y)
ChatParamsz,Parameters for the `Javelin AI Gateway` LLM.g        temperatureNstop
max_tokens)__name__
__module____qualname____doc__r   float__annotations__r   r   r   strr   int     p/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/chat_models/javelin_ai_gateway.pyr   r      s0    6K $D(49
$ $J$r&   r   allow)extrac                       e Zd ZU dZeed<   	 dZee   ed<   	 dZee	   ed<   	 dZ
eed<   	  edd      Zee   ed	<   	  ed
      Zdef fdZedeeef   fd       Z	 	 ddee   deee      dee   dedef
dZ	 	 ddee   deee      dee   dedef
dZedeeef   fd       Z	 d deee      dedeeef   f fdZedefd       Zede eef   defd       Z!ed!d       Z"edede#fd       Z$ede eef   defd       Z% xZ&S )"ChatJavelinAIGatewaya$  `Javelin AI Gateway` chat models API.

    To use, you should have the ``javelin_sdk`` python package installed.
    For more information, see https://docs.getjavelin.io

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatJavelinAIGateway

            chat = ChatJavelinAIGateway(
                gateway_uri="<javelin-ai-gateway-uri>",
                route="<javelin-ai-gateway-chat-route>",
                params={
                    "temperature": 0.1
                }
            )
    routeNgateway_uriparamsclientapi_key)aliasjavelin_api_keyT)populate_by_namekwargsc                 2   	 ddl m}m} t	        |   di | | j                  rA	  || j                  t        t        | j                        j                               | _        y y # t        $ r t        d      w xY w# |$ r}t        d      |d }~ww xY w)Nr   )JavelinClientUnauthorizedErrorz^Could not import javelin_sdk python package. Please install it with `pip install javelin_sdk`.)base_urlr0   zJavelin: Incorrect API Key.r%   )javelin_sdkr6   r7   ImportErrorsuper__init__r-   r   r   r2   get_secret_valuer/   
ValueError)selfr4   r6   r7   e	__class__s        r'   r<   zChatJavelinAIGateway.__init__K   s    		 	"6"G+!-- D,@,@ARRT   	D 	 % G !>?QFGs"   A( ?B  (A= BBBreturnc                     | j                   t        t        | j                        j	                         | j
                  d| j                  r| j                  j                         }|S i }|S )N)r-   r2   r,   )r-   r   r   r2   r=   r,   r.   dict)r?   r.   s     r'   _default_paramsz$ChatJavelinAIGateway._default_paramsa   sk      ++#It/C/CDUUWZZ"
 &*[[t{{!	"
  79	"
 r&   messagesr   run_managerc                 <   |D cg c]  }t         j                  |       }}d|i| j                  r| j                  j                         ni }| j                  j                  | j                  |      }t         j                  |j                               S c c}w NrF   )
query_body)r+   _convert_message_to_dictr.   rD   r/   query_router,   _create_chat_result	r?   rF   r   rG   r4   messagemessage_dictsdataresps	            r'   	_generatezChatJavelinAIGateway._generatek   s     $
 !99'B
 

  
%)[[t{{!b 

 {{&&tzzd&C#77		DD
s   Bc                 X  K   |D cg c]  }t         j                  |       }}d|i| j                  r| j                  j                         ni }| j                  j                  | j                  |       d {   }t         j                  |j                               S c c}w 7 ,wrI   )r+   rK   r.   rD   r/   aquery_router,   rM   rN   s	            r'   
_ageneratezChatJavelinAIGateway._agenerate   s      $
 !99'B
 

  
%)[[t{{!b 

 [[--djjT-JJ#77		DD
 Ks   B*B#AB*;B(<-B*c                     | j                   S N)rE   r?   s    r'   _identifying_paramsz(ChatJavelinAIGateway._identifying_params   s    ###r&   c                 B    i | j                   t        |   dd|i|S )z>Get the parameters used to invoke the model FOR THE CALLBACKS.r   r%   )rE   r;   _get_invocation_params)r?   r   r4   rA   s      r'   r\   z+ChatJavelinAIGateway._get_invocation_params   s5    
""
g,A$A&A
 	
r&   c                      y)zReturn type of chat model.zjavelin-ai-gateway-chatr%   rY   s    r'   	_llm_typezChatJavelinAIGateway._llm_type   s     )r&   _dictc                     | d   }| d   }|dk(  rt        |      S |dk(  rt        |      S |dk(  rt        |      S t        ||      S )Nrolecontentuser)rb   	assistantsystem)rb   ra   )r   r   r   r   )r_   ra   rb   s      r'   _convert_dict_to_messagez-ChatJavelinAIGateway._convert_dict_to_message   sZ    V}	"6>00[ W--X 11wT::r&   c                      t        d      )N|Function messages are not supported by the Javelin AI Gateway. Please create a feature request at https://docs.getjavelin.io)r>   r%   r&   r'   _raise_functions_not_supportedz3ChatJavelinAIGateway._raise_functions_not_supported   s    F
 	
r&   rO   c                    t        | t              r| j                  | j                  d}nt        | t              rd| j                  d}nit        | t
              rd| j                  d}nIt        | t              rd| j                  d}n)t        | t              rt        d      t        d|        d| j                  v rt        j                          | j                  r t        j                  d| j                         |S )	N)ra   rb   rc   rd   re   rh   zGot unknown message type: function_callz[Additional message arguments are unsupported by Javelin AI Gateway  and will be ignored: %s)
isinstancer   ra   rb   r   r   r   r   r>   additional_kwargsr+   ri   loggerwarning)rO   message_dicts     r'   rK   z-ChatJavelinAIGateway._convert_message_to_dict   s    g{+$+LLW__ML.$*wGL+$/GOOLL/$,IL1J 
 9'CDDg777 ??A$$NN+))
 r&   responsec                     g }| d   d   D ]S  }t         j                  |d         }|j                  di       }t        |t	        |            }|j                  |       U | j                  di       }t        ||      S )Nllm_responsechoicesrO   metadata)rO   generation_info)generations
llm_output)r+   rf   getr   rD   appendr   )rq   rw   	candidaterO   message_metadatagenresponse_metadatas          r'   rM   z(ChatJavelinAIGateway._create_chat_result   s    !.1)< 		$I*CC)$G  )}}Z<  $%5 6C s#		$ %LLR8k>OPPr&   )NNrX   )rB   N)'r   r   r   r    r#   r"   r-   r   r.   r   r/   r   r   r2   r   r   model_configr<   propertyr   rE   r   r   r
   r   rS   r	   rV   rZ   r\   r^   staticmethodr   rf   ri   rD   rK   rM   __classcell__)rA   s   @r'   r+   r+   $   sH   & J:!%K#%1#'FHZ '4FC+0Y+GOXi(G1LG G, c3h   %):>	E{#E tCy!E 67	E
 E 
E. %)?C	E{#E tCy!E ;<	E
 E 
E( $T#s(^ $ $ +/
T#Y'
:=
	c3h
 )3 ) ) 
;S(9 
;k 
; 
; 
 
 + $  6 Qgc3h&7 QJ Q Qr&   r+   )!loggingtypingr   r   r   r   r   r   langchain_core.callbacksr	   r
   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r   r   r   r   r   langchain_core.outputsr   r   pydanticr   r   r   r   	getLoggerr   rn   r   r+   r%   r&   r'   <module>r      s`     ; ; E  = <			8	$
%' %@Q= @Qr&   