§
    šŠtj€-  ã                  óN  — 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mZ ddlZddlmZ ddlmZ ddlmZmZ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& dd
l'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ dZ0dZ1 ej2        e3¦  «        Z4dd„Z5 G d„ de-¦  «        Z6dS )zKonkoAI chat wrapper.é    )ÚannotationsN)ÚAnyÚDictÚIteratorÚListÚMappingÚOptionalÚSetÚTupleÚTypeÚUnionÚcast)ÚCallbackManagerForLLMRun)Úgenerate_from_stream)ÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageChunkÚFunctionMessageChunkÚHumanMessageChunkÚSystemMessageChunkÚToolMessageChunk)ÚChatGenerationChunkÚ
ChatResult)Úconvert_to_secret_strÚget_from_dict_or_envÚpre_init)ÚFieldÚ	SecretStr©Úconvert_message_to_dict)Ú
ChatOpenAI)Úis_openai_v1zhttps://api.konko.ai/v1zmeta-llama/Llama-2-13b-chat-hfÚ_dictúMapping[str, Any]Údefault_classúType[BaseMessageChunk]Úreturnr   c                óÚ  — |                       d¦  «        }|                       d¦  «        pd}i }|                       d¦  «        r+t          | d         ¦  «        }d|v r|d         €d|d<   ||d<   |                       d¦  «        r| d         |d<   |dk    s|t          k    rt          |¬¦  «        S |d	k    s|t          k    rt          ||¬
¦  «        S |dk    s|t          k    rt	          |¬¦  «        S |dk    s|t
          k    rt          || d         ¬¦  «        S |dk    s|t          k    rt          || d         ¬¦  «        S |s|t          k    rt          ||¬¦  «        S  ||¬¦  «        S )NÚroleÚcontentÚ Úfunction_callÚnameÚ
tool_callsÚuser)r+   Ú	assistant)r+   Úadditional_kwargsÚsystemÚfunction)r+   r.   ÚtoolÚtool_call_id)r+   r6   )r+   r*   )ÚgetÚdictr   r   r   r   r   r   )r$   r&   r*   r+   r2   r-   s         úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/konko.pyÚ_convert_delta_to_message_chunkr:   9   s¬  € ð �9Š9�VÑÔ€DØ�iŠi˜	Ñ"Ô"Ð( b€GØ ÐØ‡y‚y�Ñ!Ô!ð ;Ý˜U ?Ô3Ñ4Ô4ˆØ�]Ð"Ð" }°VÔ'<Ð'DØ$&ˆM˜&Ñ!Ø-:Ð˜/Ñ*Ø‡y‚y�ÑÔð >Ø*/°Ô*=Ð˜,Ñ'àˆv‚~€~˜Õ*;Ò;Ð;Ý ¨Ð1Ñ1Ô1Ð1Ø	�Ò	Ð	 µÒ ?Ð ?Ý gÐARÐSÑSÔSÐSØ	�Ò	Ð	˜]Õ.@Ò@Ð@Ý!¨'Ð2Ñ2Ô2Ð2Ø	�Ò	Ð	˜}Õ0DÒDÐDÝ#¨G¸%À¼-ÐHÑHÔHÐHØ	�Šˆ˜=Õ,<Ò<Ð<Ý¨¸eÀNÔ>SÐTÑTÔTÐTØ	ð .�Õ"2Ò2Ð2Ý¨°dÐ;Ñ;Ô;Ð;àˆ} WÐ-Ñ-Ô-Ð-ó    c                  óè  ‡ — 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")
    r(   úDict[str, str]c                ó   — dddœS )NÚKONKO_API_KEYÚOPENAI_API_KEY)Úkonko_api_keyÚopenai_api_key© ©Úselfs    r9   Ú
lc_secretszChatKonko.lc_secretsg   s   € à!0ÐDTÐUÐUÐUr;   Úboolc                ó   — dS )z9Return whether this model can be serialized by Langchain.FrD   )Úclss    r9   Úis_lc_serializablezChatKonko.is_lc_serializablek   s	   € ð ˆur;   Nr   ÚclientÚmodel)ÚdefaultÚaliasÚstrgffffffæ?ÚfloatÚtemperature)Údefault_factoryúDict[str, Any]Úmodel_kwargszOptional[str]rC   rB   é   Ú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.rB   r@   r   NzRCould not import konko python package. Please install it with `pip install konko`.rL   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[   rZ   zn must be at least 1.rY   zn must be 1 when streaming.)r   r   ÚkonkoÚImportErrorr#   ÚchatÚcompletionsÚChatCompletionÚAttributeErrorÚ
ValueErrorÚhasattrÚwarningsÚwarn)rJ   r^   ra   s      r9   Úvalidate_environmentzChatKonko.validate_environment‚   sC  € õ #8Ý  ¨¸/ÑJÔJñ#
ô #
ˆˆÑð	ØˆLˆLˆLˆLøåð 	ð 	ð 	Ýð>ñô ð ð	øøøð

	Ý‰~Œ~ð 8Ø#(¤:Ô#9��xÑ Ð à#(Ô#7��xÑ øøÝð 	ð 	ð 	Ýð6ñô ð ð	øøøõ �uÐ1Ñ2Ô2ð 	ÝŒMðDñô ð ð
 �#Œ;˜Š?ˆ?ÝÐ4Ñ5Ô5Ð5Ø�#Œ;˜Š?ˆ?˜v kÔ2ˆ?ÝÐ:Ñ;Ô;Ð;Øˆs   £( ¨AÁ(A/ Á/B	c                óR   — | j         | j        | j        | j        | j        dœ| j        ¥S )z1Get the default parameters for calling Konko API.)rM   r]   Ústreamr[   rR   )rM   r]   rY   r[   rR   rU   rE   s    r9   Ú_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.rA   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 )ÚidrD   )Ú.0rM   s     r9   ú	<setcomp>z1ChatKonko.get_available_models.<locals>.<setcomp>ã   s   € ÐHÐHÐH ��d”ÐHÐHÐHr;   Údata)r   ÚosÚenvironÚKeyErrorÚ
isinstancerP   rg   Úget_secret_valuer   r   Úrequestsr7   Ústatus_codeÚjson)rB   rC   rp   Ú
models_urlrt   Úmodels_responses         r9   Úget_available_modelszChatKonko.get_available_models´   s¼  € ð ð 	CðÝ!6µr´zÐBRÔ7SÑ!TÔ!T��øÝð ð ð Ø�ðøøøå˜­Ñ,Ô,ð 	CÝ2°>ÑBÔBˆNð ð 		AðÝ 5µb´jÀÔ6QÑ RÔ R��øÝð ð ð Ý ðAñô ð ðøøøõ
 ˜¥sÑ+Ô+ð 	AÝ1°-Ñ@Ô@ˆMà&Ð/Ð/Ð/ˆ
ð ÐI }×'EÒ'EÑ'GÔ'GÐIÐIð
ˆð ð 	!Ý*.Ý˜>ñ+ô +çÒÑ Ô ð Ð&Ñ'õ #œ, z¸7ÐCÑCÔCˆàÔ&¨#Ò-Ð-ÝØX¨ZÐ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 )Nrˆ   r   r(   c                 ó(   •—  ‰j         j        di | ¤ŽS )NrD   )rL   Úcreate)rˆ   rF   s    €r9   Ú_completion_with_retryz?ChatKonko.completion_with_retry.<locals>._completion_with_retryè   s   ø€ Ø%�4”;Ô%Ð/Ð/¨Ð/Ð/Ð/r;   )rˆ   r   r(   r   rD   rD   )rF   r†   rˆ   rŒ   s   `   r9   Ú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 )Nrm   T©rŽ   r†   Úchoicesr   ÚdeltaÚfinish_reason)r—   )ÚmessageÚgeneration_info)ÚchunkrD   )Ú_create_message_dictsr   r�   Úlenr:   r7   r8   Ú	__class__r   Úon_llm_new_tokenÚtext)rF   rŽ   r�   r†   rˆ   Úmessage_dictsÚparamsÚdefault_chunk_classrš   Úchoicer—   r™   Úcg_chunks                r9   Ú_streamzChatKonko._streamí   sJ  è è € ð !%× :Ò :¸8ÀTÑ JÔ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆå6DÐØ/�TÔ/ð 
Ø"°ð
ð 
Ø?Eð
ð 
ð 	ð 	ˆEõ �5˜Ô#Ñ$Ô$¨Ò)Ð)ØØ˜9Ô% aÔ(ˆFÝ3Ø�w”Ð!4ñô ˆEð #ŸJšJ Ñ7Ô7ˆMà5BÐ5N• =Ð1Ñ1Ô1Ð1ÐTXð ð #(¤/ÐÝ*Ø¨ðñ ô ˆHð ð LØ×,Ò,¨X¬]À(Ð,ÑKÔKÐKØˆNˆNˆNˆNð'	ð 	r;   rm   úOptional[bool]r   c                óä   — |�|n| j         }|r  | j        |f||dœ|¤Ž}t          |¦  «        S |                      ||¦  «        \  }}	i |	¥|¥}	 | j        d||dœ|	¤Ž}
|                      |
¦  «        S )N)r�   r†   r”   rD   )rY   r¥   r   r›   r�   Ú_create_chat_result)rF   rŽ   r�   r†   rm   rˆ   Úshould_streamÚstream_iterr    r¡   Úresponses              r9   Ú	_generatezChatKonko._generate  sÃ   € ð #)Ð"4˜˜¸$¼.ˆØð 	5Ø&˜$œ,ØðØ#°ðð Ø@Fðð ˆKõ (¨Ñ4Ô4Ð4à $× :Ò :¸8ÀTÑ 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 )Nr�   z2`stop` found in both the input and default params.c                ó,   — g | ]}t          |¦  «        ‘ŒS rD   r    )rx   Úms     r9   ú
<listcomp>z3ChatKonko._create_message_dicts.<locals>.<listcomp>+  s!   € ÐFÐFÐF¸Õ0°Ñ3Ô3ÐFÐFÐFr;   )Ú_client_paramsrg   )rF   rŽ   r�   r¡   r    s        r9   r›   zChatKonko._create_message_dicts#  sS   € ð Ô$ˆØÐØ˜ÐÐÝ Ð!UÑVÔVÐVØ!ˆF�6‰NØFÐF¸XÐFÑFÔFˆØ˜fÐ$Ð$r;   c                ó&   — i d| j         i¥| j        ¥S )zGet the identifying parameters.Ú
model_name)rM   rn   rE   s    r9   Ú_identifying_paramszChatKonko._identifying_params.  s   € ð F�< ¤Ð,ÐE°Ô0DÐEÐEr;   c                ó   — i | j         ¥S )z-Get the parameters used for the konko client.)rn   rE   s    r9   r²   zChatKonko._client_params3  s   € ð (�$Ô&Ð'Ð'r;   c                ól   •— d| j         it          ¦   «                              |¬¦  «        ¥| j        ¥|¥S )z,Get the parameters used to invoke the model.rM   )r�   )rM   ÚsuperÚ_get_invocation_paramsrn   )rF   r�   rˆ   r�   s      €r9   r¹   z ChatKonko._get_invocation_params8  sJ   ø€ ð
 �T”Zð
å‰gŒg×,Ò,°$Ð,Ñ7Ô7ð
ð Ô"ð
ð ð	
ð 	
r;   c                ó   — dS )zReturn type of chat model.z
konko-chatrD   rE   s    r9   Ú	_llm_typezChatKonko._llm_typeC  s	   € ð ˆ|r;   )r(   r>   )r(   rH   )r^   r   r(   r   )r(   rT   )rB   ro   rC   ro   rp   rP   r(   rq   )N)r†   r‡   rˆ   r   r(   r   )NN)
rŽ   r�   r�   r‘   r†   r‡   rˆ   r   r(   r’   )NNN)rŽ   r�   r�   r‘   r†   r‡   rm   r¦   rˆ   r   r(   r   )rŽ   r�   r�   r‘   r(   r­   )r�   r‘   rˆ   r   r(   rT   )r(   rP   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyrG   ÚclassmethodrK   rL   Ú__annotations__r   ÚDEFAULT_MODELrM   rR   r8   rU   rC   rB   rX   rY   r[   r]   r   rk   rn   ÚstaticmethodÚDEFAULT_API_BASEr…   r�   r¥   r¬   r›   rµ   r²   r¹   r»   Ú__classcell__)r�   s   @r9   r=   r=   W   sÁ  ø€ € € € € € ðð ð ðVð Vð Vñ „XðVð ðð ð ñ „[ðð €FÐÐÐÑØ�˜}°GÐ<Ñ<Ô<€EÐ<Ð<Ð<Ñ<ØØ€KÐÐÐÑØ+Ø#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØVØ$(€NÐ(Ð(Ð(Ñ(Ø#'€MÐ'Ð'Ð'Ñ'Ø€KÐÐÐÑØ<Ø€IÐÐÐÑØ/Ø€A€J€J€J�JØAØ€JÐÐÐÑØ/àð#ð #ð #ñ „Xð#ðJ ð	
ð 	
ð 	
ñ „Xð	
ð à59Ø6:Ø.ð.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=   )r$   r%   r&   r'   r(   r   )7r¿   Ú
__future__r   Úloggingr{   ri   Útypingr   r   r   r   r   r	   r
   r   r   r   r   r€   Úlangchain_core.callbacksr   Ú*langchain_core.language_models.chat_modelsr   Úlangchain_core.messagesr   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r   Úlangchain_core.utilsr   r   r   Úpydanticr   r   Ú#langchain_community.adapters.openair!   Ú&langchain_community.chat_models.openair"   Ú langchain_community.utils.openair#   rÅ   rÃ   Ú	getLoggerr¼   Úloggerr:   r=   rD   r;   r9   ú<module>rÕ      su  ðØ Ð à "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€ðð ð ð ð ð ðð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð CÐ 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;   