§
    šŠtj¶0  ã                  óN  — 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. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4  ej5        e6¦  «        Z7 G d„ de¦  «        Z8dS )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)ÚBaseTool)Úget_from_dict_or_env©Úconvert_to_openai_tool)Ú	BaseModelÚ
ConfigDictÚFieldÚ	SecretStrÚmodel_validatorc                  ó(  ‡ — 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dDd„¦   «         ZedEd„¦   «         ZedEd„¦   «         Z ed ¬!¦  «        edFd$„¦   «         ¦   «         ZdGd'„ZedHd+„¦   «         ZedId-„¦   «         Z	 dJdKd3„Z	 	 dLdMd8„Z	 	 dLdNd;„Z	 	 dLdOd<„Z	 	 dLdPd=„Z 	 dJdQˆ fdC„Z!ˆ xZ"S )RÚ
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_nameÚreturnc                ó   — dS )zReturn type of chat model.zwriter-chat© ©Úselfs    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/chat_models/writer.pyÚ	_llm_typezChatWriter._llm_type\   s	   € ð ˆ}ó    c                ó.   — | j         | j        dœ| j        ¥S )zGet the identifying parameters.)r5   r7   )r5   r7   r:   rC   s    rE   Ú_identifying_paramszChatWriter._identifying_paramsa   s+   € ð œ/ØÔ+ð
ð 
ð Ôð
ð 	
rG   c                óF   — | j         | j        | j        | j        dœ| j        ¥S )z2Get the default parameters for calling Writer API.)r2   r7   r=   r>   )r5   r7   r=   r>   r:   rC   s    rE   Ú_default_paramszChatWriter._default_paramsj   s5   € ð ”_ØÔ+Ø”Øœ/ð	
ð 
ð
 Ôð
ð 	
rG   Úbefore)ÚmodeÚvaluesr   c           
     ó   — 	 ddl m}m} n"# t          $ r}t          d¦  «        |‚d}~ww xY w|                     d¦  «        s0|                     d |t          |dd¦  «        ¬¦  «        i¦  «         |                     d	¦  «        s0|                     d	 |t          |dd¦  «        ¬¦  «        i¦  «         t          |                     d¦  «        ¦  «        |u r$t          |                     d	¦  «        ¦  «        |u st          d
¦  «        ‚|S )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.   r1   ÚWRITER_API_KEY)r1   r/   zx'client' attribute must be with type 'Client' and 'async_client' must be with type 'AsyncClient' from 'writerai' package)	ÚwriterairP   rQ   ÚImportErrorÚgetÚupdater"   ÚtypeÚ
ValueError)ÚclsrN   rP   rQ   Úes        rE   Úvalidate_environmentzChatWriter.validate_environmentu   su  € ð	Ø4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4øÝð 	ð 	ð 	ÝðAñô ð ðøøøøð	øøøð �zŠz˜(Ñ#Ô#ð 		Ø�MŠMà˜f˜fÝ 4Ø" IÐ/?ñ!ô !ðñ ô ðñô ð ð �zŠz˜.Ñ)Ô)ð 		Ø�MŠMà" K KÝ 4Ø" IÐ/?ñ!ô !ð%ñ %ô %ðñô ð õ �—’˜HÑ%Ô%Ñ&Ô&¨&Ð0Ð0Ý�V—Z’Z Ñ/Ô/Ñ0Ô0°KÐ?Ð?åðYñô ð ð
 ˆs   ‚ ‹
*•%¥*Úresponser   c                ó,  — g }|j         D ]U}|                      |j        ¦  «        }t          |t	          |j        ¬¦  «        ¬¦  «        }|                     |¦  «         ŒVi }|j        r|j        j        }|| j	        |j
        dœ}t          ||¬¦  «        S )N)Úfinish_reason)ÚmessageÚgeneration_info)Útoken_usager5   Úsystem_fingerprint)ÚgenerationsÚ
llm_output)ÚchoicesÚ_convert_writer_to_langchainr_   r   Údictr^   ÚappendÚusageÚ__dict__r5   rb   r   )rD   r\   rc   Úchoicer_   Úgenra   rd   s           rE   Ú_create_chat_resultzChatWriter._create_chat_result¢   s·   € ØˆØÔ&ð 	$ð 	$ˆFØ×7Ò7¸¼ÑGÔGˆGÝ ØÝ $°6Ô3GÐ HÑ HÔ Hðñ ô ˆCð ×Ò˜sÑ#Ô#Ð#Ð#àˆàŒ>ð 	2Ø"œ.Ô1ˆKà&Øœ/Ø"*Ô"=ð
ð 
ˆ
õ  k¸jÐIÑIÔIÐIrG   r_   r   rg   c                óÜ  — d| j         dœ}t          | t          ¦  «        r| j        |d<   n°t          | t          ¦  «        rd|d<   n•t          | t
          ¦  «        r!d|d<   | j        rd„ | j        D ¦   «         |d<   n_t          | t          ¦  «        rd|d<   nDt          | t          ¦  «        rd	|d<   | j	        |d
<   nt          dt          | ¦  «        › �¦  «        ‚| j        r
| j        |d<   |S )z5Convert a LangChain message to a Writer message dict.Ú ©ÚroleÚcontentrq   ÚuserÚ	assistantc                óD   — g | ]}|d          d|d         |d         dœdœ‘ŒS )ÚidÚfunctionÚnameÚargs)rx   Ú	arguments)rv   rW   rw   rB   ©Ú.0Útools     rE   ú
<listcomp>z;ChatWriter._convert_langchain_to_writer.<locals>.<listcomp>Ä   sN   € ð .ð .ð .ð ð	 # 4œjØ *Ø-1°&¬\ÈÈVÌÐ$UÐ$Uðð ð.ð .ð .rG   Ú
tool_callsÚsystemr}   Útool_call_idzGot unknown message type: rx   )rr   Ú
isinstancer   rq   r   r   r   r   r   r�   rX   rW   rx   )r_   Úmessage_dicts     rE   Ú_convert_langchain_to_writerz'ChatWriter._convert_langchain_to_writer¸   s.  € ð !#¨w¬Ð?Ð?ˆå�g�{Ñ+Ô+ð 	KØ#*¤<ˆL˜Ñ Ð Ý˜¥Ñ.Ô.ð 	KØ#)ˆL˜Ñ Ð Ý˜¥Ñ+Ô+ð 	KØ#.ˆL˜Ñ ØÔ!ð ð.ð .ð !(Ô 2ð.ñ .ô .�˜\Ñ*øõ ˜¥Ñ/Ô/ð 	KØ#+ˆL˜Ñ Ð Ý˜¥Ñ-Ô-ð 	KØ#)ˆL˜Ñ Ø+2Ô+?ˆL˜Ñ(Ð(åÐI½$¸w¹-¼-ÐIÐIÑJÔJÐJàŒ<ð 	0Ø#*¤<ˆL˜Ñ àÐrG   Úresponse_messagec                óB  — t          | t          ¦  «        s)t          j        t          j        | d„ ¬¦  «        ¦  «        } |                      dd¦  «        }|                      d¦  «        }|sd}|dk    rt          |¬¦  «        S |dk    r0i }|                      d	g ¦  «        x}r||d	<   t          ||¬
¦  «        S |dk    rt          |¬¦  «        S |dk    r:t          ||                      dd¦  «        |                      dd¦  «        ¬¦  «        S t          ||¬¦  «        S )z0Convert a Writer message to a LangChain message.c                ó   — | j         S ©N)rj   )Úos    rE   ú<lambda>z9ChatWriter._convert_writer_to_langchain.<locals>.<lambda>Þ   s   € ¸q¼z€ rG   r0   rq   ro   rr   rs   )rr   rt   r   )rr   Úadditional_kwargsr€   r}   r�   rx   )rr   r�   rx   )rr   rq   )r‚   rg   ÚjsonÚloadsÚdumpsrU   r   r   r   r   r   )r…   rq   rr   r‹   r   s        rE   rf   z'ChatWriter._convert_writer_to_langchainÙ   sX  € õ Ð*­DÑ1Ô1ð 	Ý#œzÝ”
Ð+Ð5IÐ5IÐJÑJÔJñ ô  Ðð  ×#Ò# F¨BÑ/Ô/ˆØ"×&Ò& yÑ1Ô1ˆØð 	ØˆGà�6Š>ˆ>Ý¨Ð0Ñ0Ô0Ð0Ø�[Ò Ð Ø "ÐØ-×1Ò1°,ÀÑCÔCÐCˆzð =Ø2<Ð! ,Ñ/Ý!¨'ÐEVÐWÑWÔWÐWØ�XÒÐÝ ¨Ð1Ñ1Ô1Ð1Ø�VŠ^ˆ^ÝØØ-×1Ò1°.À"ÑEÔEØ%×)Ò)¨&°"Ñ5Ô5ðñ ô ð õ  w°TÐ:Ñ:Ô:Ð:rG   ÚmessagesúList[BaseMessage]ÚstopúOptional[List[str]]ú+Tuple[List[Dict[str, Any]], Dict[str, Any]]c                ó�   ‡ — ‰ j         ‰ j        ‰ j        dœ‰ j        ¥}|r||d<   ‰ j        �
‰ j        |d<   ˆ fd„|D ¦   «         }||fS )z=Convert a list of LangChain messages to List of Writer dicts.)r2   r7   r=   r‘   Nr>   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rB   )r„   )r|   ÚmrD   s     €rE   r~   z:ChatWriter._convert_messages_to_writer.<locals>.<listcomp>  s'   ø€ ÐPÐPÐPÀ!˜×:Ò:¸1Ñ=Ô=ÐPÐPÐPrG   )r5   r7   r=   r:   r>   )rD   r�   r‘   ÚparamsÚmessage_dictss   `    rE   Ú_convert_messages_to_writerz&ChatWriter._convert_messages_to_writerø   sy   ø€ ð
 ”_ØÔ+Ø”ð
ð 
ð Ôð	
ˆð ð 	"Ø!ˆF�6‰NØŒ?Ð&Ø#'¤?ˆF�<Ñ àPÐPÐPÐPÀxÐPÑPÔPˆØ˜fÐ$Ð$rG   Úrun_managerú"Optional[CallbackManagerForLLMRun]ÚkwargsúIterator[ChatGenerationChunk]c              +  ó„  K  — |                       ||¦  «        \  }}i |¥|¥ddi¥} | j        j        j        dd|i|¤Ž}|D ]~}|j        d         j        }	|	r|	j        sŒ|                      d|	j        dœ¦  «        }
t          t          t          |
¦  «        ¬¦  «        }|r| 
                    |j        ¦  «         |V — Œd S ©	NÚstreamTr�   r   rt   rp   )r_   rB   )r™   r.   Úchatre   Údeltarr   rf   r   r   r   Úon_llm_new_tokenÚtext©rD   r�   r‘   rš   rœ   r˜   r—   r\   Úchunkr¢   Úmessage_chunks              rE   Ú_streamzChatWriter._stream
  s  è è € ð !%× @Ò @ÀÈ4Ñ PÔ PÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆà(�4”;Ô#Ô(ÐJÐJ°-ÐJÀ6ÐJÐJˆàð 	ð 	ˆEØ”M !Ô$Ô*ˆEØð  ¤ð ØØ ×=Ò=à'Ø$œ}ðð ñô ˆMõ (µÕ5EÀ}Ñ0UÔ0UÐVÑVÔVˆEàð 9Ø×,Ò,¨U¬ZÑ8Ô8Ð8àˆKˆKˆKˆKð	ð 	rG   ú'Optional[AsyncCallbackManagerForLLMRun]ú"AsyncIterator[ChatGenerationChunk]c               óª  K  — |                       ||¦  «        \  }}i |¥|¥ddi¥} | j        j        j        dd|i|¤Žƒ d {V —†}|2 3 d {V —†}|j        d         j        }	|	r|	j        sŒ#|                      d|	j        dœ¦  «        }
t          t          t          |
¦  «        ¬¦  «        }|r | 
                    |j        ¦  «        ƒ d {V —† |W V — Œ‹6 d S rŸ   )r™   r/   r¡   re   r¢   rr   rf   r   r   r   r£   r¤   r¥   s              rE   Ú_astreamzChatWriter._astream'  sE  è è € ð !%× @Ò @ÀÈ4Ñ PÔ PÑˆ�vØ5�FÐ5˜fÐ5 h°Ð5Ð5ˆà4˜Ô*Ô/Ô4ÐVÐV¸mÐVÈvÐVÐVÐVÐVÐVÐVÐVÐVˆà#ð 	ð 	ð 	ð 	ð 	ð 	ð 	�%Ø”M !Ô$Ô*ˆEØð  ¤ð ØØ ×=Ò=à'Ø$œ}ðð ñô ˆMõ (µÕ5EÀ}Ñ0UÔ0UÐVÑVÔVˆEàð ?Ø!×2Ò2°5´:Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>àˆKˆKˆKˆKˆKð $˜8˜8s   ÁCc                óœ   — |                       ||¦  «        \  }}i |¥|¥} | j        j        j        dd|i|¤Ž}|                      |¦  «        S ©Nr�   rB   )r™   r.   r¡   rm   ©rD   r�   r‘   rš   rœ   r˜   r—   r\   s           rE   Ú	_generatezChatWriter._generateD  sc   € ð !%× @Ò @ÀÈ4Ñ PÔ PÑˆ�vØ%�FÐ%˜fÐ%ˆØ(�4”;Ô#Ô(ÐJÐJ°-ÐJÀ6ÐJÐJˆØ×'Ò'¨Ñ1Ô1Ð1rG   c              ‹  ó¬   K  — |                       ||¦  «        \  }}i |¥|¥} | j        j        j        dd|i|¤Žƒ d {V —†}|                      |¦  «        S r®   )r™   r/   r¡   rm   r¯   s           rE   Ú
_ageneratezChatWriter._agenerateP  sz   è è € ð !%× @Ò @ÀÈ4Ñ PÔ PÑˆ�vØ%�FÐ%˜fÐ%ˆØ4˜Ô*Ô/Ô4ÐVÐV¸mÐVÈvÐVÐVÐVÐVÐVÐVÐVÐVˆØ×'Ò'¨Ñ1Ô1Ð1rG   ÚtoolsúDSequence[Union[Dict[str, Any], Type[BaseModel], Callable, BaseTool]]Útool_choiceú-Optional[Union[str, Literal['auto', 'none']]]ú'Runnable[LanguageModelInput, AIMessage]c                óv   •— d„ |D ¦   «         }|r|dv r|ndd|idœ|d<    t          ¦   «         j        dd|i|¤ŽS )	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
        c                ó,   — g | ]}t          |¦  «        ‘ŒS rB   r#   r{   s     rE   r~   z)ChatWriter.bind_tools.<locals>.<listcomp>l  s!   € ÐJÐJÐJ¸DÕ1°$Ñ7Ô7ÐJÐJÐJrG   )ÚautoÚnonerw   rx   )rW   rw   rµ   r³   rB   )ÚsuperÚbind)rD   r³   rµ   rœ   Úformatted_toolsÚ	__class__s        €rE   Ú
bind_toolszChatWriter.bind_tools\  ss   ø€ ð  KÐJÀEÐJÑJÔJˆàð 	ð Ð"2Ð2Ð2ð �à(°v¸{Ð6KÐLÐLð �=Ñ!ð �u‰wŒwŒ|Ð<Ð< /Ð<°VÐ<Ð<Ð<rG   )r@   r4   )r@   r9   )rN   r   r@   r   )r\   r   r@   r   )r_   r   r@   rg   )r…   r   r@   r   rˆ   )r�   r�   r‘   r’   r@   r“   )NN)
r�   r�   r‘   r’   rš   r›   rœ   r   r@   r�   )
r�   r�   r‘   r’   rš   r©   rœ   r   r@   rª   )
r�   r�   r‘   r’   rš   r›   rœ   r   r@   r   )
r�   r�   r‘   r’   rš   r©   rœ   r   r@   r   )r³   r´   rµ   r¶   rœ   r   r@   r·   )#Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r.   Ú__annotations__r/   r1   r5   r7   rg   r:   r=   r>   r&   Úmodel_configÚpropertyrF   rI   rK   r)   Úclassmethodr[   rm   Ústaticmethodr„   rf   r™   r¨   r¬   r°   r²   rÀ   Ú__classcell__)r¿   s   @rE   r+   r+   3   sÜ  ø€ € € € € € ðð ð" �% ¨dÐ3Ñ3Ô3€FÐ3Ð3Ð3Ñ3Ø˜ d°DÐ9Ñ9Ô9€LÐ9Ð9Ð9Ñ9à#( 5°Ð#6Ñ#6Ô#6€GÐ6Ð6Ð6Ñ6Øà�e O¸7ÐCÑCÔC€JÐCÐCÐCÑCØà€KÐÐÐÑØ+à#( 5¸Ð#>Ñ#>Ô#>€LÐ>Ð>Ð>Ñ>ØVà€A€J€J€J�JØAà $€JÐ$Ð$Ð$Ñ$Ø/à�:¨tÐ4Ñ4Ô4€Làðð ð ñ „Xðð ð
ð 
ð 
ñ „Xð
ð ð
ð 
ð 
ñ „Xð
ð €_˜(Ð#Ñ#Ô#Øð)ð )ð )ñ „[ñ $Ô#ð)ðVJð Jð Jð Jð, ðð ð ñ „\ðð@ ð;ð ;ð ;ñ „\ð;ð> HLð%ð %ð %ð %ð %ð* %)Ø:>ð	ð ð ð ð ð@ %)Ø?Cð	ð ð ð ð ð@ %)Ø:>ð	
2ð 
2ð 
2ð 
2ð 
2ð %)Ø?Cð	
2ð 
2ð 
2ð 
2ð 
2ð FJð=ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =rG   r+   )9rÄ   Ú
__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.toolsr!   Úlangchain_core.utilsr"   Ú%langchain_core.utils.function_callingr$   Úpydanticr%   r&   r'   r(   r)   Ú	getLoggerrÁ   Úloggerr+   rB   rG   rE   ú<module>rÚ      sf  ðØ Ð à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ -Ð -Ð -Ð -Ð -Ð -Ø )Ð )Ð )Ð )Ð )Ð )Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø HÐ HÐ HÐ HÐ HÐ HØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mà	ˆÔ	˜8Ñ	$Ô	$€ðB=ð B=ð B=ð B=ð B=�ñ B=ô B=ð B=ð B=ð B=rG   