Ë
    µŒjµ0  ã                  ó>  — d Z ddlm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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mZmZmZmZm Z m!Z!m"Z" dd	l#m$Z$m%Z%m&Z& dd
l'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2  ejf                  e4«      Z5 G d„ de«      Z6y)zWriter chat wrapper.é    )ÚannotationsN)ÚAnyÚAsyncIteratorÚCallableÚDictÚIteratorÚListÚLiteralÚOptionalÚSequenceÚTupleÚTypeÚUnionÚcast)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚLanguageModelInput)ÚBaseChatModel)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚBaseMessageChunkÚChatMessageÚHumanMessageÚSystemMessageÚToolMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)ÚRunnable)Úget_from_dict_or_env)Úconvert_to_openai_tool)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrÚmodel_validatorc                  ó6  ‡ — e Zd ZU dZ edd¬«      Zded<    edd¬«      Zded<    ed¬«      Zd	ed
<   	  ed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<   	  ed¬«      Zed,d„«       Zed-d„«       Zed-d„«       Z ed¬ «      ed.d!„«       «       Zd/d"„Zed0d#„«       Zed1d$„«       Z	 d2	 	 	 	 	 d3d%„Z	 	 d4	 	 	 	 	 	 	 	 	 d5d&„Z	 	 d4	 	 	 	 	 	 	 	 	 d6d'„Z	 	 d4	 	 	 	 	 	 	 	 	 d7d(„Z	 	 d4	 	 	 	 	 	 	 	 	 d8d)„Z dd*œ	 	 	 	 	 	 	 d9ˆ fd+„Z!ˆ xZ"S ):Ú
ChatWriteraµ  Writer chat model.

    To use, you should have the ``writer-sdk`` Python package installed, and the
    environment variable ``WRITER_API_KEY`` set with your API key or pass 'api_key'
    init param.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatWriter

            chat = ChatWriter(
                api_key="your key"
                model="palmyra-x-004"
            )
    NT)ÚdefaultÚexcluder   ÚclientÚasync_client©r*   zOptional[SecretStr]Úapi_keyzpalmyra-x-004Úmodel)r*   ÚaliasÚstrÚ
model_namegffffffæ?ÚfloatÚtemperature)Údefault_factoryúDict[str, Any]Úmodel_kwargsé   ÚintÚnzOptional[int]Ú
max_tokens)Úpopulate_by_namec                 ó   — y)zReturn type of chat model.zwriter-chat© ©Úselfs    úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/chat_models/writer.pyÚ	_llm_typezChatWriter._llm_type[   s   € ð ó    c                óL   — | j                   | j                  dœ| j                  ¥S )zGet the identifying parameters.)r3   r5   )r3   r5   r8   r@   s    rB   Ú_identifying_paramszChatWriter._identifying_params`   s.   € ð Ÿ/™/Ø×+Ñ+ñ
ð ×Ñð
ð 	
rD   c                óx   — | j                   | j                  | j                  | j                  dœ| j                  ¥S )z2Get the default parameters for calling Writer API.)r0   r5   r;   r<   )r3   r5   r;   r<   r8   r@   s    rB   Ú_default_paramszChatWriter._default_paramsi   s<   € ð —_‘_Ø×+Ñ+Ø—‘ØŸ/™/ñ	
ð
 ×Ñð
ð 	
rD   Úbefore)Úmodec           
     ó°  — 	 ddl m}m} |j	                  d«      s%|j                  d |t        |dd«      ¬«      i«       |j	                  d	«      s%|j                  d	 |t        |dd«      ¬«      i«       t        |j	                  d«      «      |u rt        |j	                  d	«      «      |u st        d
«      ‚|S # t        $ r}t        d«      |‚d}~ww xY w)z<Validates that api key is passed and creates Writer clients.r   )ÚAsyncClientÚClientzXCould not import writerai python package. Please install it with `pip install writerai`.Nr,   r/   ÚWRITER_API_KEY)r/   r-   zx'client' attribute must be with type 'Client' and 'async_client' must be with type 'AsyncClient' from 'writerai' package)	ÚwriterairL   rM   ÚImportErrorÚgetÚupdater!   ÚtypeÚ
ValueError)ÚclsÚvaluesrL   rM   Úes        rB   Úvalidate_environmentzChatWriter.validate_environmentt   sï   € ð	ß4ð �z‰z˜(Ô#Ø�M‰Mà™fÜ 4Ø" IÐ/?ó!ôðôð �z‰z˜.Ô)Ø�M‰Mà"¡KÜ 4Ø" IÐ/?ó!ô%ðôô �—‘˜HÓ%Ó&¨&Ñ0Ü�V—Z‘Z Ó/Ó0°KÑ?äðYóð ð
 ˆøôK ò 	ÜðAóð ðûð	ús   ‚B; Â;	CÃCÃCc                óX  — g }|j                   D ]O  }| j                  |j                  «      }t        |t	        |j
                  ¬«      ¬«      }|j                  |«       ŒQ i }|j                  r|j                  j                  }|| j                  |j                  dœ}t        ||¬«      S )N)Úfinish_reason)ÚmessageÚgeneration_info)Útoken_usager3   Úsystem_fingerprint)ÚgenerationsÚ
llm_output)ÚchoicesÚ_convert_writer_to_langchainr[   r   ÚdictrZ   ÚappendÚusageÚ__dict__r3   r^   r   )rA   Úresponser_   Úchoicer[   Úgenr]   r`   s           rB   Ú_create_chat_resultzChatWriter._create_chat_result¡   sœ   € ØˆØ×&Ô&ˆFØ×7Ñ7¸¿¹ÓGˆGÜ ØÜ $°6×3GÑ3GÔ HôˆCð ×Ñ˜sÕ#ð 'ð ˆà�>Š>Ø"Ÿ.™.×1Ñ1ˆKà&ØŸ/™/Ø"*×"=Ñ"=ñ
ˆ
ô  k¸jÔIÐIrD   c                ó  — d| j                   dœ}t        | t        «      r| j                  |d<   n·t        | t        «      rd|d<   n¡t        | t
        «      r?d|d<   | j                  r€| j                  D �cg c]  }|d   d|d   |d	   d
œdœ‘Œ c}|d<   nRt        | t        «      rd|d<   n<t        | t        «      rd|d<   | j                  |d<   nt        dt        | «      › �«      ‚| j                  r| j                  |d<   |S c c}w )z5Convert a LangChain message to a Writer message dict.Ú ©ÚroleÚcontentrn   ÚuserÚ	assistantÚidÚfunctionÚnameÚargs)rt   Ú	arguments)rr   rS   rs   Ú
tool_callsÚsystemÚtoolÚtool_call_idzGot unknown message type: )ro   Ú
isinstancer   rn   r   r   rw   r   r   rz   rT   rS   rt   )r[   Úmessage_dictry   s      rB   Ú_convert_langchain_to_writerz'ChatWriter._convert_langchain_to_writer·   s  € ð !#¨w¯©Ñ?ˆä�gœ{Ô+Ø#*§<¡<ˆL˜Ò Ü˜¤Ô.Ø#)ˆL˜Ò Ü˜¤Ô+Ø#.ˆL˜Ñ Ø×!Ò!ð !(× 2Ò 2ó.ñ !3˜ð	 # 4™jØ *Ø-1°&©\ÈÈVÉÑ$Uóð
 !3ñ.�˜\Ò*ô ˜¤Ô/Ø#+ˆL˜Ò Ü˜¤Ô-Ø#)ˆL˜Ñ Ø+2×+?Ñ+?ˆL˜Ò(äÐ9¼$¸w»-¸ÐIÓJÐJà�<Š<Ø#*§<¡<ˆL˜Ñ àÐùò'.s   Á5Dc                óä  — t        | t        «      s+t        j                  t        j                  | d„ ¬«      «      } | j                  dd«      }| j                  d«      }|sd}|dk(  rt        |¬«      S |dk(  r(i }| j                  d	g «      x}r||d	<   t        ||¬
«      S |dk(  rt        |¬«      S |dk(  r.t        || j                  dd«      | j                  dd«      ¬«      S t        ||¬«      S )z0Convert a Writer message to a LangChain message.c                ó   — | j                   S ©N)rf   )Úos    rB   Ú<lambda>z9ChatWriter._convert_writer_to_langchain.<locals>.<lambda>Ý   s   € ¸q¿zºzrD   r.   rn   rl   ro   rp   )ro   rq   rw   )ro   Úadditional_kwargsrx   ry   rz   rt   )ro   rz   rt   )ro   rn   )r{   rc   ÚjsonÚloadsÚdumpsrQ   r   r   r   r   r   )Úresponse_messagern   ro   rƒ   rw   s        rB   rb   z'ChatWriter._convert_writer_to_langchainØ   s  € ô Ð*¬DÔ1Ü#Ÿz™zÜ—
‘
Ð+Ñ5IÔJó Ðð  ×#Ñ# F¨BÓ/ˆØ"×&Ñ& yÓ1ˆÙØˆGà�6Š>Ü¨Ô0Ð0Ø�[Ò Ø "ÐØ-×1Ñ1°,ÀÓCÐCˆzÐCØ2<Ð! ,Ñ/Ü!¨'ÐEVÔWÐWØ�XÒÜ ¨Ô1Ð1Ø�VŠ^ÜØØ-×1Ñ1°.À"ÓEØ%×)Ñ)¨&°"Ó5ôð ô  w°TÔ:Ð:rD   c                óô   — | j                   | j                  | j                  dœ| j                  ¥}|r||d<   | j                  �| j                  |d<   |D �cg c]  }| j                  |«      ‘Œ }}||fS c c}w )z=Convert a list of LangChain messages to List of Writer dicts.)r0   r5   r;   Ústopr<   )r3   r5   r;   r8   r<   r}   )rA   Úmessagesr‰   ÚparamsÚmÚmessage_dictss         rB   Ú_convert_messages_to_writerz&ChatWriter._convert_messages_to_writer÷   sˆ   € ð
 —_‘_Ø×+Ñ+Ø—‘ñ
ð ×Ñð	
ˆñ Ø!ˆF�6‰NØ�?‰?Ð&Ø#'§?¡?ˆF�<Ñ áGOÓPÁxÀ!˜×:Ñ:¸1Õ=ÀxˆÐPØ˜fÐ$Ð$ùò Qs   ÁA5c              +  óª  K  — | j                  ||«      \  }}i |¥|¥ddi¥} | j                  j                  j                  dd|i|¤Ž}|D ]ƒ  }|j                  d   j                  }	|	r|	j
                  sŒ+| j                  d|	j
                  dœ«      }
t        t        t        |
«      ¬«      }|r|j                  |j                  «       |–— Œ… y ­w©	NÚstreamTrŠ   r   rq   rm   )r[   r?   )rŽ   r,   Úchatra   Údeltaro   rb   r   r   r   Úon_llm_new_tokenÚtext©rA   rŠ   r‰   Úrun_managerÚkwargsr�   r‹   rg   Úchunkr“   Úmessage_chunks              rB   Ú_streamzChatWriter._stream	  sÐ   è ø€ ð !%× @Ñ @ÀÈ4Ó PÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆà(�4—;‘;×#Ñ#×(Ñ(ÑJ°-ÐJÀ6ÑJˆãˆEØ—M‘M !Ñ$×*Ñ*ˆEÙ §¢ØØ ×=Ñ=à'Ø$Ÿ}™}ñóˆMô (´Ô5EÀ}Ó0UÔVˆEáØ×,Ñ,¨U¯Z©ZÔ8à‹Kñ ùs   ‚CCc               óä  K  — | j                  ||«      \  }}i |¥|¥ddi¥} | j                  j                  j                  dd|i|¤Žƒ d {  –—† }|2 3 d {  –—† }|j                  d   j                  }	|	r|	j
                  sŒ1| j                  d|	j
                  dœ«      }
t        t        t        |
«      ¬«      }|r#|j                  |j                  «      ƒ d {  –—†  |­–— Œ”7 Œš7 Œ‘7 Œ6 y ­wr�   )rŽ   r-   r’   ra   r“   ro   rb   r   r   r   r”   r•   r–   s              rB   Ú_astreamzChatWriter._astream&  só   è ø€ ð !%× @Ñ @ÀÈ4Ó PÑˆ�vØ5�FÐ5˜fÐ5 h°Ñ5ˆà4˜×*Ñ*×/Ñ/×4Ñ4ÑV¸mÐVÈvÑV×Vˆá#÷ 	�%Ø—M‘M !Ñ$×*Ñ*ˆEÙ §¢ØØ ×=Ñ=à'Ø$Ÿ}™}ñóˆMô (´Ô5EÀ}Ó0UÔVˆEáØ!×2Ñ2°5·:±:Ó>×>Ð>àŒKð# Wøð	øð ?øñ $ùsI   ‚AC0ÁC(ÁC0ÁC.ÁC*ÁC.ÁBC0ÃC,ÃC0Ã*C.Ã,C0Ã.C0c                óª   — | j                  ||«      \  }}i |¥|¥} | j                  j                  j                  dd|i|¤Ž}| j                  |«      S ©NrŠ   r?   )rŽ   r,   r’   rj   ©rA   rŠ   r‰   r—   r˜   r�   r‹   rg   s           rB   Ú	_generatezChatWriter._generateC  s_   € ð !%× @Ñ @ÀÈ4Ó PÑˆ�vØ%�FÐ%˜fÐ%ˆØ(�4—;‘;×#Ñ#×(Ñ(ÑJ°-ÐJÀ6ÑJˆØ×'Ñ'¨Ó1Ð1rD   c              ‹  óÆ   K  — | j                  ||«      \  }}i |¥|¥} | j                  j                  j                  dd|i|¤Žƒ d {  –—† }| j                  |«      S 7 Œ­wrŸ   )rŽ   r-   r’   rj   r    s           rB   Ú
_ageneratezChatWriter._agenerateO  sn   è ø€ ð !%× @Ñ @ÀÈ4Ó PÑˆ�vØ%�FÐ%˜fÐ%ˆØ4˜×*Ñ*×/Ñ/×4Ñ4ÑV¸mÐVÈvÑV×VˆØ×'Ñ'¨Ó1Ð1ð Wús   ‚AA!Á	AÁ
A!)Útool_choicec               ó„   •— |D �cg c]  }t        |«      ‘Œ }}|r|dv r|ndd|idœ|d<   t        ‰| �  dd|i|¤ŽS c c}w )aA  Bind tools to the chat model.

        Args:
            tools: Tools to bind to the model
            tool_choice: Which tool to require ('auto', 'none', or specific tool name)
            **kwargs: Additional parameters to pass to the chat model

        Returns:
            A runnable that will use the tools
        )ÚautoÚnoners   rt   )rS   rs   r¤   Útoolsr?   )r"   ÚsuperÚbind)rA   r¨   r¤   r˜   ry   Úformatted_toolsÚ	__class__s         €rB   Ú
bind_toolszChatWriter.bind_tools[  sj   ø€ ñ" EJÓJÁE¸DÔ1°$Õ7ÀEˆÐJáð Ð"2Ñ2ñ à(°v¸{Ð6KÑLð �=Ñ!ô ‰w‰|Ñ< /Ð<°VÑ<Ð<ùò Ks   †=)Úreturnr2   )r®   r7   )rV   r   r®   r   )rg   r   r®   r   )r[   r   r®   rc   )r‡   r   r®   r   r€   )rŠ   úList[BaseMessage]r‰   úOptional[List[str]]r®   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])NN)
rŠ   r¯   r‰   r°   r—   ú"Optional[CallbackManagerForLLMRun]r˜   r   r®   zIterator[ChatGenerationChunk])
rŠ   r¯   r‰   r°   r—   ú'Optional[AsyncCallbackManagerForLLMRun]r˜   r   r®   z"AsyncIterator[ChatGenerationChunk])
rŠ   r¯   r‰   r°   r—   r±   r˜   r   r®   r   )
rŠ   r¯   r‰   r°   r—   r²   r˜   r   r®   r   )r¨   z:Sequence[Union[Dict[str, Any], Type[BaseModel], Callable]]r¤   z-Optional[Union[str, Literal['auto', 'none']]]r˜   r   r®   z)Runnable[LanguageModelInput, BaseMessage])#Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r,   Ú__annotations__r-   r/   r3   r5   rc   r8   r;   r<   r$   Úmodel_configÚpropertyrC   rF   rH   r'   ÚclassmethodrX   rj   Ústaticmethodr}   rb   rŽ   r›   r�   r¡   r£   r­   Ú__classcell__)r¬   s   @rB   r)   r)   2   sr  ø… ññ"  ¨dÔ3€FˆCÓ3Ù d°DÔ9€L�#Ó9á#(°Ô#6€GÐ Ó6Øá O¸7ÔC€J�ÓCØà€K�ÓØ+á#(¸Ô#>€L�.Ó>ØVà€A€sƒJØAà $€J�Ó$Ø/á¨tÔ4€Làòó ðð ò
ó ð
ð ò
ó ð
ñ ˜(Ô#Øò)ó ó $ð)óVJð, òó ðð@ ò;ó ð;ð> HLð%Ø)ð%Ø1Dð%à	4ó%ð* %)Ø:>ð	à#ðð "ðð 8ð	ð
 ðð 
'óð@ %)Ø?Cð	à#ðð "ðð =ð	ð
 ðð 
,óð@ %)Ø:>ð	
2à#ð
2ð "ð
2ð 8ð	
2ð
 ð
2ð 
ó
2ð %)Ø?Cð	
2à#ð
2ð "ð
2ð =ð	
2ð
 ð
2ð 
ó
2ð  FJñ	=àIð=ð Cð	=ð
 ð=ð 
3÷=ñ =rD   r)   )7r¶   Ú
__future__r   r„   ÚloggingÚtypingr   r   r   r   r   r	   r
   r   r   r   r   r   r   Úlangchain_core.callbacksr   r   Úlangchain_core.language_modelsr   Ú*langchain_core.language_models.chat_modelsr   Úlangchain_core.messagesr   r   r   r   r   r   r   r   Úlangchain_core.outputsr   r   r   Úlangchain_core.runnablesr    Úlangchain_core.utilsr!   Ú%langchain_core.utils.function_callingr"   Úpydanticr#   r$   r%   r&   r'   Ú	getLoggerr³   Úloggerr)   r?   rD   rB   Ú<module>rË      s{   ðÙ å "ã Û ÷÷ ÷ õ ÷ õ >õ÷	÷ 	ó 	÷ SÑ RÝ -Ý 5Ý Hß MÕ Mà	ˆ×	Ñ	˜8Ó	$€ôC=�õ C=rD   