
    ~
i+'                    *   d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlZddlmZ ddlmZmZmZ ddlmZmZ ddl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' ddl(m)Z) dZ*dZ+ ej,        e-          Z. G d de%          Z/dS )zKonkoAI chat wrapper.    )annotationsN)
AnyDictIteratorListOptionalSetTupleTypeUnioncast)CallbackManagerForLLMRun)AIMessageChunkBaseMessageBaseMessageChunk)ChatGenerationChunk
ChatResult)convert_to_secret_strget_from_dict_or_envpre_init)Field	SecretStrconvert_message_to_dict)
ChatOpenAI_convert_delta_to_message_chunkgenerate_from_stream)is_openai_v1zhttps://api.konko.ai/v1zmeta-llama/Llama-2-13b-chat-hfc                      e Zd ZU dZed;d            Zed<d            ZdZde	d	<    e
ed
          Zde	d
<   	 dZde	d<   	  e
e          Zde	d<   	 dZde	d<   dZde	d<   dZde	d<   	 dZde	d<   	 dZde	d<   	 dZde	d<   	 ed=d!            Zed>d"            Zeddefd?d&            Z	 d@dAd*Z	 	 dBdCd0Z	 	 	 dDdEd4ZdFd6Zed>d7            Z ed>d8            Z!	 d@dG fd9Z"edHd:            Z# xZ$S )I	ChatKonkoa  `ChatKonko` Chat large language models API.

    To use, you should have the ``konko`` python package installed, and the
    environment variable ``KONKO_API_KEY`` and ``OPENAI_API_KEY`` set with your API key.

    Any parameters that are valid to be passed to the konko.create call can be passed
    in, even if not explicitly saved on this class.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatKonko
            llm = ChatKonko(model="meta-llama/Llama-2-13b-chat-hf")
    returnDict[str, str]c                    dddS )NKONKO_API_KEYOPENAI_API_KEY)konko_api_keyopenai_api_key selfs    C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_community/chat_models/konko.py
lc_secretszChatKonko.lc_secrets>   s    !0DTUUU    boolc                    dS )z9Return whether this model can be serialized by Langchain.Fr(   )clss    r+   is_lc_serializablezChatKonko.is_lc_serializableB   s	     ur-   Nr   clientmodel)defaultaliasstrgffffff?floattemperature)default_factoryDict[str, Any]model_kwargszOptional[str]r'   r&      intmax_retriesF	streaming   n   
max_tokensvaluesr   c                   t          t          |dd                    |d<   	 ddl}n# t          $ r t          d          w xY w	 t	                      r|j        j        |d<   n
|j        |d<   n# t          $ r t          d          w xY wt          |d          st          j        d	           |d
         dk     rt          d          |d
         dk    r|d         rt          d          |S )z?Validate that api key and python package exists in environment.r&   r$   r   NzRCould not import konko python package. Please install it with `pip install konko`.r2   z`konko` has no `ChatCompletion` attribute, this is likely due to an old version of the konko package. Try upgrading it with `pip install --upgrade konko`._is_legacy_openaizhYou are using an older version of the 'konko' package. Please consider upgrading to access new features.rA   r@   zn must be at least 1.r?   zn must be 1 when streaming.)r   r   konkoImportErrorr   chatcompletionsChatCompletionAttributeError
ValueErrorhasattrwarningswarn)r0   rD   rG   s      r+   validate_environmentzChatKonko.validate_environmentY   sC    #8 /JJ#
 #
	LLLL 	 	 	>  	

	~~ 8#(:#9x  #(#7x  	 	 	6  	 u122 	MD  
 #;??4555#;??vk2?:;;;s   ( A(A/ /B	c                R    | j         | j        | j        | j        | j        d| j        S )z1Get the default parameters for calling Konko API.)r3   rC   streamrA   r8   )r3   rC   r?   rA   r8   r;   r)   s    r+   _default_paramszChatKonko._default_params   s:     Z/n+
 
 
 	
r-   Union[str, SecretStr, None]konko_api_baseSet[str]c                   |s1	 t          t          j        d                   }n4# t          $ r Y n(w xY wt	          |t
                    rt          |          }| s>	 t          t          j        d                   } nA# t          $ r t          d          w xY wt	          | t
                    rt          |           } | d}dd|                                  i}|r*t          t          |                                          |d<   t          j        ||          }|j        d	k    rt          d
| d|j                   d |                                d         D             S )z$Get available models from Konko API.r%   r$   z^Konko API key must be passed as keyword argument or set in environment variable KONKO_API_KEY.z/modelsAuthorizationzBearer zX-OpenAI-Api-Key)headers   zError getting models from z: c                    h | ]
}|d          S )idr(   ).0r3   s     r+   	<setcomp>z1ChatKonko.get_available_models.<locals>.<setcomp>   s    HHHdHHHr-   data)r   osenvironKeyError
isinstancer6   rM   get_secret_valuer   r   requestsgetstatus_codejson)r&   r'   rV   
models_urlrZ   models_responses         r+   get_available_modelszChatKonko.get_available_models   s     	C!6rzBR7S!T!T   ,, 	C2>BBN  		A 5bj6Q R R    A  
 s++ 	A1-@@M&///
 I}'E'E'G'GII
  	!*.>+ +   &' #,z7CCC&#--XZXX?;VXX   IH)=)=)?)?)GHHHHs   $ 
11A; ;Brun_manager"Optional[CallbackManagerForLLMRun]kwargsc                      d fd} |di |S )Nro   r   r!   c                 (     j         j        di | S )Nr(   )r2   create)ro   r*   s    r+   _completion_with_retryz?ChatKonko.completion_with_retry.<locals>._completion_with_retry   s    %4;%/////r-   )ro   r   r!   r   r(   r(   )r*   rm   ro   rs   s   `   r+   completion_with_retryzChatKonko.completion_with_retry   s:    	0 	0 	0 	0 	0 	0 &%/////r-   messagesList[BaseMessage]stopOptional[List[str]]Iterator[ChatGenerationChunk]c              +    K   |                      ||          \  }}i ||ddi}t          } | j        d||d|D ]}t          |d                   dk    r|d         d         }	t	          |	d         |          }|	                    d          }
|
t          |
          nd }|j        }t          ||	          }|r|	                    |j
        |
           |V  d S )NrS   Tru   rm   choicesr   deltafinish_reason)r~   )messagegeneration_info)chunkr(   )_create_message_dictsr   rt   lenr   rg   dict	__class__r   on_llm_new_tokentext)r*   ru   rw   rm   ro   message_dictsparamsdefault_chunk_classr   choicer~   r   cg_chunks                r+   _streamzChatKonko._stream   sJ      !% : :8T J Jv5F5f5h556D/T/ 
"
 
?E
 
 	 	E 5#$$))9%a(F3w!4 E #JJ77M5B5N=1111TX  #(/*  H  L,,X](,KKKNNNN'	 	r-   rS   Optional[bool]r   c                    ||n| j         }|r  | j        |f||d|}t          |          S |                     ||          \  }}	i |	|}	 | j        d||d|	}
|                     |
          S )N)rw   rm   r{   r(   )r?   r   r   r   rt   _create_chat_result)r*   ru   rw   rm   rS   ro   should_streamstream_iterr   r   responses              r+   	_generatezChatKonko._generate   s     #)"4$. 	5&$,# @F K (444 $ : :8T J Jv%F%f%-4- 
"
 
?E
 
 ''111r-   +Tuple[List[Dict[str, Any]], Dict[str, Any]]c                d    | j         }|d|v rt          d          ||d<   d |D             }||fS )Nrw   z2`stop` found in both the input and default params.c                ,    g | ]}t          |          S r(   r   )r^   ms     r+   
<listcomp>z3ChatKonko._create_message_dicts.<locals>.<listcomp>  s!    FFF033FFFr-   )_client_paramsrM   )r*   ru   rw   r   r   s        r+   r   zChatKonko._create_message_dicts   sS     $ !UVVV!F6NFFXFFFf$$r-   c                &    i d| j         i| j        S )zGet the identifying parameters.
model_name)r3   rT   r)   s    r+   _identifying_paramszChatKonko._identifying_params  s     F<,E0DEEr-   c                    i | j         S )z-Get the parameters used for the konko client.)rT   r)   s    r+   r   zChatKonko._client_params
  s     ($&''r-   c                l    d| j         it                                          |          | j        |S )z,Get the parameters used to invoke the model.r3   )rw   )r3   super_get_invocation_paramsrT   )r*   rw   ro   r   s      r+   r   z ChatKonko._get_invocation_params  sJ    
 TZ
gg,,$,77
 "
 	
 	
r-   c                    dS )zReturn type of chat model.z
konko-chatr(   r)   s    r+   	_llm_typezChatKonko._llm_type  s	     |r-   )r!   r"   )r!   r.   )rD   r   r!   r   )r!   r:   )r&   rU   r'   rU   rV   r6   r!   rW   )N)rm   rn   ro   r   r!   r   )NN)
ru   rv   rw   rx   rm   rn   ro   r   r!   ry   )NNN)ru   rv   rw   rx   rm   rn   rS   r   ro   r   r!   r   )ru   rv   rw   rx   r!   r   )rw   rx   ro   r   r!   r:   )r!   r6   )%__name__
__module____qualname____doc__propertyr,   classmethodr1   r2   __annotations__r   DEFAULT_MODELr3   r8   r   r;   r'   r&   r>   r?   rA   rC   r   rQ   rT   staticmethodDEFAULT_API_BASErl   rt   r   r   r   r   r   r   r   __classcell__)r   s   @r+   r    r    .   s          V V V XV    [ F}G<<<E<<<<K+#(5#>#>#>L>>>>V$(N((((#'M''''K<I/AJJJJAJ/# # # X#J 	
 	
 	
 X	
 596:..I .I .I .I \.Ib AE0 0 0 0 0 %):>	    F %):>!%2 2 2 2 2,	% 	% 	% 	% F F F XF ( ( ( X(
 +/	
 	
 	
 	
 	
 	
 	
    X    r-   r    )0r   
__future__r   loggingra   rO   typingr   r   r   r   r   r	   r
   r   r   r   rf   langchain_core.callbacksr   langchain_core.messagesr   r   r   langchain_core.outputsr   r   langchain_core.utilsr   r   r   pydanticr   r   #langchain_community.adapters.openair   &langchain_community.chat_models.openair   r   r    langchain_community.utils.openair   r   r   	getLoggerr   loggerr    r(   r-   r+   <module>r      s     " " " " " "  				                               R Q Q Q Q Q Q Q Q Q B B B B B B B B V V V V V V V V V V % % % % % % % %              
 : 9 9 9 9 9, 0		8	$	$o o o o o
 o o o o or-   