o
    Zh                     @   s   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 deZd	S )
    )AnyAsyncIteratorDictIteratorListMappingOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)get_from_dict_or_env)
ConfigDictField	SecretStrmodel_validatorc                   @   s  e Zd ZU dZedddZeed< edddZeed< eddZ	e
e ed< 	 ed	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dZeeef ed< 	 eddZedeeef fddZedeeef fddZedefddZe dde!dedefd d!Z"		d-d"ede
ee  d#e
e# d$edef
d%d&Z$		d-d"ede
e%e  d#e
e& d$edef
d'd(Z'		d-d"ede
e%e  d#e
e# d$ede(e) f
d)d*Z*		d-d"ede
e%e  d#e
e& d$ede+e) f
d+d,Z,dS ).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)Zpopulate_by_namereturnc                 C   s    | 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!   self r%   V/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/writer.py_default_paramsF   s   zWriter._default_paramsc                 C   s   d| j i| jS )zGet the identifying parameters.r   )r   r'   r#   r%   r%   r&   _identifying_paramsR   s   zWriter._identifying_paramsc                 C   s   dS )zReturn type of llm.writerr%   r#   r%   r%   r&   	_llm_typeZ   s   zWriter._llm_typebefore)modevaluesc              
   C   s   z
ddl m}m} W n ty } ztd|d}~ww |ds/|d|t|dddi |d	sB|d	|t|dddi t|d|u rTt|d	|u sXt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   r   ZWRITER_API_KEY)r   r   zx'client' attribute must be with type 'Client' and 'async_client' must be with type 'AsyncClient' from 'writerai' package)	Zwriterair.   r/   ImportErrorgetupdater   type
ValueError)clsr-   r.   r/   er%   r%   r&   validate_environment_   sD   


zWriter.validate_environmentpromptrun_managerkwargsc                 K   sH   i | j |}|d ur|d|i | jjjdd|i|jd j}|S Nr   r8   r   r%   )r(   r2   r   completionscreatechoicestext)r$   r8   r   r9   r:   paramsr?   r%   r%   r&   _call   s
    zWriter._callc                    sT   i | j |}|d ur|d|i | jjjdd|i|I d H }|jd j}|S r;   )r(   r2   r   r<   r=   r>   r?   )r$   r8   r   r9   r:   r@   responser?   r%   r%   r&   _acall   s   zWriter._acallc                 k   sr    i | j |ddi}|d ur|d|i | jjjdd|i|}|D ]}|r/||j t|jdV  q%d S NstreamTr   r8   )r?   r%   )r(   r2   r   r<   r=   on_llm_new_tokenvaluer   r$   r8   r   r9   r:   r@   rB   chunkr%   r%   r&   _stream   s   zWriter._streamc                 K  s   i | j |ddi}|d ur|d|i | jjjdd|i|I d H }|2 z3 d H W }|r9||jI d H  t|jdV  q(6 d S rD   )r(   r2   r   r<   r=   rF   rG   r   rH   r%   r%   r&   _astream   s   zWriter._astream)NN)-__name__
__module____qualname____doc__r   r   r   __annotations__r   r   r   r   r   strr   intr   floatr   r   r   r   dictr!   r   r   Zmodel_configpropertyr   r'   r(   r*   r   classmethodr7   r
   rA   listr	   rC   r   r   rJ   r   rK   r%   r%   r%   r&   r      s   
 
.






r   N)typingr   r   r   r   r   r   r   Zlangchain_core.callbacksr	   r
   Z#langchain_core.language_models.llmsr   Zlangchain_core.outputsr   Zlangchain_core.utilsr   Zpydanticr   r   r   r   r   r%   r%   r%   r&   <module>   s   $ 