mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-28 06:23:07 +00:00
* feat(extraction): add Clairic extraction types and Cloudflare provider config * feat(extraction): add the /v1/extraction route, router wiring, and Clairic billing * fix(extraction): refuse or drop stream, pass unknown keys, run guardrails, keep the requested model name Clairic does not stream, so stream=true answers 400 and is dropped and billed under drop_params. Keys LiteLLM does not know pass through to Cloudflare. Guardrails scan state, field instructions and text answers. Frozen decision and extraction responses now carry the requested model name. List fields must name their item type. /health/test_connection and the Add Model page accept the extraction mode. * fix(extraction): keep upstream model names on decisions, scan images, keep typed values, refuse OpenAI params Scope the frozen-response model stamp to extraction so /v1/decisions and /v1/systemone return the upstream name as on main. Pass request images to guardrails as data URLs and drop answer spans when a response guardrail rewrites state_text. Field spec values keep their JSON type, so a wrong type answers 400 instead of being coerced. OpenAI generation params answer 400 unless drop_params. The Model Hub shows a /v1/extraction snippet for extraction models. * fix(extraction): send only Clairic's request fields, count extraction tokens, keep typed answers typed, drop spans a request guardrail made stale, and honor --max_tokens * fix(extraction): scan number answers in response guardrails, rewrite guardrail fields in linear time, and leave --max_tokens as on main * fix(extraction): scan float answers as whole numbers so fraction digits never trip a response guardrail * fix(extraction): round only mean and median for response guardrails so fractional values keep their decimal text * fix(extraction): count state and fields for budget reservations and scan estimate quantiles in response guardrails * fix(extraction): send each repeated text to guardrails once and keep the context-window budget reservation * test(extraction): type request_data in the guardrail test helpers
1312 lines
43 KiB
JSON
1312 lines
43 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"title": "LiteLLM model_prices_and_context_window.json",
|
|
"description": "Schema for LiteLLM's model price and context window registry (https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json). Every top-level key except 'sample_spec' and 'fallback_generalizations' is a model id, optionally prefixed with its provider (e.g. 'azure/gpt-5.4'), mapping to a model entry. All costs are USD per unit. New optional fields are added regularly, so consumers should ignore unknown fields rather than reject them.",
|
|
"type": "object",
|
|
"properties": {
|
|
"sample_spec": {
|
|
"type": "object",
|
|
"description": "Documentation placeholder illustrating the entry shape; not a real model and not schema-conformant (several values are prose)."
|
|
},
|
|
"fallback_generalizations": {
|
|
"type": "object",
|
|
"description": "Regex rules that generalize unknown model ids to known families; not a model entry.",
|
|
"properties": {
|
|
"rules": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"pattern": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"pattern"
|
|
],
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/modelEntry"
|
|
},
|
|
"$defs": {
|
|
"modelEntry": {
|
|
"type": "object",
|
|
"description": "Pricing, limits, and capability flags for one model. Fields other than litellm_provider are optional; boolean capability flags are simply omitted when unknown or false.",
|
|
"required": [
|
|
"litellm_provider"
|
|
],
|
|
"properties": {
|
|
"annotation_cost_per_page": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"annotation_cost_per_page_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"audio_transcription_config": {
|
|
"type": "string"
|
|
},
|
|
"bedrock_converse_supports_strict_tools": {
|
|
"type": "boolean"
|
|
},
|
|
"bedrock_output_config_effort_ceiling": {
|
|
"type": "string",
|
|
"description": "Highest reasoning effort the Bedrock output_config accepts for this model.",
|
|
"enum": [
|
|
"low",
|
|
"medium",
|
|
"high",
|
|
"max",
|
|
"xhigh"
|
|
]
|
|
},
|
|
"cache_creation_input_audio_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_creation_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per token written to the provider's prompt cache."
|
|
},
|
|
"cache_creation_input_token_cost_above_100k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_100k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_1hr": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_1hr_above_100k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_1hr_above_200k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_200k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_272k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_272k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_272k_tokens_decisions": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_above_272k_tokens_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"cache_creation_input_token_cost_above_272k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"cache_creation_input_token_cost_above_272k_tokens_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_creation_input_token_cost_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_creation_input_token_cost_decisions": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_creation_input_token_cost_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"cache_creation_input_token_cost_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"cache_creation_input_token_cost_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_audio_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_image_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per prompt token served from the provider's prompt cache."
|
|
},
|
|
"cache_read_input_token_cost_above_100k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_100k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_200k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_200k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_200k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"cache_read_input_token_cost_above_272k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_272k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_272k_tokens_decisions": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_272k_tokens_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"cache_read_input_token_cost_above_272k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"cache_read_input_token_cost_above_272k_tokens_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_above_512k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"cache_read_input_token_cost_balanced": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_token_cost_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_token_cost_decisions": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_token_cost_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"cache_read_input_token_cost_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"cache_read_input_token_cost_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"citation_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"code_interpreter_cost_per_session": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"cost_per_second": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"default_reasoning_effort": {
|
|
"type": "string",
|
|
"description": "Reasoning effort the provider applies when the request omits reasoning_effort. Gates whether a non-default temperature or the top_p/logprobs sampling params are accepted, which hold only when the effort resolves to 'none'.",
|
|
"enum": [
|
|
"none",
|
|
"minimal",
|
|
"low",
|
|
"medium",
|
|
"high",
|
|
"xhigh"
|
|
]
|
|
},
|
|
"deprecation_date": {
|
|
"type": "string",
|
|
"description": "Date the provider deprecates the model, YYYY-MM-DD.",
|
|
"format": "date",
|
|
"pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"
|
|
},
|
|
"explicit_cache_read_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"gemini_audio_only_live": {
|
|
"type": "boolean"
|
|
},
|
|
"gemini_native_audio": {
|
|
"type": "boolean"
|
|
},
|
|
"google_maps_grounding_cost_per_query": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per Grounding with Google Maps request; billed per query or per prompt per web_search_billing_unit."
|
|
},
|
|
"guardrail_cost_per_unit": {
|
|
"type": "object",
|
|
"description": "USD cost per billable guardrail unit, keyed by the provider's usage counter name (e.g. Bedrock's contentPolicyUnits).",
|
|
"additionalProperties": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
}
|
|
},
|
|
"input_cost_per_audio_per_second": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_audio_per_second_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_audio_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_audio_token_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_audio_token_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"input_cost_per_character": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_character_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_image": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_image_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_image_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_image_token_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_pixel": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_query": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_request": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_second": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_text_message": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per prompt token."
|
|
},
|
|
"input_cost_per_token_above_100k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_100k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_200k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_200k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_200k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"input_cost_per_token_above_272k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_272k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_272k_tokens_decisions": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_272k_tokens_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"input_cost_per_token_above_272k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"input_cost_per_token_above_272k_tokens_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_above_512k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_token_balanced": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_token_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per prompt token via the provider's batch API."
|
|
},
|
|
"input_cost_per_token_cache_hit": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_token_decisions": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_token_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"input_cost_per_token_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"input_cost_per_token_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_video_per_second": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_video_per_second_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_video_per_second_above_15s_interval": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_video_per_second_above_8s_interval": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"input_cost_per_video_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_video_token_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_dbu_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"litellm_provider": {
|
|
"type": "string",
|
|
"description": "LiteLLM provider slug; one of https://docs.litellm.ai/docs/providers."
|
|
},
|
|
"max_input_tokens": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Maximum prompt/context tokens the model accepts."
|
|
},
|
|
"max_output_tokens": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Maximum tokens the model can generate in one response."
|
|
},
|
|
"max_tokens": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Legacy field: max output tokens if the provider specifies it, else max input tokens."
|
|
},
|
|
"metadata": {
|
|
"type": "object",
|
|
"description": "Free-form notes about the entry (e.g. pricing derivation)."
|
|
},
|
|
"mode": {
|
|
"type": "string",
|
|
"description": "Primary API surface / task type of the model.",
|
|
"enum": [
|
|
"audio_speech",
|
|
"audio_transcription",
|
|
"chat",
|
|
"completion",
|
|
"embedding",
|
|
"evaluation",
|
|
"extraction",
|
|
"guardrail",
|
|
"image_edit",
|
|
"image_generation",
|
|
"moderation",
|
|
"ocr",
|
|
"realtime",
|
|
"rerank",
|
|
"responses",
|
|
"search",
|
|
"vector_store",
|
|
"video_generation"
|
|
]
|
|
},
|
|
"ocr_cost_per_credit": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"ocr_cost_per_page": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"ocr_cost_per_page_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"off_peak_pricing": {
|
|
"type": "object",
|
|
"description": "Rates that replace the same-named base fields while the request falls inside the stated UTC windows.",
|
|
"properties": {
|
|
"hours_utc": {
|
|
"description": "UTC \"HH:MM-HH:MM\" window, or a list of them; a window may wrap past midnight.",
|
|
"oneOf": [
|
|
{
|
|
"type": "string",
|
|
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d-([01]\\d|2[0-3]):[0-5]\\d$"
|
|
},
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d-([01]\\d|2[0-3]):[0-5]\\d$"
|
|
},
|
|
"minItems": 1
|
|
}
|
|
]
|
|
},
|
|
"windows": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"hours_utc": {
|
|
"description": "UTC \"HH:MM-HH:MM\" window, or a list of them; a window may wrap past midnight.",
|
|
"oneOf": [
|
|
{
|
|
"type": "string",
|
|
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d-([01]\\d|2[0-3]):[0-5]\\d$"
|
|
},
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d-([01]\\d|2[0-3]):[0-5]\\d$"
|
|
},
|
|
"minItems": 1
|
|
}
|
|
]
|
|
},
|
|
"weekdays": {
|
|
"type": "array",
|
|
"description": "ISO-8601 weekday numbers (1 = Monday .. 7 = Sunday) or English day names the window applies on.",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"type": "integer",
|
|
"minimum": 1,
|
|
"maximum": 7
|
|
},
|
|
{
|
|
"type": "string",
|
|
"pattern": "(?i)^(mon|monday|tue|tues|tuesday|wed|wednesday|thu|thur|thurs|thursday|fri|friday|sat|saturday|sun|sunday)$"
|
|
}
|
|
]
|
|
},
|
|
"minItems": 1
|
|
}
|
|
},
|
|
"required": [
|
|
"hours_utc"
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"minItems": 1
|
|
},
|
|
"weekday_timezone": {
|
|
"type": "string",
|
|
"description": "IANA zone the weekdays of each window are read on; defaults to UTC."
|
|
},
|
|
"input_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_reasoning_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_creation_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
}
|
|
},
|
|
"anyOf": [
|
|
{
|
|
"required": [
|
|
"hours_utc"
|
|
]
|
|
},
|
|
{
|
|
"required": [
|
|
"windows"
|
|
]
|
|
}
|
|
],
|
|
"additionalProperties": false
|
|
},
|
|
"output_cost_per_audio_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_character": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_character_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_image": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_0.5K": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_1024": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_1536": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_1K": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_2K": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_4K": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_512": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_image_token_batches": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_pixel": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_reasoning_token": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per reasoning/thinking token, when billed separately."
|
|
},
|
|
"output_cost_per_second": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_second_1080p": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_second_2k": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_second_480p": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_second_4k": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_second_720p": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_second_768p": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per generated token."
|
|
},
|
|
"output_cost_per_token_above_100k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_100k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_128k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_200k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_200k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_200k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"output_cost_per_token_above_272k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_272k_tokens_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_272k_tokens_decisions": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_272k_tokens_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"output_cost_per_token_above_272k_tokens_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"output_cost_per_token_above_272k_tokens_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_above_512k_tokens": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Rate applied once the prompt exceeds the token threshold in the field name."
|
|
},
|
|
"output_cost_per_token_balanced": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_token_batches": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "USD per generated token via the provider's batch API."
|
|
},
|
|
"output_cost_per_token_decisions": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_token_flex": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Flex service-tier rate for the same-named base field."
|
|
},
|
|
"output_cost_per_token_priority": {
|
|
"type": "number",
|
|
"minimum": 0,
|
|
"description": "Priority service-tier rate for the same-named base field."
|
|
},
|
|
"output_cost_per_token_ultrafast": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_video_per_second": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_video_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_dbu_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_vector_size": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Embedding dimension for embedding models."
|
|
},
|
|
"prompt_cache_min_tokens": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Smallest prefix the provider will actually cache; absent means the provider default applies."
|
|
},
|
|
"provider_specific_entry": {
|
|
"type": "object",
|
|
"description": "Provider-internal routing hints (e.g. bedrock_invocation_schema)."
|
|
},
|
|
"reasoning_effort_levels": {
|
|
"type": "array",
|
|
"description": "Exact reasoning_effort levels this deployment accepts; wins over supports_* flags.",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"none",
|
|
"minimal",
|
|
"low",
|
|
"medium",
|
|
"high",
|
|
"xhigh",
|
|
"max"
|
|
]
|
|
}
|
|
},
|
|
"regional_endpoint_uplift_multiplier": {
|
|
"type": "number",
|
|
"minimum": 1,
|
|
"description": "Multiplier applied to all token costs when served from a non-global Vertex AI endpoint (e.g. 1.10 = +10%)."
|
|
},
|
|
"regional_processing_uplift_multiplier_eu": {
|
|
"type": "number",
|
|
"minimum": 1,
|
|
"description": "Multiplier applied to all token costs for EU data residency (e.g. 1.10 = +10%)."
|
|
},
|
|
"regional_processing_uplift_multiplier_us": {
|
|
"type": "number",
|
|
"minimum": 1,
|
|
"description": "Multiplier applied to all token costs for US data residency (e.g. 1.10 = +10%)."
|
|
},
|
|
"rpm": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Provider default requests-per-minute limit."
|
|
},
|
|
"search_context_cost_per_query": {
|
|
"type": "object",
|
|
"description": "USD cost per web search query, keyed by search context size.",
|
|
"properties": {
|
|
"search_context_size_low": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"search_context_size_medium": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"search_context_size_high": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
},
|
|
"search_free_requests": {
|
|
"type": "object",
|
|
"description": "Free Google Search grounding requests per period, shared across models in the same shared_group.",
|
|
"required": [
|
|
"count",
|
|
"period",
|
|
"shared_group"
|
|
],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"count": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"period": {
|
|
"type": "string",
|
|
"enum": [
|
|
"day",
|
|
"month"
|
|
]
|
|
},
|
|
"shared_group": {
|
|
"type": "string",
|
|
"pattern": "\\S"
|
|
}
|
|
}
|
|
},
|
|
"source": {
|
|
"type": "string",
|
|
"description": "URL of the provider pricing/model page this entry was taken from."
|
|
},
|
|
"supported_audio_formats": {
|
|
"type": "array",
|
|
"description": "Audio container formats the model can return.",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"mp3",
|
|
"wav"
|
|
]
|
|
}
|
|
},
|
|
"supported_endpoints": {
|
|
"type": "array",
|
|
"description": "OpenAI-style API routes this model can be called through, e.g. /v1/chat/completions.",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"supported_modalities": {
|
|
"type": "array",
|
|
"description": "Input modalities the model accepts.",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"text",
|
|
"image",
|
|
"audio",
|
|
"video"
|
|
]
|
|
}
|
|
},
|
|
"supported_output_modalities": {
|
|
"type": "array",
|
|
"description": "Output modalities the model can produce.",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": [
|
|
"text",
|
|
"image",
|
|
"audio",
|
|
"video",
|
|
"code"
|
|
]
|
|
}
|
|
},
|
|
"supported_regions": {
|
|
"type": "array",
|
|
"description": "Cloud regions the model is available in ('global' or region ids).",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"supports_adaptive_thinking": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_anthropic_compaction": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_anthropic_thinking_payload": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_assistant_prefill": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_audio_input": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_audio_output": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_bedrock_converse_tool_result_images": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_bedrock_native_structured_output": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_bedrock_runtime_chat_completions_inline_reasoning": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_bedrock_runtime_chat_completions_response_format": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_bedrock_runtime_chat_completions_tools_with_reasoning": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_box_questions": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_computer_use": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_embedding_image_input": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_fast_mode": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_forced_tool_use": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_function_calling": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_image_input": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_image_size": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_legacy_thinking": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_low_reasoning_effort": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_max_reasoning_effort": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_mid_conversation_system": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_minimal_reasoning_effort": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_multimodal": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_native_streaming": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_native_structured_output": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_none_reasoning_effort": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_nova_canvas_image_edit": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_output_config": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_parallel_function_calling": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_parallel_tool_use_config": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_pdf_input": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_prompt_cache_breakpoint": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_prompt_caching": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_reasoning": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_regex_lookaround": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_response_schema": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_sampling_params": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_speed": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_system_messages": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_thinking_cache_preservation": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_tool_choice": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_tool_search": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_url_context": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_video_input": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_vision": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_web_search": {
|
|
"type": "boolean"
|
|
},
|
|
"supports_xhigh_reasoning_effort": {
|
|
"type": "boolean"
|
|
},
|
|
"thinking_always_on": {
|
|
"type": "boolean"
|
|
},
|
|
"tiered_pricing": {
|
|
"type": "array",
|
|
"description": "Context-length or result-count tiered rates; each tier's costs apply within its range.",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"range": {
|
|
"type": "array",
|
|
"description": "[min, max] prompt-token span this tier applies to.",
|
|
"items": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"minItems": 2,
|
|
"maxItems": 2
|
|
},
|
|
"max_results_range": {
|
|
"type": "array",
|
|
"description": "[min, max] result-count span this tier applies to (search models).",
|
|
"items": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"minItems": 2,
|
|
"maxItems": 2
|
|
},
|
|
"input_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"output_cost_per_reasoning_token": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_read_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"cache_creation_input_token_cost": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
},
|
|
"input_cost_per_query": {
|
|
"type": "number",
|
|
"minimum": 0
|
|
}
|
|
},
|
|
"additionalProperties": false
|
|
}
|
|
},
|
|
"token_count_framing": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Tokens added once per request to a local count estimate, for the provider's chat framing."
|
|
},
|
|
"token_count_model": {
|
|
"type": "object",
|
|
"required": [
|
|
"model"
|
|
],
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"model": {
|
|
"type": "string",
|
|
"pattern": "\\S"
|
|
},
|
|
"region": {
|
|
"type": "string",
|
|
"pattern": "\\S"
|
|
},
|
|
"litellm_provider": {
|
|
"type": "string",
|
|
"enum": [
|
|
"bedrock",
|
|
"bedrock_mantle"
|
|
]
|
|
}
|
|
},
|
|
"description": "Model that counts tokens for this one, its counting provider, and the AWS region its count API runs in."
|
|
},
|
|
"token_count_tokenizer": {
|
|
"type": "string",
|
|
"description": "Tokenizer litellm counts this model's requests with when the provider cannot count them.",
|
|
"enum": [
|
|
"kimi_k3"
|
|
]
|
|
},
|
|
"tpm": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Provider default tokens-per-minute limit."
|
|
},
|
|
"use_openai_responses_path": {
|
|
"type": "boolean"
|
|
},
|
|
"uses_embed_content": {
|
|
"type": "boolean"
|
|
},
|
|
"vertex_ai_audio_api": {
|
|
"type": "string",
|
|
"enum": [
|
|
"lyria_predict",
|
|
"lyria_interactions"
|
|
]
|
|
},
|
|
"web_search_billing_unit": {
|
|
"type": "string",
|
|
"description": "Whether web search is billed per query or per prompt.",
|
|
"enum": [
|
|
"per_query",
|
|
"per_prompt"
|
|
]
|
|
}
|
|
},
|
|
"additionalProperties": true
|
|
}
|
|
}
|
|
}
|