
    -h+'                    &   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Jr  SSKrSSKJr  SSKJr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+\RX                  " \-5      r. " S S\%5      r/g)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                  $  ^  \ 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    U/root/34ku/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_serializableB   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`.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)r/   valuesrF   s      r)   validate_environmentChatKonko.validate_environmentY   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.)r3   rC   streamrA   r8   )r3   rC   r?   rA   r8   r;   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
isinstancer6   rL   get_secret_valuer   r   requestsgetstatus_codejson)r$   r%   konko_api_base
models_urlrY   models_responser3   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#   D2 E !E2
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&   )r2   create)kwargsr(   s    r)   _completion_with_retry?ChatKonko.completion_with_retry.<locals>._completion_with_retry   s    ;;%%///r,   )rn   r   returnr   r&   r&   )r(   run_managerrn   ro   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)NrT   Tmessagesrr   choicesr   deltafinish_reason)rz   )messagegeneration_info)chunkr&   )_create_message_dictsr   rs   lenr   rc   dict	__class__r   on_llm_new_tokentext)r(   rw   stoprr   rn   message_dictsparamsdefault_chunk_classr}   choicerz   r|   cg_chunks                r)   _streamChatKonko._stream   s      !% : :8 J5F5f5h56D// 
"
?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   rr   rv   r&   )r?   r   r   r~   rs   _create_chat_result)r(   rw   r   rr   rT   rn   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_paramsrL   r   )r(   rw   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)r3   rU   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.)rU   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.r3   )r   )r3   super_get_invocation_paramsrU   )r(   r   rn   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&   )rq   zDict[str, str])rq   r-   )rP   r   rq   r   )rq   r:   )r$   Union[str, SecretStr, None]r%   r   rf   r6   rq   zSet[str])N)rr   "Optional[CallbackManagerForLLMRun]rn   r   rq   r   )NN)
rw   List[BaseMessage]r   Optional[List[str]]rr   r   rn   r   rq   zIterator[ChatGenerationChunk])NNN)rw   r   r   r   rr   r   rT   zOptional[bool]rn   r   rq   r   )rw   r   r   r   rq   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r   r   rn   r   rq   r:   )rq   r6   )'__name__
__module____qualname____firstlineno____doc__propertyr*   classmethodr0   r2   __annotations__r   DEFAULT_MODELr3   r8   r   r;   r%   r$   r>   r?   rA   rC   r   rQ   rU   staticmethodDEFAULT_API_BASEri   rs   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   )0r   
__future__r   loggingr]   rN   typingr   r   r   r   r   r	   r
   r   r   r   rb   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 B V V % 
 :, 0			8	$o
 or,   