
    7|h                         d dl 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 d dlmZmZmZmZ  G d de      Zy	)
    )AnyAsyncIteratorDictIteratorListMappingOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)get_from_dict_or_env)
ConfigDictField	SecretStrmodel_validatorc                      e Zd ZU dZ edd      Zeed<    edd      Zeed<    ed      Z	e
e   ed<   	  ed	d
      Zeed<   	 dZe
e   ed<   	 dZe
e   ed<   	 dZe
e   ed<   	 dZe
ee      ed<   	 dZe
e   ed<   	  ee      Zeeef   ed<   	  ed      Zedeeef   fd       Zedeeef   fd       Zedefd       Z e d      e!dedefd              Z"	 	 d%dede
ee      de
e#   d edef
d!Z$	 	 d%dede
e%e      de
e&   d edef
d"Z'	 	 d%dede
e%e      de
e#   d ede(e)   f
d#Z*	 	 d%dede
e%e      de
e&   d ede+e)   f
d$Z,y)&Writera  Writer large language models.

    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.llms import Writer as WriterLLM
            from writerai import Writer, AsyncWriter

            client = Writer()
            async_client = AsyncWriter()

            chat = WriterLLM(
                client=client,
                async_client=async_client
            )
    NT)defaultexcludeclientasync_client)r   api_keyzpalmyra-x-003-instructmodel)r   alias
model_name
max_tokensgffffff?temperaturetop_pstopbest_of)default_factorymodel_kwargs)populate_by_namereturnc                     | j                   | j                  | j                  | j                  | j                  d| j
                  S )z2Get the default parameters for calling Writer API.)r   r   r   r    r!   )r   r   r   r    r!   r#   selfs    ^/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/writer.py_default_paramszWriter._default_paramsF   sC     //++ZZII||
 
 	
    c                 6    d| j                   i| j                  S )zGet the identifying parameters.r   )r   r*   r'   s    r)   _identifying_paramszWriter._identifying_paramsR   s%     T__
""
 	
r+   c                      y)zReturn type of llm.writer r'   s    r)   	_llm_typezWriter._llm_typeZ   s     r+   before)modevaluesc           
         	 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)	writerair6   r7   ImportErrorgetupdater   type
ValueError)clsr4   r6   r7   es        r)   validate_environmentzWriter.validate_environment_   s    	4 zz(#MMf 4"I/?! zz.)MM"K 4"I/?!% H%&&0VZZ/0K?Y 
 K  	A 	s   B; ;	CCCpromptrun_managerkwargsc                     i | j                   |}||j                  d|i        | j                  j                  j                  dd|i|j
                  d   j                  }|S Nr    rB   r   r0   )r-   r<   r   completionscreatechoicestext)r(   rB   r    rC   rD   paramsrJ   s          r)   _callzWriter._call   si     8D,,77MM64.)-t{{&&--FVFvFNNqQVVr+   c                    K   i | j                   |}||j                  d|i        | j                  j                  j                  dd|i| d {   }|j
                  d   j                  }|S 7 wrF   )r-   r<   r   rG   rH   rI   rJ   )r(   rB   r    rC   rD   rK   responserJ   s           r)   _acallzWriter._acall   s}      8D,,77MM64.)=**66==VVVvVV"'' Ws   AA5A3 A5c              +   &  K   i | j                   |ddi}||j                  d|i        | j                  j                  j                  dd|i|}|D ]7  }|r|j                  |j                         t        |j                         9 y wNstreamTr    rB   )rJ   r0   )r-   r<   r   rG   rH   on_llm_new_tokenvaluer   r(   rB   r    rC   rD   rK   rN   chunks           r)   _streamzWriter._stream   s      HD,,GG$GMM64.)14;;**11JJ6J 	4E,,U[[9!u{{33	4s   BBc                `  K   i | j                   |ddi}||j                  d|i        | j                  j                  j                  dd|i| d {   }|2 3 d {   }|r#|j                  |j                         d {    t        |j                         H7 N7 E7 "6 y wrQ   )r-   r<   r   rG   rH   rS   rT   r   rU   s           r)   _astreamzWriter._astream   s      HD,,GG$GMM64.)=**66==VVVvVV# 	4 	4%!225;;???!u{{33	 W	4? $sH   AB.B&B.B,"B(#B,&!B.B*B.(B,*B.,B.)NN)-__name__
__module____qualname____doc__r   r   r   __annotations__r   r   r	   r   r   strr   intr   floatr   r    r   r!   dictr#   r   r   model_configpropertyr   r*   r-   r1   r   classmethodrA   r   rL   listr
   rO   r   r   rW   r   rY   r0   r+   r)   r   r      s   ( d3FC3dD9L#9#(#6GXi 6$<GLJL $J$S#&K%&M "E8E?!: !%D(49
$2 "GXc]! $)#>L$sCx.>Vt4L	
c!2 	
 	
 
WS#X%6 
 
 3   (#)$ )3 )  $)\ %):>	 tCy! 67	
  
  %)?C	 tCy! ;<	
  
" %):>	44 tCy!4 67	4
 4 
/	"4& %)?C	44 tCy!4 ;<	4
 4 
	'4r+   r   N)typingr   r   r   r   r   r   r	   langchain_core.callbacksr
   r   #langchain_core.language_models.llmsr   langchain_core.outputsr   langchain_core.utilsr   pydanticr   r   r   r   r   r0   r+   r)   <module>rm      s2    N N N 4 2 5 B Bx4S x4r+   