
    Ig)                    :   d Z ddlm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mZmZ ddl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,m-Z-m.Z.m/Z/  ej`                  e1      Z2ddZ3ddZ4 G d de      Z5y)zWriter chat wrapper.    )annotationsN)AnyAsyncIteratorCallableDictIteratorListLiteralMappingOptionalSequenceTupleTypeUnion)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LanguageModelInput)BaseChatModelagenerate_from_streamgenerate_from_stream)	AIMessageAIMessageChunkBaseMessageChatMessageHumanMessageSystemMessageToolMessage)ChatGenerationChatGenerationChunk
ChatResult)Runnable)convert_to_openai_tool)	BaseModel
ConfigDictField	SecretStrc                   d| j                   d}t        | t              r| j                  |d<   nt        | t              rd|d<   nt        | 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contentr*   user	assistantidfunctionnameargs)r0   	arguments)r.   typer/   
tool_callssystemtooltool_call_idzGot unknown message type: )r+   
isinstancer   r*   r   r   r4   r   r   r7   
ValueErrorr3   r0   )messagemessage_dictr6   s      c/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/chat_models/writer.py_convert_message_to_dictr=   1   s   7??;L';'&||V	G\	*%V	GY	'*V $..* 	 t*&)-fDL Q*L& 
G]	+'V	G[	)%V'.';';^$5d7m_EFF||&||V'*s   5Dc                0   | d   }| j                  dd      }|dk(  rt        |      S |dk(  r'i }| j                  d      x}r||d<   t        ||      S |d	k(  rt        |      S |d
k(  r t	        || d   | j                  d            S t        ||      S )z5Convert a Writer message dict to a LangChain message.r*   r+   r(   r,   )r+   r-   r4   )r+   additional_kwargsr5   r6   r7   r0   )r+   r7   r0   )r+   r*   )getr   r   r   r   r   )response_dictr*   r+   r?   r4   s        r<   _convert_dict_to_messagerB   R   s     D	2.Gv~G,,		&**<88:8.8l+gARSS		W--	&~6""6*
 	
 766    c                      e Zd ZU dZ edd      Zded<    edd      Zded<    edd	
      Zded<   	 dZ	ded<   	  ee
      Zded<   	  edd
      Zde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!      Zed-d"       Zed.d#       Zd/d$Z	 d0	 	 	 	 	 d1d%Z	 	 d2	 	 	 	 	 	 	 	 	 d3d&Z	 	 d2	 	 	 	 	 	 	 	 	 d4d'Z	 	 d2	 	 	 	 	 	 	 	 	 d5d(Z	 	 d2	 	 	 	 	 	 	 	 	 d6d)Zed.d*       Zdd+	 	 	 	 	 	 	 d7 fd,Z xZS )8
ChatWriteraS  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.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatWriter

            chat = ChatWriter(model="palmyra-x-004")
    NT)defaultexcluder   clientasync_clientzpalmyra-x-004model)rF   aliasstr
model_namegffffff?floattemperature)default_factoryDict[str, Any]model_kwargsapi_keyzOptional[SecretStr]writer_api_keybase_urlzOptional[str]writer_api_baseFbool	streaming   intnzOptional[int]
max_tokens)populate_by_namec                     y)zReturn type of chat model.zwriter-chat selfs    r<   	_llm_typezChatWriter._llm_type   s     rC   c                b    | j                   | j                  | j                  d| j                  S )zGet the identifying parameters.)rM   rO   rX   )rM   rO   rX   rR   r`   s    r<   _identifying_paramszChatWriter._identifying_params   s5     //++
 	
 	
rC   c           	     "   g }|d   D ]G  }t        |d         }t        |t        |j                  d                  }|j	                  |       I |j                  di       }|| j
                  |j                  dd      d	}t        ||
      S )Nchoicesr:   finish_reason)rg   )r:   generation_infousagesystem_fingerprintr(   )token_usagerM   rj   )generations
llm_output)rB   r   dictr@   appendrM   r    )ra   responserl   choicer:   genrk   rm   s           r<   _create_chat_resultzChatWriter._create_chat_result   s    y) 	$F.vi/@AG  $6::o3N OC s#	$ ll7B/&//"*,,/CR"H

 kjIIrC   c                    | j                   | j                  | j                  | j                  d| j                  }|r||d<   | j
                  | j
                  |d<   |D cg c]  }t        |       }}||fS c c}w )N)rJ   rO   r[   streamstopr\   )rM   rO   r[   rX   rR   r\   r=   )ra   messagesrv   paramsmmessage_dictss         r<   _convert_messages_to_dictsz%ChatWriter._convert_messages_to_dicts   s     __++nn	

 
 !F6N??&#'??F< >FG1!4GGf$$ Hs   "A:c              +  z  K   | j                  ||      \  }}i ||ddi} | j                  j                  j                  dd|i|}|D ]k  }|d   d   j                  d      }	|	r|	j                  d      s.t	        d|	d   d	      }t        |
      }|r|j                  |j                         | m y wNru   Trw   rf   r   deltar+   r-   r)   )r:   r_   )r{   rH   chatr@   rB   r   on_llm_new_tokentext
ra   rw   rv   run_managerkwargsrz   rx   rp   chunkr~   s
             r<   _streamzChatWriter._stream   s      !% ? ?$ Ov5F5f5h5(4;;##((J-J6J 	E)$Q'++G4E		) 4,$y1ABE (6E,,UZZ8K	s   B9B;c                 K   | j                  ||      \  }}i ||ddi} | j                  j                  j                  dd|i| d {   }|2 3 d {   }|d   d   j                  d      }	|	r|	j                  d      s4t	        d|	d   d	      }t        |
      }|r#|j                  |j                         d {    | |7 7 y7 6 y wr}   )r{   rI   r   r@   rB   r   r   r   r   s
             r<   _astreamzChatWriter._astream   s      !% ? ?$ Ov5F5f5h54**//44VmVvVV# 	 	%)$Q'++G4E		) 4,$y1ABE (6E!225::>>>K W	 ? $sI   ACCCCCCA)CCCCCCc                    | j                   rt         | j                  |||fi |      S | j                  ||      \  }}i ||} | j                  j
                  j
                  dd|i|}| j                  |      S Nrw   r_   )rX   r   r   r{   rH   r   rs   ra   rw   rv   r   r   rz   rx   rp   s           r<   	_generatezChatWriter._generate   s     >>'Xt[CFC  !% ? ?$ Ov%F%f%(4;;##((J-J6J''11rC   c                .  K   | j                   r&t         | j                  |||fi |       d {   S | j                  ||      \  }}i ||} | j                  j
                  j
                  dd|i| d {   }| j                  |      S 7 `7 wr   )rX   r   r   r{   rI   r   rs   r   s           r<   
_ageneratezChatWriter._agenerate  s      >>.hkDVD   !% ? ?$ Ov%F%f%4**//44VmVvVV''11 Ws"   .BBA
B;B<BBc                    | j                   | j                  | j                  | j                  | j                  d| j
                  S )z2Get the default parameters for calling Writer API.)rJ   rO   ru   r[   r\   )rM   rO   rX   r[   r\   rR   r`   s    r<   _default_paramszChatWriter._default_params  sC     __++nn//
 
 	
rC   )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noner/   r0   )r3   r/   r   toolsr_   )r"   superbind)ra   r   r   r   r6   formatted_tools	__class__s         r<   
bind_toolszChatWriter.bind_tools#  si    " EJJD1$7JJ "22 (v{6KL =! w|</<V<< Ks   =)returnrL   )r   rQ   )rp   zMapping[str, Any]r   r    )N)rw   List[BaseMessage]rv   Optional[List[str]]r   z+Tuple[List[Dict[str, Any]], Dict[str, Any]])NN)
rw   r   rv   r   r   "Optional[CallbackManagerForLLMRun]r   r   r   zIterator[ChatGenerationChunk])
rw   r   rv   r   r   'Optional[AsyncCallbackManagerForLLMRun]r   r   r   z"AsyncIterator[ChatGenerationChunk])
rw   r   rv   r   r   r   r   r   r   r    )
rw   r   rv   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%   rH   __annotations__rI   rM   rO   rn   rR   rT   rV   rX   r[   r\   r$   model_configpropertyrb   rd   rs   r{   r   r   r   r   r   r   __classcell__)r   s   @r<   rE   rE   j   sH    d3FC3dD9L#9O7CJCK+#(#>L.>V*/I*NN'N%*4z%JO]J$It/AsJA $J$/t4L  
 
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= =rC   rE   )r:   r   r   rn   )rA   rQ   r   r   )6r   
__future__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   r   r   langchain_core.messagesr   r   r   r   r   r   r   langchain_core.outputsr   r   r    langchain_core.runnablesr!   %langchain_core.utils.function_callingr"   pydanticr#   r$   r%   r&   	getLoggerr   loggerr=   rB   rE   r_   rC   r<   <module>r      s     "      > 
   S R - H < <			8	$B70S= S=rC   