o
    ưiy                     @   s   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 deZdS )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                       sF  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dZedee fddZe fddZd)dee dee fddZdee dee deee ee f fddZ		d)dede j!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&d'Z(  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                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S )Nself)localscopyitemssetattr	__class__)r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zlocals_keyvalue r%   `/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/lemonade/chat/transformation.py__init__"   s   
zLemonadeChatConfig.__init__c                 C   s   dS )Nlemonader%   )r   r%   r%   r&   custom_llm_provider7   s   z&LemonadeChatConfig.custom_llm_providerc                    s
   t   S )N)super
get_config)clsr"   r%   r&   r+   ;   s   
zLemonadeChatConfig.get_configapi_keyapi_basec              
   C   s   | j ||d\}}|du rtdztjj| dd}W n ty0 } ztd| d}~ww |jdkrBtd|j d	|j | d
g }dd |D S )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/"
        )r/   r.   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: datac                 S   s   g | ]}d |d  qS )	lemonade/idr%   ).0modelr%   r%   r&   
<listcomp>e   s    z1LemonadeChatConfig.get_models.<locals>.<listcomp>)	$_get_openai_compatible_provider_info
ValueErrorlitellmZmodule_level_clientget	Exceptionstatus_codetextjson)r   r.   r/   responseeZ
model_listr%   r%   r&   
get_models?   s.   


zLemonadeChatConfig.get_modelsc                 C   s   |pt dpd}d}||fS )NZLEMONADE_API_BASEzhttp://localhost:8000/api/v1r(   r   )r   r/   r.   r#   r%   r%   r&   r8   g   s   z7LemonadeChatConfig._get_openai_compatible_provider_infor6   raw_responsemodel_responselogging_objrequest_datamessagesoptional_paramslitellm_paramsencoding	json_modec                    s6   t  j|||||||	||||
d}t|dd|  |S )N)r6   rD   rC   rG   rE   rF   rJ   rH   rK   rI   r.   r6   r3   )r*   transform_responser!   )r   r6   rC   rD   rE   rF   rG   rH   rI   rJ   r.   rK   r-   r%   r&   rL   u   s   z%LemonadeChatConfig.transform_response)NNNNNNNNNNNNN)NN)*__name__
__module____qualname__r   r   float__annotations__r   listr   dictr   intr   r   r   r   r   strr   r   r   r   r   r'   propertyr)   classmethodr+   rB   r   r8   httpxResponser   LiteLLMLoggingObjr   r
   r   boolrL   __classcell__r%   r%   r-   r&   r      s   
 	

(
	
r   )__doc__typingr   r   r   r   r   rX   r:   Z*litellm.litellm_core_utils.litellm_loggingr   rZ   Zlitellm.secret_managers.mainr	   Zlitellm.types.llms.openair
   Zlitellm.types.utilsr   Zopenai_like.chat.transformationr   r   r%   r%   r%   r&   <module>   s    