
    dh&                       S r SSKJr  SSKrSSKrSSKrSSKJrJrJ	r	J
r
JrJrJrJrJr  SSKrSSKJr  SSKJrJr  SSKJrJr  SSKJrJrJr  SS	KJrJr  SS
K J!r!  SSK"J#r#J$r$J%r%  SSK&J'r'  Sr(Sr)\RT                  " \+5      r, " S S\#5      r-g)zKonkoAI chat wrapper.    )annotationsN)	AnyDictIteratorListOptionalSetTupleUnioncast)CallbackManagerForLLMRun)AIMessageChunkBaseMessage)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                  $  ^  \ rS rSr% Sr\S*S j5       r\S+S j5       rSr	S\
S'   \" \S	S
9rS\
S	'    SrS\
S'    \" \S9rS\
S'    SrS\
S'   SrS\
S'   SrS\
S'    SrS\
S'    SrS\
S'    SrS\
S'    \S,S j5       r\S-S j5       r\SS\4       S.S  jj5       r S/     S0S! jjr  S1         S2S" jjr   S3           S4S# jjr      S5S$ jr \S-S% j5       r!\S-S& j5       r" S/     S6U 4S' jjjr#\S7S( j5       r$S)r%U =r&$ )8	ChatKonko-   a  `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")
c                    SSS.$ )NKONKO_API_KEYOPENAI_API_KEY)konko_api_keyopenai_api_key selfs    ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/konko.py
lc_secretsChatKonko.lc_secrets=   s    !0DTUU    boolc                    g)z9Return whether this model can be serialized by Langchain.Fr$   )clss    r'   is_lc_serializableChatKonko.is_lc_serializableA   s     r*   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_tokensc                   [        [        USS5      5      US'    SSKn [	        5       (       a  UR
                  R                  US'   OUR                  US'    [        US5      (       d  [        R                  " S	5        US
   S:  a  [        S5      eUS
   S:  a  US   (       a  [        S5      eU$ ! [         a    [        S5      ef = f! [         a    [        S5      ef = f)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`.r0   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.r?   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)r-   valuesrD   s      r'   validate_environmentChatKonko.validate_environmentX   s     #8 /J#
	
	~~#(::#9#9x #(#7#7x  u122MMD
 #;?455#;?vk2:;;7  	> 	  	6 	s   B4 (C 	C 4C
C#c                    U R                   U R                  U R                  U R                  U R                  S.U R
                  E$ )z1Get the default parameters for calling Konko API.)r1   rA   streamr?   r6   )r1   rA   r=   r?   r6   r9   r%   s    r'   _default_paramsChatKonko._default_params~   sC     ZZ//nn++
 
 	
r*   c                   U(       d   [        [        R                  S   5      nO [	        U[
        5      (       a  [        U5      nU (       d   [        [        R                  S   5      n O [	        U [
        5      (       a  [        U 5      n U S3nSSU R                  5        30nU(       a!  [        [        U5      R                  5       US'   [        R                  " X4S9nUR                  S	:w  a  [        S
U SUR                   35      eUR                  5       S    Vs1 sH  ofS   iM	     sn$ ! [         a     Nf = f! [         a    [        S5      ef = fs  snf )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: dataid)r   osenvironKeyError
isinstancer4   rJ   get_secret_valuer   r   requestsgetstatus_codejson)r"   r#   konko_api_base
models_urlrW   models_responser1   s          r'   get_available_modelsChatKonko.get_available_models   si    !6rzzBR7S!T ,,2>BN  5bjj6Q R s++1-@M&'w/
 w}'E'E'G&HI
 *.>+  &' #,,zC&&#-,ZL?;V;V:WX  *9)=)=)?)GH)Gd)GHHG     A 4 Is#   D1 E !E1
D>=D>Ec                $   ^  SU 4S jjnU" S0 UD6$ )Nc                 <   > TR                   R                  " S0 U D6$ )Nr$   )r0   create)kwargsr&   s    r'   _completion_with_retry?ChatKonko.completion_with_retry.<locals>._completion_with_retry   s    ;;%%///r*   )rl   r   returnr   r$   r$   )r&   run_managerrl   rm   s   `   r'   completion_with_retryChatKonko.completion_with_retry   s    	0 &///r*   c              +    #    U R                  X5      u  pV0 UEUESS0En[        nU R                  " SXSS.UD6 H  n[        US   5      S:X  a  M  US   S   n	[	        U	S   U5      nU	R                  S5      n
U
b	  [        U
S9OS nUR                  n[        XS	9nU(       a  UR                  UR                  US
9  Uv   M     g 7f)NrR   Tmessagesrp   choicesr   deltafinish_reason)rx   )messagegeneration_info)chunkr$   )_create_message_dictsr   rq   lenr   ra   dict	__class__r   on_llm_new_tokentext)r&   ru   stoprp   rl   message_dictsparamsdefault_chunk_classr{   choicerx   rz   cg_chunks                r'   _streamChatKonko._stream   s      !% : :8 J5F5f5h5,// 
"
?E
E 5#$)9%a(F3w!4E #JJ7M5B5N=1TX  #(//*H ,,X]](,KN'
s   CCc                    Ub  UOU R                   nU(       a   U R                  " U4X#S.UD6n[        U5      $ U R                  X5      u  p0 U	EUEn	U R                  " SXS.U	D6n
U R                  U
5      $ )N)r   rp   rt   r$   )r=   r   r   r|   rq   _create_chat_result)r&   ru   r   rp   rR   rl   should_streamstream_iterr   r   responses              r'   	_generateChatKonko._generate   s     #)"4$..,,#@FK (44 $ : :8 J%F%f%-- 
"
?E
 ''11r*   c                    U R                   nUb  SU;   a  [        S5      eX#S'   U Vs/ sH  n[        U5      PM     nnXS4$ s  snf )Nr   z2`stop` found in both the input and default params.)_client_paramsrJ   r   )r&   ru   r   r   mr   s         r'   r|   ChatKonko._create_message_dicts   sY     $$ !UVV!6N=EFX03XF$$ Gs   Ac                :    0 SU R                   0EU R                  E$ )zGet the identifying parameters.
model_name)r1   rS   r%   s    r'   _identifying_paramsChatKonko._identifying_params  s$     F<,E0D0DEEr*   c                    0 U R                   E$ )z-Get the parameters used for the konko client.)rS   r%   s    r'   r   ChatKonko._client_params	  s     ($&&''r*   c                V   > SU R                   0[        TU ]	  US9EU R                  EUE$ )z,Get the parameters used to invoke the model.r1   )r   )r1   super_get_invocation_paramsrS   )r&   r   rl   r   s      r'   r    ChatKonko._get_invocation_params  sG    
 TZZ
g,$,7
 ""
 	
 	
r*   c                    g)zReturn type of chat model.z
konko-chatr$   r%   s    r'   	_llm_typeChatKonko._llm_type  s     r*   r$   )ro   zDict[str, str])ro   r+   )rN   r   ro   r   )ro   r8   )r"   Union[str, SecretStr, None]r#   r   rd   r4   ro   zSet[str])N)rp   "Optional[CallbackManagerForLLMRun]rl   r   ro   r   )NN)
ru   List[BaseMessage]r   Optional[List[str]]rp   r   rl   r   ro   zIterator[ChatGenerationChunk])NNN)ru   r   r   r   rp   r   rR   zOptional[bool]rl   r   ro   r   )ru   r   r   r   ro   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r   r   rl   r   ro   r8   )ro   r4   )'__name__
__module____qualname____firstlineno____doc__propertyr(   classmethodr.   r0   __annotations__r   DEFAULT_MODELr1   r6   r~   r9   r#   r"   r<   r=   r?   rA   r   rO   rS   staticmethodDEFAULT_API_BASErg   rq   r   r   r|   r   r   r   r   __static_attributes____classcell__)r   s   @r'   r   r   -   sU    V V   FC}G<E3<K+#(#>L.>V$(NM(#'M='K<It/AsJAJ/# #J 	
 	
 596:..I2.I3.I .I 
	.I .Ib AE0=0PS0	0 %):>	# " 8	
  
'F %):>!%2#2 "2 8	2
 2 2 
2,	%)	%1D	%	4	% F F ( (
 +/	
'	
:=	
		
 	
  r*   r   ).r   
__future__r   loggingr[   rL   typingr   r   r   r   r   r	   r
   r   r   r`   langchain_core.callbacksr   langchain_core.messagesr   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|     "  	 
 
 
  @ B V V % 
 :, 0			8	$o
 or*   