
    Ig&                     ~    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 d dlmZ  G d d	e
      Zy)
    )AnyDictListMappingOptionalN)CallbackManagerForLLMRun)LLM)get_from_dict_or_envpre_init)
ConfigDict)enforce_stop_tokensc                      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<   	  ed      Zededef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#	 	 dded
eee      dee$   de def
dZ%y) 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_urlforbid)extravaluesreturnc                 N    t        |dd      }||d<   t        |dd      }||d<   |S )z?Validate that api key and organization id exist in environment.r   WRITER_API_KEYr   WRITER_ORG_ID)r
   )clsr    r   r   s       \/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/llms/writer.pyvalidate_environmentzWriter.validate_environmentG   sA     .$&6
 $2 ,V_oV"/    c                     | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  d
S )z2Get the default parameters for calling Writer API.)
	minTokens	maxTokensr   topPr   presencePenaltyrepetitionPenaltybestOfr   r   )
r   r   r   r   r   r   r   r   r   r   selfs    r&   _default_paramszWriter._default_paramsU   sZ     ++JJII#44!%!8!8ll
 	
r(   c                 P    i | j                   | j                  d| j                  S )zGet the identifying parameters.)r   r   )r   r   r2   r0   s    r&   _identifying_paramszWriter._identifying_paramse   s1    
==4;M;MN
""
 	
r(   c                      y)zReturn type of llm.writer r0   s    r&   	_llm_typezWriter._llm_typem   s     r(   promptrun_managerkwargsc                    | j                   | j                   }nd| j                   d| j                   d}i | j                  |}t	        j
                  || j                   dddd|i|      }|j                  }|t        ||      }|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.")
        z3https://enterprise-api.writer.com/llm/organization/z/model/z/completionszapplication/json)AuthorizationzContent-TypeAcceptr9   )urlheadersjson)	r   r   r   r2   requestspostr   textr   )	r1   r9   r   r:   r;   r   paramsresponserD   s	            r&   _callzWriter._callr   s    * ==$}}H!!%!3!3 4$--6 
 4D((3F3==$($7$7#8 2,
 F-f-
 }} 'tT2Dr(   )NN)&__name__
__module____qualname____doc__r   r   str__annotations__r   r   intr   r   floatr   r   r   r   r   r   r   boolr   r   r   r   model_configr   r   r'   propertyr   r   r2   r4   r8   r   rG   r7   r(   r&   r   r      s   
 $(M8C='!&Hc& $J$/ $J$/#'K%'+!E8E?!D $D(49
$9(,huo,<*..;!GXc]!MHd.Ax}+$(NHSM("Hhsm"?L $ 4   
c!2 
 
 
WS#X%6 
 
 3   %):>	,, tCy!, 67	,
 , 
,r(   r   )typingr   r   r   r   r   rB   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.utilsr
   r   pydanticr   langchain_community.llms.utilsr   r   r7   r(   r&   <module>rY      s+    5 5  = 3 ?  >RS Rr(   