Merge pull request #22625 from BerriAI/litellm_azure_ai_finetune

Fix: Azure ai finetuning api
This commit is contained in:
Sameer Kankute
2026-03-03 19:42:17 +05:30
committed by GitHub
4 changed files with 423 additions and 56 deletions
+55
View File
@@ -34,6 +34,44 @@ vertex_fine_tuning_apis_instance = VertexFineTuningAPI()
#################################################
def _prepare_azure_extra_body(
extra_body: Optional[Dict[str, Any]],
kwargs: Dict[str, Any],
azure_specific_hyperparams: Dict[str, Any],
) -> Dict[str, Any]:
"""
Prepare extra_body for Azure fine-tuning API by combining Azure-specific parameters.
Azure fine-tuning API accepts additional parameters beyond the standard OpenAI spec:
- trainingType: Type of training (e.g., 1 for supervised fine-tuning)
- prompt_loss_weight: Weight for prompt loss in training
These parameters must be passed in the extra_body field when calling the Azure OpenAI SDK.
Args:
extra_body: Optional existing extra_body dict
kwargs: Request kwargs that may contain Azure-specific parameters
azure_specific_hyperparams: Dict of Azure-specific hyperparameters already extracted
Returns:
Dict containing all Azure-specific parameters to be passed in extra_body
"""
if extra_body is None:
extra_body = {}
# Azure-specific root-level parameters
azure_specific_params = ["trainingType"]
for param in azure_specific_params:
if param in kwargs:
extra_body[param] = kwargs[param]
# Add Azure-specific hyperparameters
if azure_specific_hyperparams:
extra_body.update(azure_specific_hyperparams)
return extra_body
@client
async def acreate_fine_tuning_job(
model: str,
@@ -114,6 +152,15 @@ def create_fine_tuning_job(
# handle hyperparameters
hyperparameters = hyperparameters or {} # original hyperparameters
# For Azure, extract Azure-specific hyperparameters before creating OpenAI-spec hyperparameters
azure_specific_hyperparams = {}
if custom_llm_provider == "azure":
azure_hyperparameter_keys = ["prompt_loss_weight"]
for key in azure_hyperparameter_keys:
if key in hyperparameters:
azure_specific_hyperparams[key] = hyperparameters.pop(key)
_oai_hyperparameters: Hyperparameters = Hyperparameters(
**hyperparameters
) # Typed Hyperparameters for OpenAI Spec
@@ -207,6 +254,10 @@ def create_fine_tuning_job(
extra_body.pop("azure_ad_token", None)
else:
get_secret_str("AZURE_AD_TOKEN") # type: ignore
# Prepare Azure-specific parameters for extra_body
extra_body = _prepare_azure_extra_body(extra_body, kwargs, azure_specific_hyperparams)
create_fine_tuning_job_data = FineTuningJobCreate(
model=model,
training_file=training_file,
@@ -220,6 +271,10 @@ def create_fine_tuning_job(
create_fine_tuning_job_data_dict = create_fine_tuning_job_data.model_dump(
exclude_none=True
)
# Add extra_body if it has Azure-specific parameters
if extra_body:
create_fine_tuning_job_data_dict["extra_body"] = extra_body
response = azure_fine_tuning_apis_instance.create_fine_tuning_job(
api_base=api_base,
@@ -846,7 +846,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 2.5e-08,
"cache_creation_input_token_cost": 3.125e-07
},
"anthropic.claude-3-opus-20240229-v1:0": {
"input_cost_per_token": 1.5e-05,
@@ -859,7 +861,9 @@
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 1.5e-06,
"cache_creation_input_token_cost": 1.875e-05
},
"anthropic.claude-3-sonnet-20240229-v1:0": {
"input_cost_per_token": 3e-06,
@@ -873,7 +877,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"anthropic.claude-instant-v1": {
"input_cost_per_token": 8e-07,
@@ -1512,7 +1518,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"apac.anthropic.claude-3-5-sonnet-20241022-v2:0": {
"cache_creation_input_token_cost": 3.75e-06,
@@ -1545,7 +1553,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 2.5e-08,
"cache_creation_input_token_cost": 3.125e-07
},
"apac.anthropic.claude-haiku-4-5-20251001-v1:0": {
"cache_creation_input_token_cost": 1.375e-06,
@@ -1581,7 +1591,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"apac.anthropic.claude-sonnet-4-20250514-v1:0": {
"cache_creation_input_token_cost": 3.75e-06,
@@ -6925,7 +6937,9 @@
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"bedrock/sa-east-1/meta.llama3-70b-instruct-v1:0": {
"input_cost_per_token": 4.45e-06,
@@ -7344,7 +7358,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3.6e-07,
"cache_creation_input_token_cost": 4.5e-06
},
"bedrock/us-gov-east-1/anthropic.claude-3-haiku-20240307-v1:0": {
"input_cost_per_token": 3e-07,
@@ -7358,7 +7374,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-08,
"cache_creation_input_token_cost": 3.75e-07
},
"bedrock/us-gov-east-1/claude-sonnet-4-5-20250929-v1:0": {
"input_cost_per_token": 3.3e-06,
@@ -7376,7 +7394,9 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3.3e-07,
"cache_creation_input_token_cost": 4.125e-06
},
"bedrock/us-gov-east-1/meta.llama3-70b-instruct-v1:0": {
"input_cost_per_token": 2.65e-06,
@@ -7489,7 +7509,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3.6e-07,
"cache_creation_input_token_cost": 4.5e-06
},
"bedrock/us-gov-west-1/anthropic.claude-3-haiku-20240307-v1:0": {
"input_cost_per_token": 3e-07,
@@ -7503,7 +7525,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-08,
"cache_creation_input_token_cost": 3.75e-07
},
"bedrock/us-gov-west-1/claude-sonnet-4-5-20250929-v1:0": {
"input_cost_per_token": 3.3e-06,
@@ -7521,7 +7545,9 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3.3e-07,
"cache_creation_input_token_cost": 4.125e-06
},
"bedrock/us-gov-west-1/meta.llama3-70b-instruct-v1:0": {
"input_cost_per_token": 2.65e-06,
@@ -9753,6 +9779,74 @@
}
]
},
"dashscope/qwen3-vl-plus": {
"litellm_provider": "dashscope",
"max_input_tokens": 260096,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "chat",
"source": "https://www.alibabacloud.com/help/en/model-studio/models",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true,
"tiered_pricing": [
{
"input_cost_per_token": 2e-07,
"output_cost_per_token": 1.6e-06,
"range": [
0,
32000.0
]
},
{
"input_cost_per_token": 3e-07,
"output_cost_per_token": 2.4e-06,
"range": [
32000.0,
128000.0
]
},
{
"input_cost_per_token": 6e-07,
"output_cost_per_token": 4.8e-06,
"range": [
128000.0,
256000.0
]
}
]
},
"dashscope/qwen3.5-plus": {
"litellm_provider": "dashscope",
"max_input_tokens": 991808,
"max_output_tokens": 65536,
"max_tokens": 65536,
"mode": "chat",
"source": "https://www.alibabacloud.com/help/en/model-studio/models",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true,
"tiered_pricing": [
{
"input_cost_per_token": 4e-07,
"output_cost_per_token": 2.4e-06,
"range": [
0,
256000.0
]
},
{
"input_cost_per_token": 5e-07,
"output_cost_per_token": 3e-06,
"range": [
256000.0,
1000000.0
]
}
]
},
"dashscope/qwq-plus": {
"input_cost_per_token": 8e-07,
"litellm_provider": "dashscope",
@@ -11089,7 +11183,7 @@
"supports_tool_choice": true
},
"deepinfra/google/gemini-2.0-flash-001": {
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"max_tokens": 1000000,
"max_input_tokens": 1000000,
"max_output_tokens": 1000000,
@@ -11950,7 +12044,9 @@
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_response_schema": true,
"supports_tool_choice": true
"supports_tool_choice": true,
"cache_read_input_token_cost": 2.5e-08,
"cache_creation_input_token_cost": 3.125e-07
},
"eu.anthropic.claude-haiku-4-5-20251001-v1:0": {
"cache_creation_input_token_cost": 1.375e-06,
@@ -11987,7 +12083,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"eu.anthropic.claude-3-5-sonnet-20241022-v2:0": {
"input_cost_per_token": 3e-06,
@@ -12004,7 +12102,9 @@
"supports_prompt_caching": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"eu.anthropic.claude-3-7-sonnet-20250219-v1:0": {
"input_cost_per_token": 3e-06,
@@ -12022,7 +12122,9 @@
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"eu.anthropic.claude-3-haiku-20240307-v1:0": {
"input_cost_per_token": 2.5e-07,
@@ -12036,7 +12138,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 2.5e-08,
"cache_creation_input_token_cost": 3.125e-07
},
"eu.anthropic.claude-3-opus-20240229-v1:0": {
"input_cost_per_token": 1.5e-05,
@@ -12049,7 +12153,9 @@
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 1.5e-06,
"cache_creation_input_token_cost": 1.875e-05
},
"eu.anthropic.claude-3-sonnet-20240229-v1:0": {
"input_cost_per_token": 3e-06,
@@ -12063,7 +12169,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"eu.anthropic.claude-opus-4-1-20250805-v1:0": {
"cache_creation_input_token_cost": 1.875e-05,
@@ -13590,7 +13698,7 @@
},
"gemini-2.0-flash": {
"cache_read_input_token_cost": 2.5e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7e-07,
"input_cost_per_token": 1e-07,
"litellm_provider": "vertex_ai-language-models",
@@ -13630,7 +13738,7 @@
},
"gemini-2.0-flash-001": {
"cache_read_input_token_cost": 3.75e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 1e-06,
"input_cost_per_token": 1.5e-07,
"litellm_provider": "vertex_ai-language-models",
@@ -13716,7 +13824,7 @@
},
"gemini-2.0-flash-lite": {
"cache_read_input_token_cost": 1.875e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7.5e-08,
"input_cost_per_token": 7.5e-08,
"litellm_provider": "vertex_ai-language-models",
@@ -13752,7 +13860,7 @@
},
"gemini-2.0-flash-lite-001": {
"cache_read_input_token_cost": 1.875e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7.5e-08,
"input_cost_per_token": 7.5e-08,
"litellm_provider": "vertex_ai-language-models",
@@ -14669,6 +14777,7 @@
"supports_web_search": true
},
"gemini-3-pro-preview": {
"deprecation_date": "2026-03-26",
"cache_read_input_token_cost": 2e-07,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"cache_creation_input_token_cost_above_200k_tokens": 2.5e-07,
@@ -15805,7 +15914,7 @@
},
"gemini/gemini-2.0-flash": {
"cache_read_input_token_cost": 2.5e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7e-07,
"input_cost_per_token": 1e-07,
"litellm_provider": "gemini",
@@ -15846,7 +15955,7 @@
},
"gemini/gemini-2.0-flash-001": {
"cache_read_input_token_cost": 2.5e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7e-07,
"input_cost_per_token": 1e-07,
"litellm_provider": "gemini",
@@ -15934,7 +16043,7 @@
},
"gemini/gemini-2.0-flash-lite": {
"cache_read_input_token_cost": 1.875e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7.5e-08,
"input_cost_per_token": 7.5e-08,
"litellm_provider": "gemini",
@@ -15970,7 +16079,7 @@
"tpm": 4000000
},
"gemini/gemini-2.0-flash-lite-preview-02-05": {
"deprecation_date": "2025-12-02",
"deprecation_date": "2025-12-09",
"cache_read_input_token_cost": 1.875e-08,
"input_cost_per_audio_token": 7.5e-08,
"input_cost_per_token": 7.5e-08,
@@ -16925,6 +17034,7 @@
"tpm": 800000
},
"gemini/gemini-3-pro-preview": {
"deprecation_date": "2026-03-09",
"cache_read_input_token_cost": 2e-07,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 2e-06,
@@ -23112,6 +23222,21 @@
"supports_response_schema": true,
"supports_tool_choice": true
},
"mistral/magistral-medium-1-2-2509": {
"input_cost_per_token": 2e-06,
"litellm_provider": "mistral",
"max_input_tokens": 40000,
"max_output_tokens": 40000,
"max_tokens": 40000,
"mode": "chat",
"output_cost_per_token": 5e-06,
"source": "https://mistral.ai/news/magistral",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
"mistral/mistral-ocr-latest": {
"litellm_provider": "mistral",
"ocr_cost_per_page": 0.001,
@@ -23177,6 +23302,21 @@
"supports_response_schema": true,
"supports_tool_choice": true
},
"mistral/magistral-small-1-2-2509": {
"input_cost_per_token": 5e-07,
"litellm_provider": "mistral",
"max_input_tokens": 40000,
"max_output_tokens": 40000,
"max_tokens": 40000,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"source": "https://mistral.ai/pricing#api-pricing",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
"mistral/mistral-embed": {
"input_cost_per_token": 1e-07,
"litellm_provider": "mistral",
@@ -23238,24 +23378,41 @@
"supports_tool_choice": true
},
"mistral/mistral-large-latest": {
"input_cost_per_token": 2e-06,
"input_cost_per_token": 5e-07,
"litellm_provider": "mistral",
"max_input_tokens": 128000,
"max_output_tokens": 128000,
"max_tokens": 128000,
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"max_tokens": 262144,
"mode": "chat",
"output_cost_per_token": 6e-06,
"output_cost_per_token": 1.5e-06,
"source": "https://docs.mistral.ai/models/mistral-large-3-25-12",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/mistral-large-3": {
"input_cost_per_token": 5e-07,
"litellm_provider": "mistral",
"max_input_tokens": 256000,
"max_output_tokens": 8191,
"max_tokens": 8191,
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"max_tokens": 262144,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"source": "https://docs.mistral.ai/models/mistral-large-3-25-12",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/mistral-large-2512": {
"input_cost_per_token": 5e-07,
"litellm_provider": "mistral",
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"max_tokens": 262144,
"mode": "chat",
"output_cost_per_token": 1.5e-06,
"source": "https://docs.mistral.ai/models/mistral-large-3-25-12",
@@ -23306,14 +23463,30 @@
"input_cost_per_token": 4e-07,
"litellm_provider": "mistral",
"max_input_tokens": 131072,
"max_output_tokens": 8191,
"max_tokens": 8191,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 2e-06,
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/mistral-medium-3-1-2508": {
"input_cost_per_token": 4e-07,
"litellm_provider": "mistral",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 2e-06,
"source": "https://mistral.ai/news/mistral-medium-3",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/mistral-small": {
"input_cost_per_token": 1e-07,
@@ -23329,17 +23502,79 @@
"supports_tool_choice": true
},
"mistral/mistral-small-latest": {
"input_cost_per_token": 1e-07,
"input_cost_per_token": 6e-08,
"litellm_provider": "mistral",
"max_input_tokens": 32000,
"max_output_tokens": 8191,
"max_tokens": 8191,
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 3e-07,
"output_cost_per_token": 1.8e-07,
"source": "https://mistral.ai/pricing",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/mistral-small-3-2-2506": {
"input_cost_per_token": 6e-08,
"litellm_provider": "mistral",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 1.8e-07,
"source": "https://mistral.ai/pricing",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/ministral-3-3b-2512": {
"input_cost_per_token": 1e-07,
"litellm_provider": "mistral",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 1e-07,
"source": "https://mistral.ai/pricing",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/ministral-3-8b-2512": {
"input_cost_per_token": 1.5e-07,
"litellm_provider": "mistral",
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"max_tokens": 262144,
"mode": "chat",
"output_cost_per_token": 1.5e-07,
"source": "https://mistral.ai/pricing",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/ministral-3-14b-2512": {
"input_cost_per_token": 2e-07,
"litellm_provider": "mistral",
"max_input_tokens": 262144,
"max_output_tokens": 262144,
"max_tokens": 262144,
"mode": "chat",
"output_cost_per_token": 2e-07,
"source": "https://mistral.ai/pricing",
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"mistral/mistral-tiny": {
"input_cost_per_token": 2.5e-07,
@@ -25657,7 +25892,7 @@
"supports_tool_choice": true
},
"openrouter/google/gemini-2.0-flash-001": {
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7e-07,
"input_cost_per_token": 1e-07,
"litellm_provider": "openrouter",
@@ -29554,7 +29789,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"us.anthropic.claude-3-5-sonnet-20241022-v2:0": {
"cache_creation_input_token_cost": 3.75e-06,
@@ -29607,7 +29844,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 2.5e-08,
"cache_creation_input_token_cost": 3.125e-07
},
"us.anthropic.claude-3-opus-20240229-v1:0": {
"input_cost_per_token": 1.5e-05,
@@ -29620,7 +29859,9 @@
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 1.5e-06,
"cache_creation_input_token_cost": 1.875e-05
},
"us.anthropic.claude-3-sonnet-20240229-v1:0": {
"input_cost_per_token": 3e-06,
@@ -29634,7 +29875,9 @@
"supports_pdf_input": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"cache_read_input_token_cost": 3e-07,
"cache_creation_input_token_cost": 3.75e-06
},
"us.anthropic.claude-opus-4-1-20250805-v1:0": {
"cache_creation_input_token_cost": 1.875e-05,
@@ -30527,7 +30770,7 @@
"supports_tool_choice": true
},
"vercel_ai_gateway/google/gemini-2.0-flash": {
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_token": 1.5e-07,
"litellm_provider": "vercel_ai_gateway",
"max_input_tokens": 1048576,
@@ -30541,7 +30784,7 @@
"supports_response_schema": true
},
"vercel_ai_gateway/google/gemini-2.0-flash-lite": {
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_token": 7.5e-08,
"litellm_provider": "vercel_ai_gateway",
"max_input_tokens": 1048576,
@@ -37898,7 +38141,7 @@
},
"gemini/gemini-2.0-flash-lite-001": {
"cache_read_input_token_cost": 1.875e-08,
"deprecation_date": "2026-03-31",
"deprecation_date": "2026-06-01",
"input_cost_per_audio_token": 7.5e-08,
"input_cost_per_token": 7.5e-08,
"litellm_provider": "gemini",
+12 -1
View File
@@ -71,7 +71,14 @@ from openai.types.responses.response_create_params import (
ToolParam,
)
from openai.types.responses.response_function_tool_call import ResponseFunctionToolCall
from pydantic import BaseModel, ConfigDict, Discriminator, PrivateAttr, field_serializer, field_validator
from pydantic import (
BaseModel,
ConfigDict,
Discriminator,
PrivateAttr,
field_serializer,
field_validator,
)
from typing_extensions import Annotated, Dict, Required, TypedDict, override
from litellm.types.llms.base import BaseLiteLLMOpenAIResponseObject
@@ -964,6 +971,10 @@ class Hyperparameters(BaseModel):
n_epochs: Optional[Union[str, int]] = (
None # "The number of epochs to train the model for"
)
model_config = {
"extra": "allow"
}
class FineTuningJobCreate(BaseModel):
@@ -596,3 +596,61 @@ async def test_mock_openai_retrieve_fine_tune_job():
# Verify the request
mock_retrieve.assert_called_once_with(fine_tuning_job_id="ft-123")
@pytest.mark.asyncio
async def test_mock_azure_create_fine_tune_job_with_azure_specific_params():
"""Test that Azure-specific parameters are passed through extra_body"""
from openai import AsyncAzureOpenAI
from openai.types.fine_tuning.fine_tuning_job import FineTuningJob
from openai.types.fine_tuning.fine_tuning_job import Hyperparameters as OAIHyperparameters
mock_response = FineTuningJob(
id="ft-azure-123",
model="gpt-4.1-mini-2025-04-14",
created_at=1677610602,
status="validating_files",
fine_tuned_model=None,
object="fine_tuning.job",
hyperparameters=OAIHyperparameters(n_epochs=3),
organization_id="org-123",
seed=42,
training_file="file-123",
result_files=[],
)
with patch("litellm.llms.azure.fine_tuning.handler.AzureOpenAIFineTuningAPI.create_fine_tuning_job") as mock_create:
mock_create.return_value = mock_response
response = await litellm.acreate_fine_tuning_job(
model="gpt-4.1-mini-2025-04-14",
training_file="file-123",
custom_llm_provider="azure",
api_base="https://test.openai.azure.com",
api_key="test-key",
api_version="2025-04-01-preview",
trainingType=1,
hyperparameters={
"n_epochs": 3,
"prompt_loss_weight": 0.1
},
)
# Verify the request
mock_create.assert_called_once()
request_params = mock_create.call_args.kwargs
# Check that create_fine_tuning_job_data contains the correct structure
create_data = request_params["create_fine_tuning_job_data"]
assert create_data["model"] == "gpt-4.1-mini-2025-04-14"
assert create_data["training_file"] == "file-123"
assert create_data["hyperparameters"] == {"n_epochs": 3}
# Azure-specific parameters should be in extra_body
assert "extra_body" in create_data
assert create_data["extra_body"]["trainingType"] == 1
assert create_data["extra_body"]["prompt_loss_weight"] == 0.1
# Verify the response
assert response.id == "ft-azure-123"
assert response.model == "gpt-4.1-mini-2025-04-14"