mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-14 23:21:35 +00:00
fix(scripts): replace synced Friendli entries wholesale and seed the backup cost map
This commit is contained in:
parent
81f9ad322b
commit
077cdb5fb9
3 changed files with 234 additions and 3 deletions
|
|
@ -147,10 +147,15 @@ def transform_friendli_data(data: list, local_data: dict) -> dict:
|
|||
return transformed
|
||||
|
||||
# Synchronize local data with remote data
|
||||
def sync_local_data_with_remote(local_data, remote_data):
|
||||
def sync_local_data_with_remote(local_data, remote_data, replace_keys=frozenset()):
|
||||
# Update existing keys in local_data with values from remote_data
|
||||
# (replace_keys entries are swapped wholesale so a field the remote catalog
|
||||
# dropped, e.g. cache pricing, cannot survive as a stale value)
|
||||
for key in (set(local_data) & set(remote_data)):
|
||||
local_data[key].update(remote_data[key])
|
||||
if key in replace_keys:
|
||||
local_data[key] = remote_data[key]
|
||||
else:
|
||||
local_data[key].update(remote_data[key])
|
||||
|
||||
# Add new keys from remote_data to local_data
|
||||
for key in (set(remote_data) - set(local_data)):
|
||||
|
|
@ -286,7 +291,7 @@ def main():
|
|||
|
||||
# If both local and openrouter data are available, synchronize and save
|
||||
if local_data and all_remote_data:
|
||||
sync_local_data_with_remote(local_data, all_remote_data)
|
||||
sync_local_data_with_remote(local_data, all_remote_data, replace_keys=frozenset(friendli_data))
|
||||
write_to_file(local_file_path, local_data)
|
||||
else:
|
||||
print("Failed to fetch model data from either local file or URL.")
|
||||
|
|
|
|||
|
|
@ -19564,6 +19564,209 @@
|
|||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true
|
||||
},
|
||||
"friendliai/zai-org/GLM-5.3-Flash": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 1048576,
|
||||
"max_output_tokens": 1048576,
|
||||
"max_tokens": 1048576,
|
||||
"input_cost_per_token": 1.5e-07,
|
||||
"output_cost_per_token": 5e-07,
|
||||
"cache_read_input_token_cost": 3e-08,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [
|
||||
"low",
|
||||
"high",
|
||||
"max"
|
||||
],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": true,
|
||||
"supports_image_input": true,
|
||||
"supports_video_input": true,
|
||||
"mode": "chat",
|
||||
"comment": "Native multimodal GLM model for efficient coding and long-horizon agent tasks",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/zai-org/GLM-5.3": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 1048576,
|
||||
"max_output_tokens": 1048576,
|
||||
"max_tokens": 1048576,
|
||||
"input_cost_per_token": 1.26e-06,
|
||||
"output_cost_per_token": 3.96e-06,
|
||||
"cache_read_input_token_cost": 2.34e-07,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [
|
||||
"low",
|
||||
"high",
|
||||
"max"
|
||||
],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": false,
|
||||
"supports_image_input": false,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "Flagship GLM model for long-horizon coding, agents, and complex project delivery",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/google/gemma-4-31B-it": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 262144,
|
||||
"max_output_tokens": 262144,
|
||||
"max_tokens": 262144,
|
||||
"input_cost_per_token": 1.4e-07,
|
||||
"output_cost_per_token": 4e-07,
|
||||
"supports_prompt_caching": false,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": true,
|
||||
"supports_image_input": true,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "Largest Gemma 4 instruction model for open, self-hosted chat and reasoning",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/zai-org/GLM-5.2": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 1048576,
|
||||
"max_output_tokens": 1048576,
|
||||
"max_tokens": 1048576,
|
||||
"input_cost_per_token": 1.4e-06,
|
||||
"output_cost_per_token": 4.4e-06,
|
||||
"cache_read_input_token_cost": 2.6e-07,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [
|
||||
"high",
|
||||
"max"
|
||||
],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": false,
|
||||
"supports_image_input": false,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "Open flagship GLM for long-horizon coding agents and million-token context work",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/LGAI-EXAONE/K-EXAONE-2.0-750B-A37B": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 262144,
|
||||
"max_output_tokens": 262144,
|
||||
"max_tokens": 262144,
|
||||
"input_cost_per_token": 6e-07,
|
||||
"output_cost_per_token": 2.4e-06,
|
||||
"cache_read_input_token_cost": 1.2e-07,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": false,
|
||||
"supports_image_input": false,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "Frontier-scale multilingual language model developed by LG AI Research",
|
||||
"deprecation_date": "2026-09-06",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/deepseek-ai/DeepSeek-V3.2": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 163840,
|
||||
"max_output_tokens": 163840,
|
||||
"max_tokens": 163840,
|
||||
"input_cost_per_token": 5e-07,
|
||||
"output_cost_per_token": 1.5e-06,
|
||||
"cache_read_input_token_cost": 2.5e-07,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": false,
|
||||
"supports_image_input": false,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "DeepSeek chat model for instruction following, coding, and analysis",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/MiniMaxAI/MiniMax-M2.5": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 196608,
|
||||
"max_output_tokens": 196608,
|
||||
"max_tokens": 196608,
|
||||
"input_cost_per_token": 3e-07,
|
||||
"output_cost_per_token": 1.2e-06,
|
||||
"cache_read_input_token_cost": 6e-08,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": false,
|
||||
"supports_image_input": false,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "Prior MiniMax coding model for agent workflows, office edits, and automation",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"friendliai/zai-org/GLM-5.1": {
|
||||
"litellm_provider": "friendliai",
|
||||
"max_input_tokens": 202752,
|
||||
"max_output_tokens": 202752,
|
||||
"max_tokens": 202752,
|
||||
"input_cost_per_token": 1.4e-06,
|
||||
"output_cost_per_token": 4.4e-06,
|
||||
"cache_read_input_token_cost": 2.6e-07,
|
||||
"supports_prompt_caching": true,
|
||||
"supports_reasoning": true,
|
||||
"reasoning_effort_levels": [],
|
||||
"supports_function_calling": true,
|
||||
"supports_parallel_function_calling": true,
|
||||
"supports_response_schema": true,
|
||||
"supports_native_structured_output": true,
|
||||
"supports_system_messages": true,
|
||||
"supports_tool_choice": true,
|
||||
"supports_vision": false,
|
||||
"supports_image_input": false,
|
||||
"supports_video_input": false,
|
||||
"mode": "chat",
|
||||
"comment": "Strong GLM coding model for agentic engineering, terminals, and repository generation",
|
||||
"source": "https://api.friendli.ai/serverless/v1/models"
|
||||
},
|
||||
"ft:babbage-002": {
|
||||
"deprecation_date": "2026-10-23",
|
||||
"input_cost_per_token": 1.6e-06,
|
||||
|
|
|
|||
|
|
@ -151,6 +151,29 @@ def test_vercel_transform_skips_rows_without_token_pricing_or_limits(sync_module
|
|||
assert transformed["vercel_ai_gateway/good-chat"]["output_cost_per_token"] == 2e-06
|
||||
|
||||
|
||||
def test_sync_replaces_friendli_entries_so_dropped_cache_pricing_does_not_survive(sync_module):
|
||||
local = {
|
||||
"friendliai/zai-org/GLM-Test": {
|
||||
"litellm_provider": "friendliai",
|
||||
"cache_read_input_token_cost": 3e-08,
|
||||
"supports_prompt_caching": True,
|
||||
}
|
||||
}
|
||||
uncached_model = _reasoning_model(pricing={"input": "0.00000014", "output": "0.0000004"})
|
||||
remote = sync_module.transform_friendli_data([uncached_model], local)
|
||||
sync_module.sync_local_data_with_remote(local, remote, replace_keys=frozenset(remote))
|
||||
synced = local["friendliai/zai-org/GLM-Test"]
|
||||
assert "cache_read_input_token_cost" not in synced
|
||||
assert synced["supports_prompt_caching"] is False
|
||||
|
||||
|
||||
def test_sync_still_merges_entries_outside_replace_keys(sync_module):
|
||||
local = {"openrouter/some-model": {"input_cost_per_token": 1e-06, "supports_vision": True}}
|
||||
remote = {"openrouter/some-model": {"input_cost_per_token": 2e-06}}
|
||||
sync_module.sync_local_data_with_remote(local, remote)
|
||||
assert local["openrouter/some-model"] == {"input_cost_per_token": 2e-06, "supports_vision": True}
|
||||
|
||||
|
||||
def test_transform_inherits_allowlisted_keys_from_base_model_entry(sync_module):
|
||||
local = {
|
||||
"zhipuai/glm-test": {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue