o
    ưi                     @   sX   d dl mZmZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ G dd deZdS )    )ListLiteralOptionalN)BaseLLMModelInfoBaseTokenCounter)get_secret_str)AllMessageValuesc                   @   sP  e Zd ZdZd#dee fddZededed fdd	Z	ed#d
ee dee fddZ
ed#dee dee fddZed#dee dee fddZdee fddZ	d$dee d
ee dee fddZededefddZededefddZedefddZ		d$dededee ded edee d
ee defd!d"ZdS )%AzureFoundryModelInfoz/Model info for Azure AI / Azure Foundry models.Nmodelc                 C   s
   || _ d S N)_model)selfr
    r   Y/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/azure_ai/common_utils.py__init__   s   
zAzureFoundryModelInfo.__init__return)agentsmodel_routerdefaultc                 C   s<   d| v rdS |   }d|v sd|v sd|v sd|v rdS dS )aa  
        Get the Azure AI route for the given model.

        Similar to BedrockModelInfo.get_bedrock_route().
        
        Supported routes:
        - agents: azure_ai/agents/<agent_id>
        - model_router: azure_ai/model_router/<actual-model-name> or models with "model-router"/"model_router" in name
        - default: standard models
        zagents/r   model_router/model-router/zmodel-routerr   r   )lower)r
   Zmodel_lowerr   r   r   get_azure_ai_route   s   z(AzureFoundryModelInfo.get_azure_ai_routeapi_basec                 C   s   | pt jptdS )NZAZURE_AI_API_BASE)litellmr   r   )r   r   r   r   get_api_base(   s   z"AzureFoundryModelInfo.get_api_baseapi_keyc                 C   s   | pt jpt jptdS )NZAZURE_AI_API_KEY)r   r   Z
openai_keyr   )r   r   r   r   get_api_key,   s   z!AzureFoundryModelInfo.get_api_keyapi_versionc                 C   s   |pt jptd}|S )NZAZURE_API_VERSION)r   r   r   )r   r   r   r   r   r   5   s   z!AzureFoundryModelInfo.api_versionc                 C   s*   | j rd| j  v rddlm} | S dS )z
        Factory method to create a token counter for Azure AI.

        Returns:
            AzureAIAnthropicTokenCounter for Claude models, None otherwise.
        clauder   )AzureAIAnthropicTokenCounterN)r   r   Z:litellm.llms.azure_ai.anthropic.count_tokens.token_counterr    )r   r    r   r   r   get_token_counter<   s   z'AzureFoundryModelInfo.get_token_counterc                 C   s   g S )z
        Returns a list of models supported by Azure AI.
        
        Azure AI doesn't have a standard model listing endpoint,
        so this returns an empty list.
        r   )r   r   r   r   r   r   
get_modelsL   s   	z AzureFoundryModelInfo.get_modelsc                 C   s4   d| v r|  ddd S d| v r|  ddd S | S )at  
        Strip the model_router prefix from model name.
        
        Examples:
        - "model_router/gpt-4o" -> "gpt-4o"
        - "model-router/gpt-4o" -> "gpt-4o"
        - "gpt-4o" -> "gpt-4o"
        
        Args:
            model: Model name potentially with model_router prefix
            
        Returns:
            Model name without the prefix
        r      r   )splitr
   r   r   r   strip_model_router_prefix[   s
   z/AzureFoundryModelInfo.strip_model_router_prefixc                 C   s   t | } | S )z
        Get the base model name, stripping any Azure AI routing prefixes.
        
        Args:
            model: Model name potentially with routing prefixes
            
        Returns:
            Base model name
        )r	   r&   r%   r   r   r   get_base_modelq   s   
z$AzureFoundryModelInfo.get_base_modelc                 C   sT   t | }|dkrddlm} | S d|  v r!ddlm} | S ddlm} | S )a  
        Get the appropriate Azure AI config class for the given model.
        
        Routes to specialized configs based on model type:
        - Model Router: AzureModelRouterConfig
        - Claude models: AzureAnthropicConfig  
        - Default: AzureAIStudioConfig
        
        Args:
            model: The model name
            
        Returns:
            The appropriate config instance
        r   r   )AzureModelRouterConfigr   )AzureAnthropicConfig)AzureAIStudioConfig)	r	   r   Z7litellm.llms.azure_ai.azure_model_router.transformationr(   r   Z.litellm.llms.azure_ai.anthropic.transformationr)   Z)litellm.llms.azure_ai.chat.transformationr*   )r
   Zazure_ai_router(   r)   r*   r   r   r   get_azure_ai_config_for_model   s   
z3AzureFoundryModelInfo.get_azure_ai_config_for_modelheadersmessagesoptional_paramslitellm_paramsc                 C   s   t d)z+Azure Foundry sends api key in query paramsz5Azure Foundry does not support environment validation)NotImplementedError)r   r,   r
   r-   r.   r/   r   r   r   r   r   validate_environment   s   z*AzureFoundryModelInfo.validate_environmentr   )NN)__name__
__module____qualname____doc__r   strr   staticmethodr   r   r   r   propertyr   r   r!   r   r"   r&   r'   r+   dictr   r1   r   r   r   r   r	   	   sZ    
&	r	   )typingr   r   r   r   Z litellm.llms.base_llm.base_utilsr   r   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair   r	   r   r   r   r   <module>   s    