Ë
    µŒj+'  ã                  ó&  — 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jX                  e-«      Z. G d„ de%«      Z/y)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-	 	 	 	 	 d.d „Z	 	 d/	 	 	 	 	 	 	 	 	 d0d!„Z	 	 	 d1	 	 	 	 	 	 	 	 	 	 	 d2d"„Z	 	 	 	 	 	 d3d#„Zed+d$„«       Z ed+d%„«       Z!	 d-	 	 	 	 	 d4ˆ fd&„Z"ed5d'„«       Z#ˆ xZ$S )6Ú	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")
    c                ó   — dddœS )NÚKONKO_API_KEYÚOPENAI_API_KEY)Úkonko_api_keyÚopenai_api_key© ©Úselfs    úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/konko.pyÚ
lc_secretszChatKonko.lc_secrets>   s   € à!0ÐDTÑUÐUó    Úboolc                 ó   — y)z9Return whether this model can be serialized by Langchain.Fr%   )Úclss    r(   Úis_lc_serializablez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                ó¢  — t        t        |dd«      «      |d<   	 ddl}	 t	        «       r|j
                  j                  |d<   n|j                  |d<   t        |d«      st        j                  d	«       |d
   dk  rt        d«      ‚|d
   dkD  r|d   rt        d«      ‚|S # t        $ r t        d«      ‚w xY w# t        $ r t        d«      ‚w xY w)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`.r/   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-   ÚvaluesrC   s      r(   Úvalidate_environmentzChatKonko.validate_environmentY   sõ   € ô #8Ü  ¨¸/ÓJó#
ˆˆÑð	Ûð
	ÜŒ~Ø#(§:¡:×#9Ñ#9��xÒ à#(×#7Ñ#7��xÑ ô �uÐ1Ô2Ü�M‰MðDôð
 �#‰;˜Š?ÜÐ4Ó5Ð5Ø�#‰;˜Š?˜v kÒ2ÜÐ:Ó;Ð;Øˆøô7 ò 	Üð>óð ð	ûô ò 	Üð6óð ð	ús   ›B!  3B9 Â!B6Â9Cc                óŽ   — | j                   | j                  | j                  | j                  | j                  dœ| j
                  ¥S )z1Get the default parameters for calling Konko API.)r0   r@   Ústreamr>   r5   )r0   r@   r<   r>   r5   r8   r&   s    r(   Ú_default_paramszChatKonko._default_params   sC   € ð —Z‘ZØŸ/™/Ø—n‘nØ—‘Ø×+Ñ+ñ
ð ×Ñð
ð 	
r*   c                óŠ  — |s	 t        t        j                  d   «      }nt	        |t
        «      rt        |«      }| s	 t        t        j                  d   «      } nt	        | t
        «      rt        | «      } |› d�}dd| j                  «       › �i}|r!t        t        |«      j                  «       |d<   t        j                  ||¬«      }|j                  d	k7  rt        d
|› d|j                  › �«      ‚|j                  «       d   D �ch c]  }|d   ’Œ	 c}S # t        $ r Y Œèw xY w# t        $ r t        d«      ‚w xY wc c}w )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Ú
isinstancer3   rI   Úget_secret_valuer   r   ÚrequestsÚgetÚstatus_codeÚjson)r#   r$   Úkonko_api_baseÚ
models_urlrT   Úmodels_responser0   s          r(   Úget_available_modelszChatKonko.get_available_models‹   sg  € ñ ðÜ!6´r·z±zÐBRÑ7SÓ!T‘ô ˜¬Ô,Ü2°>ÓBˆNñ ðÜ 5´b·j±jÀÑ6QÓ R‘ô ˜¤sÔ+Ü1°-Ó@ˆMà&Ð' wÐ/ˆ
ð ˜w }×'EÑ'EÓ'GÐ&HÐIð
ˆñ Ü*.Ü˜>ó+çÑÓ ð Ð&Ñ'ô #Ÿ,™, z¸7ÔCˆà×&Ñ&¨#Ò-ÜØ,¨Z¨L¸¸?×;VÑ;VÐ:WÐXóð ð *9×)=Ñ)=Ó)?ÀÒ)GÓHÑ)G ��d“Ð)GÑHÐHøôG ò Ùðûô ò Ü ðAóð ðüò4 Is"   „D ¿D( Ä
E Ä	D%Ä$D%Ä(D=c                ó    ‡ — dˆ fd„} |di |¤ŽS )Nc                 ó<   •—  ‰j                   j                  di | ¤ŽS )Nr%   )r/   Úcreate)Úkwargsr'   s    €r(   Ú_completion_with_retryz?ChatKonko.completion_with_retry.<locals>._completion_with_retry¿   s   ø€ Ø%�4—;‘;×%Ñ%Ñ/¨Ñ/Ð/r*   )rh   r   Úreturnr   r%   r%   )r'   Úrun_managerrh   ri   s   `   r(   Úcompletion_with_retryzChatKonko.completion_with_retry¼   s   ø€ õ	0ñ &Ñ/¨Ñ/Ð/r*   c              +  ó–  K  — | j                  ||«      \  }}i |¥|¥ddi¥}t        } | j                  d||dœ|¤ŽD ]ˆ  }t        |d   «      dk(  rŒ|d   d   }	t	        |	d   |«      }|	j                  d«      }
|
�t        |
¬«      nd }|j                  }t        ||¬	«      }|r|j                  |j                  |¬
«       |–— ŒŠ y ­w)NrP   T©Úmessagesrk   Úchoicesr   ÚdeltaÚfinish_reason)rr   )ÚmessageÚgeneration_info)Úchunkr%   )Ú_create_message_dictsr   rl   Úlenr   r^   ÚdictÚ	__class__r   Úon_llm_new_tokenÚtext)r'   ro   Ústoprk   rh   Úmessage_dictsÚparamsÚdefault_chunk_classru   Úchoicerr   rt   Úcg_chunks                r(   Ú_streamzChatKonko._streamÄ   sÿ   è ø€ ð !%× :Ñ :¸8ÀTÓ JÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆä6DÐØ/�T×/Ñ/ð 
Ø"°ñ
Ø?Eô
ˆEô �5˜Ñ#Ó$¨Ò)ØØ˜9Ñ% aÑ(ˆFÜ3Ø�w‘Ð!4óˆEð #ŸJ™J Ó7ˆMà5BÐ5N” =Õ1ÐTXð ð #(§/¡/ÐÜ*Ø¨ôˆHñ Ø×,Ñ,¨X¯]©]À(Ð,ÔKØ‹Nñ'
ùs   ‚CC	c                óê   — |�|n| j                   }|r! | j                  |f||dœ|¤Ž}t        |«      S | j                  ||«      \  }}	i |	¥|¥}	 | j                  d||dœ|	¤Ž}
| j                  |
«      S )N)r|   rk   rn   r%   )r<   r‚   r   rv   rl   Ú_create_chat_result)r'   ro   r|   rk   rP   rh   Úshould_streamÚstream_iterr}   r~   Úresponses              r(   Ú	_generatezChatKonko._generateä   s¦   € ð #)Ð"4™¸$¿.¹.ˆÙØ&˜$Ÿ,™,ØðØ#°ñØ@FñˆKô (¨Ó4Ð4à $× :Ñ :¸8ÀTÓ JÑˆ�vØ%�FÐ%˜fÐ%ˆØ-�4×-Ñ-ð 
Ø"°ñ
Ø?Eñ
ˆð ×'Ñ'¨Ó1Ð1r*   c                óˆ   — | j                   }|�d|v rt        d«      ‚||d<   |D �cg c]  }t        |«      ‘Œ }}||fS c c}w )Nr|   z2`stop` found in both the input and default params.)Ú_client_paramsrI   r   )r'   ro   r|   r~   Úmr}   s         r(   rv   zChatKonko._create_message_dictsú   s]   € ð ×$Ñ$ˆØÐØ˜ÑÜ Ð!UÓVÐVØ!ˆF�6‰NÙ=EÓF¹X¸Ô0°Õ3¸XˆÐFØ˜fÐ$Ð$ùò Gs   §?c                ó:   — i d| j                   i¥| j                  ¥S )zGet the identifying parameters.Ú
model_name)r0   rQ   r&   s    r(   Ú_identifying_paramszChatKonko._identifying_params  s$   € ð F�< §¡Ð,ÐE°×0DÑ0DÐEÐEr*   c                ó   — i | j                   ¥S )z-Get the parameters used for the konko client.)rQ   r&   s    r(   rŠ   zChatKonko._client_params
  s   € ð (�$×&Ñ&Ð'Ð'r*   c                ó\   •— d| j                   it        ‰| �	  |¬«      ¥| j                  ¥|¥S )z,Get the parameters used to invoke the model.r0   )r|   )r0   ÚsuperÚ_get_invocation_paramsrQ   )r'   r|   rh   ry   s      €r(   r’   z ChatKonko._get_invocation_params  sG   ø€ ð
 �T—Z‘Zð
ä‰gÑ,°$Ð,Ó7ð
ð ×"Ñ"ð
ð ð	
ð 	
r*   c                 ó   — y)zReturn type of chat model.z
konko-chatr%   r&   s    r(   Ú	_llm_typezChatKonko._llm_type  s   € ð r*   )rj   zDict[str, str])rj   r+   )rM   r   rj   r   )rj   r7   )r#   úUnion[str, SecretStr, None]r$   r•   ra   r3   rj   zSet[str])N)rk   ú"Optional[CallbackManagerForLLMRun]rh   r   rj   r   )NN)
ro   úList[BaseMessage]r|   úOptional[List[str]]rk   r–   rh   r   rj   zIterator[ChatGenerationChunk])NNN)ro   r—   r|   r˜   rk   r–   rP   zOptional[bool]rh   r   rj   r   )ro   r—   r|   r˜   rj   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r|   r˜   rh   r   rj   r7   )rj   r3   )%Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr)   Úclassmethodr.   r/   Ú__annotations__r   ÚDEFAULT_MODELr0   r5   rx   r8   r$   r#   r;   r<   r>   r@   r   rN   rQ   ÚstaticmethodÚDEFAULT_API_BASErd   rl   r‚   rˆ   rv   rŽ   rŠ   r’   r”   Ú__classcell__)ry   s   @r(   r   r   .   sP  ø… ñð òVó ðVð òó ðð €FˆCÓÙ˜}°GÔ<€Eˆ3Ó<ØØ€K�ÓØ+Ù#(¸Ô#>€L�.Ó>ØVØ$(€N�MÓ(Ø#'€M�=Ó'Ø€K�ÓØ<Ø€IˆtÓØ/Ø€A€sƒJØAØ€J�ÓØ/àò#ó ð#ðJ ò	
ó ð	
ð à59Ø6:Ø.ð.IØ2ð.Ià3ð.Ið ð.Ið 
ò	.Ió ð.Iðb AEð0Ø=ð0ØPSð0à	ó0ð %)Ø:>ð	à#ðð "ðð 8ð	ð
 ðð 
'óðF %)Ø:>Ø!%ð2à#ð2ð "ð2ð 8ð	2ð
 ð2ð ð2ð 
ó2ð,	%Ø)ð	%Ø1Dð	%à	4ó	%ð òFó ðFð ò(ó ð(ð
 +/ð	
Ø'ð	
Ø:=ð	
à	õ	
ð òó ôr*   r   )0rœ   Ú
__future__r   ÚloggingrX   rK   Útypingr   r   r   r   r   r	   r
   r   r   r   r]   Ú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*   