o
    ưi!                     @   s   d dl Z d dlmZmZmZmZ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 d dlmZ G dd deZdS )	    N)	Any	CoroutineListLiteralOptionalTupleUnioncastoverload)MIN_NON_ZERO_TEMPERATURE)OpenAIGPTConfigget_secret_str)AllMessageValuesc                       s  e Zd ZU dZedee fddZ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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ef  e
d< 													d-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eeeef  dee	 dee	 dee dee deeeef  ddfddZe fddZdefddZdededededef
ddZde e! de e! fd d!Z"e#de e! ded"e$d# de%e&e&e e! f fd$d%Z'e#	&d.de e! ded"e$d& de e! fd'd%Z'	&d.de e! ded"edee e! e%e&e&e e! f f f fd(d%Z'd)ee d*ee de(ee ee f fd+d,Z)  Z*S )/DeepInfraConfigz
    Reference: https://deepinfra.com/docs/advanced/openai_api

    The class `DeepInfra` provides configuration for the DeepInfra's Chat Completions API interface. Below are the parameters:
    returnc                 C   s   dS )NZ	deepinfra )selfr   r   a/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/deepinfra/chat/transformation.pycustom_llm_provider   s   z#DeepInfraConfig.custom_llm_providerNfrequency_penaltyfunction_call	functions
logit_bias
max_tokensnpresence_penaltystoptemperaturetop_presponse_formattoolstool_choicec                 C   s>   t   }| D ]\}}|dkr|d urt| j|| q	d S )Nr   )localscopyitemssetattr	__class__)r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zlocals_keyvaluer   r   r   __init__#   s   
zDeepInfraConfig.__init__c                    s
   t   S N)super
get_config)clsr'   r   r   r-   8   s   
zDeepInfraConfig.get_configmodelc                 C   s&   g d}t j|| jdr|d |S )N)streamr   r   r   r   r   max_completion_tokensr   r   r   r   r   r    r!   r"   )r0   r   Zreasoning_effort)litellmZsupports_reasoningr   append)r   r0   supported_openai_paramsr   r   r   get_supported_openai_params<   s   
z+DeepInfraConfig.get_supported_openai_paramsnon_default_paramsoptional_paramsdrop_paramsc                 C   s   | j |d}| D ]K\}}|dkr|dkr|dkrt}|dkr@|dkr?|dkr?tjdu s1|du r4d }q
tjjd	|d
dq
|dkrI||d< q
||v rU|d urU|||< q
|S )N)r0   r   r   z"mistralai/Mistral-7B-Instruct-v0.1r"   autononeTz{Deepinfra doesn't support tool_choice={}. To drop unsupported openai params from the call, set `litellm.drop_params = True`i  )messagestatus_coder2   r   )r6   r%   r   r3   r9   utilsZUnsupportedParamsErrorformat)r   r7   r8   r0   r9   r5   paramr)   r   r   r   map_openai_paramsV   s0   
z!DeepInfraConfig.map_openai_paramsmessagesc                 C   s   |D ]?}| ddkrA| d}t|trAt|dkr:t|d tr:|d  ddkr:d|d v r:|d d |d< qt||d< q|S )a  
        Transform tool message content from array to string format for DeepInfra compatibility.
        
        DeepInfra requires tool message content to be a string, not an array.
        This method converts tool message content from array format to string format.
        
        Example transformation:
        - Input:  {"role": "tool", "content": [{"type": "text", "text": "20"}]}
        - Output: {"role": "tool", "content": "20"}
        
        Or if content is complex:
        - Input:  {"role": "tool", "content": [{"type": "text", "text": "result"}]}
        - Output: {"role": "tool", "content": "[{"type": "text", "text": "result"}]"}
        ZroleZtoolcontent   r   typetext)get
isinstancelistlendictjsondumps)r   rB   r<   rC   r   r   r   _transform_tool_message_contentz   s   

z/DeepInfraConfig._transform_tool_message_contentis_asyncTc                 C      d S r+   r   r   rB   r0   rO   r   r   r   _transform_messages      z#DeepInfraConfig._transform_messagesFc                 C   rP   r+   r   rQ   r   r   r   rR      rS   c                    sB   |r fdd}| S t  j ttd dd}|S )zv
        Transform messages for DeepInfra compatibility.
        Handles both sync and async transformations.
        c                     s6   t tjttd dd} | I d H }|S )NTrB   r0   rO   )r,   r   rR   r	   r   rN   )parent_resultZtransformed_messages)r'   rB   r0   r   r   r   _async_transform   s   


z=DeepInfraConfig._transform_messages.<locals>._async_transformFrT   )r,   rR   r	   r   rN   )r   rB   r0   rO   rV   rU   r/   )rB   r0   r   r   rR      s   
api_baseapi_keyc                 C   s$   |pt dpd}|pt d}||fS )NZDEEPINFRA_API_BASEz#https://api.deepinfra.com/v1/openaiZDEEPINFRA_API_KEYr   )r   rW   rX   Zdynamic_api_keyr   r   r   $_get_openai_compatible_provider_info   s   z4DeepInfraConfig._get_openai_compatible_provider_info)NNNNNNNNNNNNN)F)+__name__
__module____qualname____doc__propertyr   strr   r   int__annotations__r   r   rK   r   rI   r   r   r   r   r   r   r   r    r!   r"   r*   classmethodr-   r6   boolrA   r   r   rN   r
   r   r   r   rR   r   rY   __classcell__r   r   r/   r   r      s   
 	


$$r   )rL   typingr   r   r   r   r   r   r   r	   r
   r3   Zlitellm.constantsr   Z+litellm.llms.openai.chat.gpt_transformationr   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair   r   r   r   r   r   <module>   s    ,