
    7|h                         d Z ddlZddlmZmZmZm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mZ dd	lmZmZmZ dd
lmZ  ej2                  e      Z e
ddd       G d de             Zy)z,Wrapper around Together AI's Completion API.    N)AnyDictListOptional)ClientSession)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLMconvert_to_secret_strget_from_dict_or_env)
ConfigDict	SecretStrmodel_validator)Requestsz0.0.12z1.0zlangchain_together.Together)sinceremovalalternative_importc                      e Zd ZU dZdZeed<   	 eed<   	 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d<   	 dZe	e   ed<   	  ed      Z ed      ededefd              Zedefd       ZdedefdZedefd       Zedeeef   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#y) TogetheraL  LLM models from `Together`.

    To use, you'll need an API key which you can find here:
    https://api.together.xyz/settings/api-keys. This can be passed in as init param
    ``together_api_key`` or set as environment variable ``TOGETHER_API_KEY``.

    Together AI API reference: https://docs.together.ai/reference/inference
    z"https://api.together.xyz/inferencebase_urltogether_api_keymodelNtemperaturetop_ptop_k
max_tokensrepetition_penaltylogprobsforbid)extrabefore)modevaluesreturnc                 8    t        t        |dd            |d<   |S )z,Validate that api key exists in environment.r   TOGETHER_API_KEYr   )clsr%   s     `/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/together.pyvalidate_environmentzTogether.validate_environmentI   s)     &; );=OP&
!"     c                      y)zReturn type of model.together selfs    r*   	_llm_typezTogether._llm_typeR   s     r,   outputc                     |d   d   d   d   S )Nr3   choicesr   textr/   )r1   r3   s     r*   _format_outputzTogether._format_outputW   s    h	*1-f55r,   c                      ddl m}  d|  S )Nr   __version__z
langchain/)langchain_communityr:   r9   s    r*   get_user_agentzTogether.get_user_agentZ   s    3K=))r,   c                     | j                   | j                  | j                  | j                  | j                  | j
                  dS )Nr   r   r   r   r   r   r>   r0   s    r*   default_paramszTogether.default_params`   s<     ZZ++ZZZZ//"&"9"9
 	
r,   promptstoprun_managerkwargsc                    d| j                   j                          dd}|rt        |      dk(  r|d   n|}i | j                  ||d|}|j	                         D 	ci c]  \  }}	|		||	 }}}	t        |      }
|
j                  | j                  |      }|j                  d	k\  rt        d
|j                         |j                  dk\  rt        d|j                         |j                  dk7  r%t        d|j                   d|j                         |j                         }|j                  d      dk7  r|j                  dd      }t        |      | j                  |      }|S c c}	}w )zCall out to Together's text generation endpoint.

        Args:
            prompt: The prompt to pass into the model.

        Returns:
            The string generated by the model..
        Bearer application/jsonAuthorizationzContent-Type   r   r@   rA   )headers)urldata  Together Server: Error   &Together received an invalid payload:    5Together returned an unexpected response with status : statusfinishederrorUndefined Error)r   get_secret_valuelenr?   itemsr   postr   status_code	Exception
ValueErrorr6   jsongetr7   )r1   r@   rA   rB   rC   rK   stop_to_usepayloadkvrequestresponserM   err_msgr3   s                  r*   _callzTogether._callk   s   "  't'<'<'M'M'O&PQ.
 "&#d)q.d1gd#
!!#
#
 	#
 %,MMOEDAqq}1a4EE7+<<DMM<@3&5h6J6J5KLMM!!S(Ehmm_UVV!!S(G''(8==/; 
 }}88H+hhw(9:GG$$$$T*+ Fs    
E2+E2c                   K   d| j                   j                          dd}|rt        |      dk(  r|d   n|}i | j                  ||d|}|j	                         D 	ci c]  \  }}	|		||	 }}}	t               4 d{   }
|
j                  | j                  ||      4 d{   }|j                  d	k\  rt        d
|j                         |j                  dk\  rt        d|j                         |j                  dk7  r%t        d|j                   d|j                         |j                          d{   }|j                  d      dk7  r|j                  dd      }t        |      | j                  |      }|cddd      d{    cddd      d{    S c c}	}w 7 27 7 v7 $7 # 1 d{  7  sw Y   nxY wddd      d{  7   y# 1 d{  7  sw Y   yxY ww)zCall Together model to get predictions based on the prompt.

        Args:
            prompt: The prompt to pass into the model.

        Returns:
            The string generated by the model.
        rE   rF   rG   rI   r   rJ   N)r`   rK   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   )r   rY   rZ   r?   r[   r   r\   r   rU   r^   r_   r6   r`   ra   r7   )r1   r@   rA   rB   rC   rK   rb   rc   rd   re   sessionrg   response_jsonrh   r3   s                  r*   _acallzTogether._acall   s       't'<'<'M'M'O&PQ.
 "&#d)q.d1gd#
!!#
#
 	#
 %,MMOEDAqq}1a4EE ? 	 	g||GW $   ??c)#&=hoo=N$OPP__+$@P  __+#O#??+2hmm_> 
 '/mmo 5 $$X.*<+//9JKG#G,,,,];-  	 	 	 F	 !6	  	 	 	 	 	s   A G="
F/-F/2G=F5G=#G(*F8+G(.BGF;AGG(F=G(G=)F?*G=8G(;G=G(?G=G	G
G	G(G=!G$"G=(G:.G1/G:6G=)NN)$__name__
__module____qualname____doc__r   str__annotations__r   r   r   floatr   r   intr   r   r    r   model_configr   classmethodr   r   r+   propertyr2   dictr7   staticmethodr<   r?   r   r
   ri   r	   rm   r/   r,   r*   r   r      s    9Hc8!VJ $(K%'!E8E?!  E8C= !%J$3*.. #Hhsm" L (#$ 3   $ 3  6T 6c 6 *C * *
 
S#X 
 
 %):>	22 tCy!2 67	2
 2 
2n %)?C	44 tCy!4 ;<	4
 4 
4r,   r   )rq   loggingtypingr   r   r   r   aiohttpr   langchain_core._api.deprecationr   langchain_core.callbacksr	   r
   #langchain_core.language_models.llmsr   langchain_core.utilsr   r   pydanticr   r   r   &langchain_community.utilities.requestsr   	getLoggerrn   loggerr   r/   r,   r*   <module>r      sj    2  , , ! 6 4 L ; ; ;			8	$ 
E6S{s {{r,   