a
    bg                     @   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eeef dddZeeeef dddZeedddZe dde!eedd d!Z"d+ee
ee  e
e# eed"d#d$Z$d,ee
e%e  e
e& eed"d%d&Z'd-ee
e%e  e
e# ee(e) d"d'd(Z*d.ee
e%e  e
e& ee+e) d"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%   m/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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)valuesr"   c              
   C   s   zddl m}m} W n. tyB } ztd|W Y d}~n
d}~0 0 |dsj|d|t|dddi |d	s|d	|t|dddi t|d|u rt|d	|u st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)promptr   run_managerkwargsr"   c                 K   sH   i | j |}|d ur$|d|i | jjjf d|i|jd j}|S Nr   r8   r   )r(   r2   r   completionscreatechoicestext)r$   r8   r   r9   r:   paramsr?   r%   r%   r&   _call   s
     zWriter._callc                    sR   i | j |}|d ur$|d|i | jjjf 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   sp   i | j |ddi}|d ur,|d|i | jjjf d|i|}|D ]"}|r\||j t|jdV  qHd S NstreamTr   r8   )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f d|i|I d H }|2 z03 d H W }|rp||jI d H  t|jdV  qN6 d S rD   )r(   r2   r   r<   r=   rF   rG   r   rH   r%   r%   r&   _astream   s    zWriter._astream)NN)NN)NN)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      sr   

.  
  
  
  
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   $