U
    h                     @   sl   d dl mZmZmZmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZ G dd de
ZdS )	    )AnyDictListMappingOptionalN)CallbackManagerForLLMRun)LLM)get_from_dict_or_envpre_init)enforce_stop_tokensc                   @   sz  e Zd ZU dZdZee 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d	< dZee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d< dZee
 ed< dZee ed< dZee ed< G dd dZeeed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"d"eeee  ee# eedd d!Z$dS )#WriteraX  Writer large language models.

    To use, you should have the environment variable ``WRITER_API_KEY`` and
    ``WRITER_ORG_ID`` set with your API key and organization ID respectively.

    Example:
        .. code-block:: python

            from langchain_community.llms import Writer
            writer = Writer(model_id="palmyra-base")
    Nwriter_org_idzpalmyra-instructmodel_id
min_tokens
max_tokenstemperaturetop_pstoppresence_penaltyrepetition_penaltybest_ofFlogprobsnwriter_api_keybase_urlc                   @   s   e Zd ZdZdS )zWriter.ConfigZforbidN)__name__
__module____qualname__extra r   r   C/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/llms/writer.pyConfigB   s   r!   )valuesreturnc                 C   s,   t |dd}||d< t |dd}||d< |S )z?Validate that api key and organization id exist in environment.r   ZWRITER_API_KEYr   ZWRITER_ORG_ID)r	   )clsr"   r   r   r   r   r    validate_environmentE   s      zWriter.validate_environment)r#   c                 C   s.   | j | j| j| j| j| j| j| j| j| j	d
S )z2Get the default parameters for calling Writer API.)
Z	minTokensZ	maxTokensr   ZtopPr   ZpresencePenaltyZrepetitionPenaltyZbestOfr   r   )
r   r   r   r   r   r   r   r   r   r   selfr   r   r    _default_paramsS   s    zWriter._default_paramsc                 C   s   | j | jd| jS )zGet the identifying parameters.)r   r   )r   r   r(   r&   r   r   r    _identifying_paramsc   s    zWriter._identifying_paramsc                 C   s   dS )zReturn type of llm.writerr   r&   r   r   r    	_llm_typek   s    zWriter._llm_type)promptr   run_managerkwargsr#   c           	      K   sr   | j dk	r| j }nd| j d| j d}| j|}tj|| j dddd|i|d}|j}|dk	rnt||}|S )	ak  Call out to Writer's completions endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = Writer("Tell me a joke.")
        Nz3https://enterprise-api.writer.com/llm/organization/z/model/z/completionszapplication/json)AuthorizationzContent-TypeAcceptr,   )urlheadersjson)	r   r   r   r(   requestspostr   textr   )	r'   r,   r   r-   r.   r   paramsresponser6   r   r   r    _callp   s"    


	
zWriter._call)NN)%r   r   r   __doc__r   r   str__annotations__r   r   intr   r   floatr   r   r   r   r   r   r   boolr   r   r   r!   r
   r   r%   propertyr   r   r(   r)   r+   r   r9   r   r   r   r    r      sB   
  
r   )typingr   r   r   r   r   r4   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.utilsr	   r
   Zlangchain_community.llms.utilsr   r   r   r   r   r    <module>   s   