
    iP                         d Z ddlmZmZmZmZmZ ddlZddlZddl	m
Z ddlmZ ddlmZ ddlmZ dd	lmZ  G d
 de      Zy)zU
Translate from OpenAI's `/v1/chat/completions` to Lemonade's `/v1/chat/completions`
    )AnyListOptionalTupleUnionN)Loggingget_secret_str)AllMessageValues)ModelResponse   )OpenAILikeChatConfigc                       e Zd ZU 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<   dZee   ed<   dZeeeef      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"dee   dee   dee
   dee   dee   dee   dee   d	eeeef      d
ee   dee   dee   dee
   dee   ddfdZedee   fd       Ze fd       Zd#dee   dee   fdZdee   dee   deee   ee   f   fdZ	 	 d#dede jB                  de"de#de
de$e%   de
de
de&dee   d ee'   de"f fd!Z( xZ)S )$LemonadeChatConfigNrepeat_penalty	functions
logit_bias
max_tokensmax_completion_tokensnpresence_penaltystoptemperaturetop_ptop_kresponse_formattoolsreturnc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)r    r   r   r   r   r   r   r   r   r   r   r   r   r   locals_keyvalues                    z/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/lemonade/chat/transformation.py__init__zLemonadeChatConfig.__init__"   sA      (--/!--/JCf}!2U3 *    c                      y)Nlemonade )r    s    r)   custom_llm_providerz&LemonadeChatConfig.custom_llm_provider7   s    r+   c                      t         |          S )N)super
get_config)clsr%   s    r)   r2   zLemonadeChatConfig.get_config;   s    w!##r+   api_keyapi_basec                    | j                  ||      \  }}|t        d      	 t        j                  j	                  | d      }|j                  dk7  r%t        d|j                   d	|j                         |j                         j	                  d
g       }|D cg c]
  }d|d   z    c}S # t
        $ r}t        d|       d}~ww xY wc c}w )a  
        Get available models from Lemonade API.

        This method queries the Lemonade /models endpoint to retrieve the list of available models.

        Args:
            api_key: Optional API key (Lemonade doesn't require authentication)
            api_base: Optional API base URL (defaults to LEMONADE_API_BASE env var or http://localhost:8000)

        Returns:
            List of model names prefixed with "lemonade/"
        )r5   r4   NzgLEMONADE_API_BASE is not set. Please set the environment variable to query Lemonade's /models endpoint.z/models)urlzqFailed to fetch models from Lemonade. Set Lemonade API Base via `LEMONADE_API_BASE` environment variable. Error:    z3Failed to fetch models from Lemonade. Status code: z, Response: data	lemonade/id)	$_get_openai_compatible_provider_info
ValueErrorlitellmmodule_level_clientget	Exceptionstatus_codetextjson)r    r4   r5   responsee
model_listmodels          r)   
get_modelszLemonadeChatConfig.get_models?   s    !EEw F 
' y 
	2266j( 7 H 3&EhFZFZE[[ghphuhugvw  ]]_((4
7ABzeeDk)zBB  	 D  EF  DG  H 	 Cs   #B2  C2	C;C		Cc                 4    |xs t        d      xs d}d}||fS )NLEMONADE_API_BASEzhttp://localhost:8000/api/v1r-   r	   )r    r5   r4   r'   s       r)   r<   z7LemonadeChatConfig._get_openai_compatible_provider_infog   s3    
  .12.- 	 }r+   rH   raw_responsemodel_responselogging_objrequest_datamessagesoptional_paramslitellm_paramsencoding	json_modec                 \    t         |   |||||||	||||
      }t        |dd|z          |S )N)rH   rM   rL   rP   rN   rO   rS   rQ   rT   rR   r4   rH   r:   )r1   transform_responser$   )r    rH   rL   rM   rN   rO   rP   rQ   rR   rS   r4   rT   r%   s               r)   rV   z%LemonadeChatConfig.transform_responset   sS     3)%#%+) 4 
 	u)<=r+   )NNNNNNNNNNNNN)NN)*__name__
__module____qualname__r   r   float__annotations__r   listr   dictr   intr   r   r   r   r   strr   r   r   r   r   r*   propertyr/   classmethodr2   rI   r   r<   httpxResponser   LiteLLMLoggingObjr   r   r   boolrV   __classcell__)r%   s   @r)   r   r      s   &*NHUO* $Ix~$!%J% $J$+/8C=/Ax}&*hsm*'+D(5d#
$+!%K#%E8C=E8C=&*OXd^* E8D>  +/$(%)/3$(*.+/%)##*. $4 4 D>4 TN	4
  (}4 SM4 C=4 #3-4 uS$Y'(4 c]4 }4 }4 "$4 ~4 
4* Xc]   $ $&C(3- &C(3- &CP 08	x}hsm+	,0 "&$( nn &	
 '  '(    # D> 
 r+   r   )__doc__typingr   r   r   r   r   rb   r>   *litellm.litellm_core_utils.litellm_loggingr   rd   litellm.secret_managers.mainr
   litellm.types.llms.openair   litellm.types.utilsr   openai_like.chat.transformationr   r   r.   r+   r)   <module>rn      s:    5 4   S 7 . C@- @r+   