diff --git a/.circleci/config.yml b/.circleci/config.yml index 2a15679801..4a44242697 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1050,6 +1050,51 @@ jobs: ls python -m pytest -vv tests/test_litellm --cov=litellm --cov-report=xml -x -s -v --junitxml=test-results/junit-litellm.xml --durations=10 -n 8 no_output_timeout: 120m + - run: + name: Rename the coverage files + command: | + mv coverage.xml litellm_mapped_tests_coverage.xml + mv .coverage litellm_mapped_tests_coverage + + # Store test results + - store_test_results: + path: test-results + - persist_to_workspace: + root: . + paths: + - litellm_mapped_tests_coverage.xml + - litellm_mapped_tests_coverage + litellm_mapped_enterprise_tests: + docker: + - image: cimg/python:3.11 + auth: + username: ${DOCKERHUB_USERNAME} + password: ${DOCKERHUB_PASSWORD} + working_directory: ~/project + + steps: + - checkout + - setup_google_dns + - run: + name: Install Dependencies + command: | + python -m pip install --upgrade pip + python -m pip install -r requirements.txt + pip install "pytest-mock==3.12.0" + pip install "pytest==7.3.1" + pip install "pytest-retry==1.6.3" + pip install "pytest-cov==5.0.0" + pip install "pytest-asyncio==0.21.1" + pip install "respx==0.22.0" + pip install "hypercorn==0.17.3" + pip install "pydantic==2.10.2" + pip install "mcp==1.10.1" + pip install "requests-mock>=1.12.1" + pip install "responses==0.25.7" + pip install "pytest-xdist==3.6.1" + pip install "semantic_router==0.1.10" + pip install "fastapi-offline==1.7.3" + - setup_litellm_enterprise_pip - run: name: Run enterprise tests command: | @@ -1458,6 +1503,7 @@ jobs: # - run: python ./tests/documentation_tests/test_general_setting_keys.py - run: python ./tests/code_coverage_tests/check_licenses.py - run: python ./tests/code_coverage_tests/router_code_coverage.py + - run: python ./tests/code_coverage_tests/test_chat_completion_imports.py - run: python ./tests/code_coverage_tests/info_log_check.py - run: python ./tests/code_coverage_tests/test_ban_set_verbose.py - run: python ./tests/code_coverage_tests/code_qa_check_tests.py @@ -1778,8 +1824,8 @@ jobs: docker run -d \ -p 4000:4000 \ -e DATABASE_URL=postgresql://postgres:postgres@host.docker.internal:5432/circle_test \ - -e AZURE_API_KEY=$AZURE_BATCHES_API_KEY \ - -e AZURE_API_BASE=$AZURE_BATCHES_API_BASE \ + -e AZURE_API_KEY=$AZURE_API_KEY \ + -e AZURE_API_BASE=$AZURE_API_BASE \ -e AZURE_API_VERSION="2024-05-01-preview" \ -e REDIS_HOST=$REDIS_HOST \ -e REDIS_PASSWORD=$REDIS_PASSWORD \ @@ -2825,8 +2871,8 @@ jobs: source "$NVM_DIR/bash_completion" # Install and use Node version - nvm install v18.17.0 - nvm use v18.17.0 + nvm install v20 + nvm use v20 cd ui/litellm-dashboard @@ -2879,7 +2925,26 @@ jobs: name: Install Playwright Browsers command: | npx playwright install + - run: + name: Run UI unit tests (Vitest) + command: | + # Use Node 20 (several deps require >=20) + export NVM_DIR="/opt/circleci/.nvm" + source "$NVM_DIR/nvm.sh" + nvm install 20 + nvm use 20 + cd ui/litellm-dashboard + npm ci || npm install + + # CI run, with both LCOV (Codecov) and HTML (artifact you can click) + CI=true npm run test -- --run --coverage \ + --coverage.provider=v8 \ + --coverage.reporter=lcov \ + --coverage.reporter=html \ + --coverage.reportsDirectory=coverage/html + + - run: name: Build Docker image command: docker build -t my-app:latest -f ./docker/Dockerfile.database . @@ -3155,6 +3220,12 @@ workflows: only: - main - /litellm_.*/ + - litellm_mapped_enterprise_tests: + filters: + branches: + only: + - main + - /litellm_.*/ - litellm_mapped_tests: filters: branches: @@ -3199,6 +3270,7 @@ workflows: - guardrails_testing - llm_responses_api_testing - litellm_mapped_tests + - litellm_mapped_enterprise_tests - batches_testing - litellm_utils_testing - pass_through_unit_testing @@ -3259,6 +3331,7 @@ workflows: - google_generate_content_endpoint_testing - llm_responses_api_testing - litellm_mapped_tests + - litellm_mapped_enterprise_tests - batches_testing - litellm_utils_testing - pass_through_unit_testing diff --git a/.gitignore b/.gitignore index ed8c88c899..c2ac5137cb 100644 --- a/.gitignore +++ b/.gitignore @@ -95,4 +95,5 @@ test.py litellm_config.yaml .cursor .vscode/launch.json -litellm/proxy/to_delete_loadtest_work/* \ No newline at end of file +litellm/proxy/to_delete_loadtest_work/* +update_model_cost_map.py diff --git a/Dockerfile b/Dockerfile index addc109e10..f85582f992 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,9 +41,6 @@ RUN pip uninstall jwt -y RUN pip uninstall PyJWT -y RUN pip install PyJWT==2.9.0 --no-cache-dir -# Build Admin UI -RUN chmod +x docker/build_admin_ui.sh && ./docker/build_admin_ui.sh - # Runtime stage FROM $LITELLM_RUNTIME_IMAGE AS runtime diff --git a/README.md b/README.md index 46acf6cef0..f74889fbb2 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ LiteLLM manages: - Retry/fallback logic across multiple deployments (e.g. Azure/OpenAI) - [Router](https://docs.litellm.ai/docs/routing) - Set Budgets & Rate limits per project, api key, model [LiteLLM Proxy Server (LLM Gateway)](https://docs.litellm.ai/docs/simple_proxy) -[**Jump to LiteLLM Proxy (LLM Gateway) Docs**](https://github.com/BerriAI/litellm?tab=readme-ov-file#openai-proxy---docs)
+[**Jump to LiteLLM Proxy (LLM Gateway) Docs**](https://github.com/BerriAI/litellm?tab=readme-ov-file#litellm-proxy-server-llm-gateway---docs)
[**Jump to Supported LLM Providers**](https://github.com/BerriAI/litellm?tab=readme-ov-file#supported-providers-docs) 🚨 **Stable Release:** Use docker images with the `-stable` tag. These have undergone 12 hour load tests, before being published. [More information about the release cycle here](https://docs.litellm.ai/docs/proxy/release_cycle) diff --git a/cookbook/misc/RELEASE_NOTES_GENERATION_INSTRUCTIONS.md b/cookbook/misc/RELEASE_NOTES_GENERATION_INSTRUCTIONS.md index f24bc8f129..b0a24ef28e 100644 --- a/cookbook/misc/RELEASE_NOTES_GENERATION_INSTRUCTIONS.md +++ b/cookbook/misc/RELEASE_NOTES_GENERATION_INSTRUCTIONS.md @@ -4,10 +4,10 @@ This document provides comprehensive instructions for AI agents to generate rele ## Required Inputs -1. **Release Version** (e.g., `v1.76.3-stable`) +1. **Release Version** (e.g., `v1.77.3-stable`) 2. **PR Diff/Changelog** - List of PRs with titles and contributors 3. **Previous Version Commit Hash** - To compare model pricing changes -4. **Reference Release Notes** - Previous release notes to follow style/format +4. **Reference Release Notes** - Use recent stable releases (v1.76.3-stable, v1.77.2-stable) as templates for consistent formatting ## Step-by-Step Process @@ -26,12 +26,12 @@ git diff HEAD -- model_prices_and_context_window.json ### 2. Release Notes Structure -Follow this exact structure based on `docs/my-website/release_notes/v1.76.1-stable/index.md`: +Follow this exact structure based on recent stable releases (v1.76.3-stable, v1.77.2-stable): ```markdown --- -title: "v1.76.X-stable - [Key Theme]" -slug: "v1-76-X" +title: "v1.77.X-stable - [Key Theme]" +slug: "v1-77-X" date: YYYY-MM-DDTHH:mm:ss authors: [standard author block] hide_table_of_contents: false @@ -43,23 +43,42 @@ hide_table_of_contents: false ## Key Highlights [3-5 bullet points of major features] -## Major Changes -[Critical changes users need to know] - -## Performance Improvements -[Performance-related changes] - ## New Models / Updated Models -[Detailed model tables and provider updates] +#### New Model Support +[Model pricing table] + +#### Features +[Provider-specific features organized by provider] + +### Bug Fixes +[Provider-specific bug fixes organized by provider] + +#### New Provider Support +[New provider integrations] ## LLM API Endpoints -[API-related features and fixes] +#### Features +[API-specific features organized by API type] + +#### Bugs +[General bug fixes] ## Management Endpoints / UI -[Admin interface and management changes] +#### Features +[UI and management features] + +#### Bugs +[Management-related bug fixes] ## Logging / Guardrail Integrations -[Observability and security features] +#### Features +[Organized by integration provider with proper doc links] + +#### Guardrails +[Guardrail-specific features and fixes] + +#### New Integration +[Major new integrations] ## Performance / Loadbalancing / Reliability improvements [Infrastructure improvements] @@ -86,21 +105,27 @@ hide_table_of_contents: false **New Models/Updated Models:** - Extract from model_prices_and_context_window.json diff - Create tables with: Provider, Model, Context Window, Input Cost, Output Cost, Features -- Group by provider -- Note pricing corrections -- Highlight deprecated models +- **Structure:** + - `#### New Model Support` - pricing table + - `#### Features` - organized by provider with documentation links + - `### Bug Fixes` - provider-specific bug fixes + - `#### New Provider Support` - major new provider integrations +- Group by provider with proper doc links: `**[Provider Name](../../docs/providers/[provider])**` +- Use bullet points under each provider for multiple features +- Separate features from bug fixes clearly -**Provider Features:** -- Group by provider (Gemini, OpenAI, Anthropic, etc.) -- Link to provider docs: `../../docs/providers/[provider_name]` -- Separate features from bug fixes - -**API Endpoints:** -- Images API -- Video Generation (if applicable) -- Responses API -- Passthrough endpoints -- General chat completions +**LLM API Endpoints:** +- **Structure:** + - `#### Features` - organized by API type (Responses API, Batch API, etc.) + - `#### Bugs` - general bug fixes under **General** category +- **API Categories:** + - Responses API + - Batch API + - CountTokens API + - Images API + - Video Generation (if applicable) + - General (miscellaneous improvements) +- Use proper documentation links for each API type **UI/Management:** - Authentication changes @@ -108,11 +133,19 @@ hide_table_of_contents: false - Team management - Key management -**Integrations:** -- Logging providers (Datadog, Braintrust, etc.) -- Guardrails -- Cost tracking -- Observability +**Logging / Guardrail Integrations:** +- **Structure:** + - `#### Features` - organized by integration provider with proper doc links + - `#### Guardrails` - guardrail-specific features and fixes + - `#### New Integration` - major new integrations +- **Integration Categories:** + - **[DataDog](../../docs/proxy/logging#datadog)** - group all DataDog-related changes + - **[Langfuse](../../docs/proxy/logging#langfuse)** - Langfuse-specific features + - **[Prometheus](../../docs/proxy/logging#prometheus)** - monitoring improvements + - **[PostHog](../../docs/observability/posthog)** - observability integration + - Other logging providers with proper doc links +- Use bullet points under each provider for multiple features +- Separate logging features from guardrails clearly ### 4. Documentation Linking Strategy @@ -211,10 +244,41 @@ This release has a known issue... ::: ``` -**Provider Features:** +**Provider Features (New Models / Updated Models section):** ```markdown +#### Features + - **[Provider Name](../../docs/providers/provider)** - Feature description - [PR #XXXXX](link) + - Another feature description - [PR #YYYYY](link) +``` + +**API Features (LLM API Endpoints section):** +```markdown +#### Features + +- **[API Name](../../docs/api_path)** + - Feature description - [PR #XXXXX](link) + - Another feature - [PR #YYYYY](link) +- **General** + - Miscellaneous improvements - [PR #ZZZZZ](link) +``` + +**Integration Features (Logging / Guardrail Integrations section):** +```markdown +#### Features + +- **[Integration Name](../../docs/proxy/logging#integration)** + - Feature description - [PR #XXXXX](link) + - Bug fix description - [PR #YYYYY](link) +``` + +**Bug Fixes Pattern:** +```markdown +### Bug Fixes + +- **[Provider/Component Name](../../docs/providers/provider)** + - Bug fix description - [PR #XXXXX](link) ``` ### 10. Missing Documentation Check diff --git a/docs/my-website/docs/completion/provider_specific_params.md b/docs/my-website/docs/completion/provider_specific_params.md index a8307fc8a2..772ca13e29 100644 --- a/docs/my-website/docs/completion/provider_specific_params.md +++ b/docs/my-website/docs/completion/provider_specific_params.md @@ -433,4 +433,54 @@ curl -X POST 'http://0.0.0.0:4000/chat/completions' \ ], "adapater_id": "my-special-adapter-id" # 👈 PROVIDER-SPECIFIC PARAM }' + +## Provider-Specific Metadata Parameters + +| Provider | Parameter | Use Case | +|----------|-----------|----------| +| **AWS Bedrock** | `requestMetadata` | Cost attribution, logging | +| **Gemini/Vertex AI** | `labels` | Resource labeling | +| **Anthropic** | `metadata` | User identification | + + + + +```python +import litellm + +response = litellm.completion( + model="bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0", + messages=[{"role": "user", "content": "Hello!"}], + requestMetadata={"cost_center": "engineering"} +) +``` + + + + +```python +import litellm + +response = litellm.completion( + model="vertex_ai/gemini-pro", + messages=[{"role": "user", "content": "Hello!"}], + labels={"environment": "production"} +) +``` + + + + +```python +import litellm + +response = litellm.completion( + model="anthropic/claude-3-sonnet-20240229", + messages=[{"role": "user", "content": "Hello!"}], + metadata={"user_id": "user123"} +) +``` + + + ``` \ No newline at end of file diff --git a/docs/my-website/docs/mcp.md b/docs/my-website/docs/mcp.md index 18c9905170..80b4c32d0a 100644 --- a/docs/my-website/docs/mcp.md +++ b/docs/my-website/docs/mcp.md @@ -114,7 +114,6 @@ mcp_servers: description: "My custom MCP server" auth_type: "api_key" auth_value: "abc123" - spec_version: "2025-03-26" ``` **Configuration Options:** @@ -716,7 +715,6 @@ mcp_servers: url: https://mcp.deepwiki.com/mcp transport: "http" auth_type: "none" - spec_version: "2025-03-26" access_groups: ["dev_group"] ``` diff --git a/docs/my-website/docs/observability/helicone_integration.md b/docs/my-website/docs/observability/helicone_integration.md index 9b807b8d0f..22ea051f7c 100644 --- a/docs/my-website/docs/observability/helicone_integration.md +++ b/docs/my-website/docs/observability/helicone_integration.md @@ -1,3 +1,6 @@ +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + # Helicone - OSS LLM Observability Platform :::tip @@ -9,9 +12,68 @@ https://github.com/BerriAI/litellm [Helicone](https://helicone.ai/) is an open source observability platform that proxies your LLM requests and provides key insights into your usage, spend, latency and more. -## Using Helicone with LiteLLM +## Quick Start -LiteLLM provides `success_callbacks` and `failure_callbacks`, allowing you to easily log data to Helicone based on the status of your responses. + + + +Use just 1 line of code to instantly log your responses **across all providers** with Helicone: + +```python +import os +from litellm import completion + +## Set env variables +os.environ["HELICONE_API_KEY"] = "your-helicone-key" +os.environ["OPENAI_API_KEY"] = "your-openai-key" + +# Set callbacks +litellm.success_callback = ["helicone"] + +# OpenAI call +response = completion( + model="gpt-4o", + messages=[{"role": "user", "content": "Hi 👋 - I'm OpenAI"}], +) + +print(response) +``` + + + + +Add Helicone to your LiteLLM proxy configuration: + +```yaml title="config.yaml" +model_list: + - model_name: gpt-4 + litellm_params: + model: gpt-4 + api_key: os.environ/OPENAI_API_KEY + +# Add Helicone callback +litellm_settings: + success_callback: ["helicone"] + +# Set Helicone API key +environment_variables: + HELICONE_API_KEY: "your-helicone-key" +``` + +Start the proxy: +```bash +litellm --config config.yaml +``` + + + + +## Integration Methods + +There are two main approaches to integrate Helicone with LiteLLM: + +1. **Callbacks**: Log to Helicone while using any provider +2. **Proxy Mode**: Use Helicone as a proxy for advanced features ### Supported LLM Providers @@ -26,27 +88,16 @@ Helicone can log requests across [various LLM providers](https://docs.helicone.a - Replicate - And more -### Integration Methods +## Method 1: Using Callbacks -There are two main approaches to integrate Helicone with LiteLLM: +Log requests to Helicone while using any LLM provider directly. -1. Using callbacks -2. Using Helicone as a proxy - -Let's explore each method in detail. - -### Approach 1: Use Callbacks - -Use just 1 line of code to instantly log your responses **across all providers** with Helicone: - -```python -litellm.success_callback = ["helicone"] -``` - -Complete Code + + ```python import os +import litellm from litellm import completion ## Set env variables @@ -66,28 +117,78 @@ response = completion( print(response) ``` -### Approach 2: Use Helicone as a proxy + + + +```yaml title="config.yaml" +model_list: + - model_name: gpt-4 + litellm_params: + model: gpt-4 + api_key: os.environ/OPENAI_API_KEY + - model_name: claude-3 + litellm_params: + model: anthropic/claude-3-sonnet-20240229 + api_key: os.environ/ANTHROPIC_API_KEY + +# Add Helicone logging +litellm_settings: + success_callback: ["helicone"] + +# Environment variables +environment_variables: + HELICONE_API_KEY: "your-helicone-key" + OPENAI_API_KEY: "your-openai-key" + ANTHROPIC_API_KEY: "your-anthropic-key" +``` + +Start the proxy: +```bash +litellm --config config.yaml +``` + +Make requests to your proxy: +```python +import openai + +client = openai.OpenAI( + api_key="anything", # proxy doesn't require real API key + base_url="http://localhost:4000" +) + +response = client.chat.completions.create( + model="gpt-4", # This gets logged to Helicone + messages=[{"role": "user", "content": "Hello!"}] +) +``` + + + + +## Method 2: Using Helicone as a Proxy Helicone's proxy provides [advanced functionality](https://docs.helicone.ai/getting-started/proxy-vs-async) like caching, rate limiting, LLM security through [PromptArmor](https://promptarmor.com/) and more. -To use Helicone as a proxy for your LLM requests: + + -1. Set Helicone as your base URL via: litellm.api_base -2. Pass in Helicone request headers via: litellm.metadata - -Complete Code: +Set Helicone as your base URL and pass authentication headers: ```python import os import litellm from litellm import completion +# Configure LiteLLM to use Helicone proxy litellm.api_base = "https://oai.hconeai.com/v1" litellm.headers = { - "Helicone-Auth": f"Bearer {os.getenv('HELICONE_API_KEY')}", # Authenticate to send requests to Helicone API + "Helicone-Auth": f"Bearer {os.getenv('HELICONE_API_KEY')}", } -response = litellm.completion( +# Set your OpenAI API key +os.environ["OPENAI_API_KEY"] = "your-openai-key" + +response = completion( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "How does a court case get to the Supreme Court?"}] ) @@ -136,36 +237,119 @@ litellm.metadata = { } ``` -### Session Tracking and Tracing + + + +## Session Tracking and Tracing Track multi-step and agentic LLM interactions using session IDs and paths: -```python -litellm.metadata = { - "Helicone-Auth": f"Bearer {os.getenv('HELICONE_API_KEY')}", # Authenticate to send requests to Helicone API - "Helicone-Session-Id": "session-abc-123", # The session ID you want to track - "Helicone-Session-Path": "parent-trace/child-trace", # The path of the session -} -``` - -- `Helicone-Session-Id`: Use this to specify the unique identifier for the session you want to track. This allows you to group related requests together. -- `Helicone-Session-Path`: This header defines the path of the session, allowing you to represent parent and child traces. For example, "parent/child" represents a child trace of a parent trace. - -By using these two headers, you can effectively group and visualize multi-step LLM interactions, gaining insights into complex AI workflows. - -### Retry and Fallback Mechanisms - -Set up retry mechanisms and fallback options: + + ```python +import litellm + +litellm.api_base = "https://oai.hconeai.com/v1" litellm.metadata = { - "Helicone-Auth": f"Bearer {os.getenv('HELICONE_API_KEY')}", # Authenticate to send requests to Helicone API - "Helicone-Retry-Enabled": "true", # Enable retry mechanism - "helicone-retry-num": "3", # Set number of retries - "helicone-retry-factor": "2", # Set exponential backoff factor - "Helicone-Fallbacks": '["gpt-3.5-turbo", "gpt-4"]', # Set fallback models + "Helicone-Auth": f"Bearer {os.getenv('HELICONE_API_KEY')}", + "Helicone-Session-Id": "session-abc-123", + "Helicone-Session-Path": "parent-trace/child-trace", } + +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "Start a conversation"}] +) ``` + + + +```python +import openai + +client = openai.OpenAI( + api_key="anything", + base_url="http://localhost:4000" +) + +# First request in session +response1 = client.chat.completions.create( + model="gpt-4", + messages=[{"role": "user", "content": "Hello"}], + extra_headers={ + "Helicone-Session-Id": "session-abc-123", + "Helicone-Session-Path": "conversation/greeting" + } +) + +# Follow-up request in same session +response2 = client.chat.completions.create( + model="gpt-4", + messages=[{"role": "user", "content": "Tell me more"}], + extra_headers={ + "Helicone-Session-Id": "session-abc-123", + "Helicone-Session-Path": "conversation/follow-up" + } +) +``` + + + + +- `Helicone-Session-Id`: Unique identifier for the session to group related requests +- `Helicone-Session-Path`: Hierarchical path to represent parent/child traces (e.g., "parent/child") + +## Retry and Fallback Mechanisms + + + + +```python +import litellm + +litellm.api_base = "https://oai.hconeai.com/v1" +litellm.metadata = { + "Helicone-Auth": f"Bearer {os.getenv('HELICONE_API_KEY')}", + "Helicone-Retry-Enabled": "true", + "helicone-retry-num": "3", + "helicone-retry-factor": "2", # Exponential backoff + "Helicone-Fallbacks": '["gpt-3.5-turbo", "gpt-4"]', +} + +response = litellm.completion( + model="gpt-4", + messages=[{"role": "user", "content": "Hello"}] +) +``` + + + + +```yaml title="config.yaml" +model_list: + - model_name: gpt-4 + litellm_params: + model: gpt-4 + api_key: os.environ/OPENAI_API_KEY + api_base: "https://oai.hconeai.com/v1" + +default_litellm_params: + headers: + Helicone-Auth: "Bearer ${HELICONE_API_KEY}" + Helicone-Retry-Enabled: "true" + helicone-retry-num: "3" + helicone-retry-factor: "2" + Helicone-Fallbacks: '["gpt-3.5-turbo", "gpt-4"]' + +environment_variables: + HELICONE_API_KEY: "your-helicone-key" + OPENAI_API_KEY: "your-openai-key" +``` + + + + > **Supported Headers** - For a full list of supported Helicone headers and their descriptions, please refer to the [Helicone documentation](https://docs.helicone.ai/getting-started/quick-start). > By utilizing these headers and metadata options, you can gain deeper insights into your LLM usage, optimize performance, and better manage your AI workflows with Helicone and LiteLLM. diff --git a/docs/my-website/docs/observability/posthog_integration.md b/docs/my-website/docs/observability/posthog_integration.md new file mode 100644 index 0000000000..7e6a0e1076 --- /dev/null +++ b/docs/my-website/docs/observability/posthog_integration.md @@ -0,0 +1,216 @@ +# PostHog - Tracking LLM Usage Analytics + +## What is PostHog? + +PostHog is an open-source product analytics platform that helps you track and analyze how users interact with your product. For LLM applications, PostHog provides specialized AI features to track model usage, performance, and user interactions with your AI features. + +## Usage with LiteLLM Proxy (LLM Gateway) + +**Step 1**: Create a `config.yaml` file and set `litellm_settings`: `success_callback` + +```yaml +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: gpt-3.5-turbo + +litellm_settings: + success_callback: ["posthog"] + failure_callback: ["posthog"] +``` + +**Step 2**: Set required environment variables + +```shell +export POSTHOG_API_KEY="your-posthog-api-key" +# Optional, defaults to https://app.posthog.com +export POSTHOG_API_URL="https://app.posthog.com" # optional +``` + +**Step 3**: Start the proxy, make a test request + +Start proxy + +```shell +litellm --config config.yaml --debug +``` + +Test Request + +```shell +curl --location 'http://0.0.0.0:4000/chat/completions' \ + --header 'Content-Type: application/json' \ + --data '{ + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ], + "metadata": { + "user_id": "user-123", + "custom_field": "custom_value" + } +}' +``` + +## Usage with LiteLLM Python SDK + +### Quick Start + +Use just 2 lines of code, to instantly log your responses **across all providers** with PostHog: + +```python +litellm.success_callback = ["posthog"] +litellm.failure_callback = ["posthog"] # logs errors to posthog +``` +```python +import litellm +import os + +# from PostHog +os.environ["POSTHOG_API_KEY"] = "" +# Optional, defaults to https://app.posthog.com +os.environ["POSTHOG_API_URL"] = "" # optional + +# LLM API Keys +os.environ['OPENAI_API_KEY']="" + +# set posthog as a callback, litellm will send the data to posthog +litellm.success_callback = ["posthog"] + +# openai call +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "Hi - i'm openai"} + ], + metadata = { + "user_id": "user-123", # set posthog user ID + } +) +``` + +### Advanced + +#### Set User ID and Custom Metadata + +Pass `user_id` in `metadata` to associate events with specific users in PostHog: + +**With LiteLLM Python SDK:** + +```python +import litellm + +litellm.success_callback = ["posthog"] + +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "Hello world"} + ], + metadata={ + "user_id": "user-123", # Add user ID for PostHog tracking + "custom_field": "custom_value" # Add custom metadata + } +) +``` + +**With LiteLLM Proxy using OpenAI Python SDK:** + +```python +import openai + +client = openai.OpenAI( + api_key="sk-1234", # Your LiteLLM Proxy API key + base_url="http://0.0.0.0:4000" # Your LiteLLM Proxy URL +) + +response = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "Hello world"} + ], + extra_body={ + "metadata": { + "user_id": "user-123", # Add user ID for PostHog tracking + "project_name": "my-project", # Add custom metadata + "environment": "production" + } + } +) +``` + +#### Disable Logging for Specific Calls + +Use the `no-log` flag to prevent logging for specific calls: + +```python +import litellm + +litellm.success_callback = ["posthog"] + +response = litellm.completion( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": "This won't be logged"} + ], + metadata={"no-log": True} +) +``` + +## What's Logged to PostHog? + +When LiteLLM logs to PostHog, it captures detailed information about your LLM usage: + +### For Completion Calls +- **Model Information**: Provider, model name, model parameters +- **Usage Metrics**: Input tokens, output tokens, total cost +- **Performance**: Latency, completion time +- **Content**: Input messages, model responses (respects privacy settings) +- **Metadata**: Custom fields, user ID, trace information + +### For Embedding Calls +- **Model Information**: Provider, model name +- **Usage Metrics**: Input tokens, total cost +- **Performance**: Latency +- **Content**: Input text (respects privacy settings) +- **Metadata**: Custom fields, user ID, trace information + +### For Errors +- **Error Details**: Error type, error message, stack trace +- **Context**: Model, provider, input that caused the error +- **Timing**: When the error occurred, request duration + +## Environment Variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `POSTHOG_API_KEY` | Yes | Your PostHog project API key | +| `POSTHOG_API_URL` | No | PostHog API URL (defaults to https://app.posthog.com) | + +## Troubleshooting + +### 1. Missing API Key +``` +Error: POSTHOG_API_KEY is not set +``` + +Set your PostHog API key: +```python +import os +os.environ["POSTHOG_API_KEY"] = "your-api-key" +``` + +### 2. Custom PostHog Instance +If you're using a self-hosted PostHog instance: +```python +import os +os.environ["POSTHOG_API_URL"] = "https://your-posthog-instance.com" +``` + +### 3. Events Not Appearing +- Check that your API key is correct +- Verify network connectivity to PostHog +- Events may take a few minutes to appear in PostHog dashboard \ No newline at end of file diff --git a/docs/my-website/docs/providers/bedrock.md b/docs/my-website/docs/providers/bedrock.md index c191b74226..86e9ac5e3e 100644 --- a/docs/my-website/docs/providers/bedrock.md +++ b/docs/my-website/docs/providers/bedrock.md @@ -308,6 +308,65 @@ print(response) +## Usage - Request Metadata + +Attach metadata to Bedrock requests for logging and cost attribution. + + + + +```python +import os +from litellm import completion + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + +response = completion( + model="bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0", + messages=[{"role": "user", "content": "Hello, how are you?"}], + requestMetadata={ + "cost_center": "engineering", + "user_id": "user123" + } +) +``` + + + +**Set on yaml** + +```yaml +model_list: + - model_name: bedrock-claude-v1 + litellm_params: + model: bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0 + requestMetadata: + cost_center: "engineering" +``` + +**Set on request** + +```python +import openai +client = openai.OpenAI( + api_key="anything", + base_url="http://0.0.0.0:4000" +) + +response = client.chat.completions.create( + model="bedrock-claude-v1", + messages=[{"role": "user", "content": "Hello"}], + extra_body={ + "requestMetadata": {"cost_center": "engineering"} + } +) +``` + + + + ## Usage - Function Calling / Tool calling LiteLLM supports tool calling via Bedrock's Converse and Invoke API's. @@ -889,6 +948,19 @@ curl http://0.0.0.0:4000/v1/chat/completions \ Example of using [Bedrock Guardrails with LiteLLM](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails-use-converse-api.html) +### Selective Content Moderation with `guarded_text` + +LiteLLM supports selective content moderation using the `guarded_text` content type. This allows you to wrap only specific content that should be moderated by Bedrock Guardrails, rather than evaluating the entire conversation. + +**How it works:** +- Content with `type: "guarded_text"` gets automatically wrapped in `guardrailConverseContent` blocks +- Only the wrapped content is evaluated by Bedrock Guardrails +- Regular content with `type: "text"` bypasses guardrail evaluation + +:::note +If `guarded_text` is not used, the entire conversation history will be sent to the guardrail for evaluation, which can increase latency and costs. +::: + @@ -915,6 +987,24 @@ response = completion( "trace": "disabled", # The trace behavior for the guardrail. Can either be "disabled" or "enabled" }, ) + +# Selective guardrail usage with guarded_text - only specific content is evaluated +response_guard = completion( + model="anthropic.claude-v2", + messages=[ + { + "role": "user", + "content": [ + {"type": "text", "text": "What is the main topic of this legal document?"}, + {"type": "guarded_text", "text": "This document contains sensitive legal information that should be moderated by guardrails."} + ] + } + ], + guardrailConfig={ + "guardrailIdentifier": "gr-abc123", + "guardrailVersion": "DRAFT" + } +) ``` @@ -993,7 +1083,20 @@ response = client.chat.completions.create(model="bedrock-claude-v1", messages = temperature=0.7 ) -print(response) +# For adding selective guardrail usage with guarded_text +response_guard = client.chat.completions.create(model="bedrock-claude-v1", messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "What is the main topic of this legal document?"}, + {"type": "guarded_text", "text": "This document contains sensitive legal information that should be moderated by guardrails."} + ] + } +], +temperature=0.7 +) + +print(response_guard) ``` @@ -1777,6 +1880,7 @@ Here's an example of using a bedrock model with LiteLLM. For a complete list, re | Mistral 7B Instruct | `completion(model='bedrock/mistral.mistral-7b-instruct-v0:2', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | | Mixtral 8x7B Instruct | `completion(model='bedrock/mistral.mixtral-8x7b-instruct-v0:1', messages=messages)` | `os.environ['AWS_ACCESS_KEY_ID']`, `os.environ['AWS_SECRET_ACCESS_KEY']`, `os.environ['AWS_REGION_NAME']` | + ## Bedrock Embedding ### API keys @@ -1798,11 +1902,29 @@ response = embedding( print(response) ``` +#### Titan V2 - encoding_format support +```python +from litellm import embedding +# Float format (default) +response = embedding( + model="bedrock/amazon.titan-embed-text-v2:0", + input=["good morning from litellm"], + encoding_format="float" # Returns float array +) + +# Binary format +response = embedding( + model="bedrock/amazon.titan-embed-text-v2:0", + input=["good morning from litellm"], + encoding_format="base64" # Returns base64 encoded binary +) +``` + ## Supported AWS Bedrock Embedding Models | Model Name | Usage | Supported Additional OpenAI params | |----------------------|---------------------------------------------|-----| -| Titan Embeddings V2 | `embedding(model="bedrock/amazon.titan-embed-text-v2:0", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/amazon_titan_v2_transformation.py#L59) | +| Titan Embeddings V2 | `embedding(model="bedrock/amazon.titan-embed-text-v2:0", input=input)` | `dimensions`, `encoding_format` | | Titan Embeddings - V1 | `embedding(model="bedrock/amazon.titan-embed-text-v1", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/amazon_titan_g1_transformation.py#L53) | Titan Multimodal Embeddings | `embedding(model="bedrock/amazon.titan-embed-image-v1", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/amazon_titan_multimodal_transformation.py#L28) | | Cohere Embeddings - English | `embedding(model="bedrock/cohere.embed-english-v3", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/cohere_transformation.py#L18) @@ -1891,6 +2013,39 @@ curl -L -X POST 'http://0.0.0.0:4000/v1/images/generations' \ +### Using Inference Profiles with Image Generation + +For AWS Bedrock Application Inference Profiles with image generation, use the `model_id` parameter to specify the inference profile ARN: + + + + +```python +from litellm import image_generation + +response = image_generation( + model="bedrock/amazon.nova-canvas-v1:0", + model_id="arn:aws:bedrock:eu-west-1:000000000000:application-inference-profile/a0a0a0a0a0a0", + prompt="A cute baby sea otter" +) +print(f"response: {response}") +``` + + + + +```yaml +model_list: + - model_name: nova-canvas-inference-profile + litellm_params: + model: bedrock/amazon.nova-canvas-v1:0 + model_id: arn:aws:bedrock:eu-west-1:000000000000:application-inference-profile/a0a0a0a0a0a0 + aws_region_name: "eu-west-1" +``` + + + + ## Supported AWS Bedrock Image Generation Models | Model Name | Function Call | diff --git a/docs/my-website/docs/providers/bedrock_embedding.md b/docs/my-website/docs/providers/bedrock_embedding.md new file mode 100644 index 0000000000..95ee8d3d22 --- /dev/null +++ b/docs/my-website/docs/providers/bedrock_embedding.md @@ -0,0 +1,95 @@ +# Bedrock Embedding + +## Supported Embedding Models + +| Provider | LiteLLM Route | AWS Documentation | +|----------|---------------|-------------------| +| Amazon Titan | `bedrock/amazon.*` | [Amazon Titan Embeddings](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) | +| Cohere | `bedrock/cohere.*` | [Cohere Embeddings](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-cohere-embed.html) | +| TwelveLabs | `bedrock/us.twelvelabs.*` | [TwelveLabs](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-twelvelabs.html) | + +### API keys +This can be set as env variables or passed as **params to litellm.embedding()** +```python +import os +os.environ["AWS_ACCESS_KEY_ID"] = "" # Access key +os.environ["AWS_SECRET_ACCESS_KEY"] = "" # Secret access key +os.environ["AWS_REGION_NAME"] = "" # us-east-1, us-east-2, us-west-1, us-west-2 +``` + +## Usage +### LiteLLM Python SDK +```python +from litellm import embedding +response = embedding( + model="bedrock/amazon.titan-embed-text-v1", + input=["good morning from litellm"], +) +print(response) +``` + +### LiteLLM Proxy Server + +#### 1. Setup config.yaml +```yaml +model_list: + - model_name: titan-embed-v1 + litellm_params: + model: bedrock/amazon.titan-embed-text-v1 + aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID + aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY + aws_region_name: us-east-1 + - model_name: titan-embed-v2 + litellm_params: + model: bedrock/amazon.titan-embed-text-v2:0 + aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID + aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY + aws_region_name: us-east-1 +``` + +#### 2. Start Proxy +```bash +litellm --config /path/to/config.yaml +``` + +#### 3. Use with OpenAI Python SDK +```python +import openai +client = openai.OpenAI( + api_key="anything", + base_url="http://0.0.0.0:4000" +) + +response = client.embeddings.create( + input=["good morning from litellm"], + model="titan-embed-v1" +) +print(response) +``` + +#### 4. Use with LiteLLM Python SDK +```python +import litellm +response = litellm.embedding( + model="titan-embed-v1", # model alias from config.yaml + input=["good morning from litellm"], + api_base="http://0.0.0.0:4000", + api_key="anything" +) +print(response) +``` + +## Supported AWS Bedrock Embedding Models + +| Model Name | Usage | Supported Additional OpenAI params | +|----------------------|---------------------------------------------|-----| +| Titan Embeddings V2 | `embedding(model="bedrock/amazon.titan-embed-text-v2:0", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/amazon_titan_v2_transformation.py#L59) | +| Titan Embeddings - V1 | `embedding(model="bedrock/amazon.titan-embed-text-v1", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/amazon_titan_g1_transformation.py#L53) +| Titan Multimodal Embeddings | `embedding(model="bedrock/amazon.titan-embed-image-v1", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/amazon_titan_multimodal_transformation.py#L28) | +| TwelveLabs Marengo Embed 2.7 | `embedding(model="bedrock/us.twelvelabs.marengo-embed-2-7-v1:0", input=input)` | Supports multimodal input (text, video, audio, image) | +| Cohere Embeddings - English | `embedding(model="bedrock/cohere.embed-english-v3", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/cohere_transformation.py#L18) +| Cohere Embeddings - Multilingual | `embedding(model="bedrock/cohere.embed-multilingual-v3", input=input)` | [here](https://github.com/BerriAI/litellm/blob/f5905e100068e7a4d61441d7453d7cf5609c2121/litellm/llms/bedrock/embed/cohere_transformation.py#L18) + +### Advanced - [Drop Unsupported Params](https://docs.litellm.ai/docs/completion/drop_params#openai-proxy-usage) + +### Advanced - [Pass model/provider-specific Params](https://docs.litellm.ai/docs/completion/provider_specific_params#proxy-usage) \ No newline at end of file diff --git a/docs/my-website/docs/providers/compactifai.md b/docs/my-website/docs/providers/compactifai.md index 0e6e8f4ed3..1aa8146307 100644 --- a/docs/my-website/docs/providers/compactifai.md +++ b/docs/my-website/docs/providers/compactifai.md @@ -4,7 +4,7 @@ import TabItem from '@theme/TabItem'; # CompactifAI https://docs.compactif.ai/ -CompactifAI offers highly compressed versions of leading language models, delivering up to **70% lower inference costs**, **4x throughput gains**, and **low-latency inference** with minimal quality loss (<5%). CompactifAI's OpenAI-compatible API makes integration straightforward, enabling developers to build ultra-efficient, scalable AI applications with superior concurrency and resource efficiency. +CompactifAI offers highly compressed versions of leading language models, delivering up to **70% lower inference costs**, **4x throughput gains**, and **low-latency inference** with minimal quality loss (under 5%). CompactifAI's OpenAI-compatible API makes integration straightforward, enabling developers to build ultra-efficient, scalable AI applications with superior concurrency and resource efficiency. | Property | Details | |-------|-------| @@ -192,7 +192,7 @@ Common model formats: ## Benefits - **Cost Efficient**: Up to 70% lower inference costs compared to standard models -- **High Performance**: 4x throughput gains with minimal quality loss (<5%) +- **High Performance**: 4x throughput gains with minimal quality loss (under 5%) - **Low Latency**: Optimized for fast response times - **Drop-in Replacement**: Full OpenAI API compatibility - **Scalable**: Superior concurrency and resource efficiency diff --git a/docs/my-website/docs/providers/vertex.md b/docs/my-website/docs/providers/vertex.md index fda0cee862..cb90b7434e 100644 --- a/docs/my-website/docs/providers/vertex.md +++ b/docs/my-website/docs/providers/vertex.md @@ -2509,150 +2509,6 @@ print("response from proxy", response) -## **Batch APIs** - -Just add the following Vertex env vars to your environment. - -```bash -# GCS Bucket settings, used to store batch prediction files in -export GCS_BUCKET_NAME = "litellm-testing-bucket" # the bucket you want to store batch prediction files in -export GCS_PATH_SERVICE_ACCOUNT="/path/to/service_account.json" # path to your service account json file - -# Vertex /batch endpoint settings, used for LLM API requests -export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service_account.json" # path to your service account json file -export VERTEXAI_LOCATION="us-central1" # can be any vertex location -export VERTEXAI_PROJECT="my-test-project" -``` - -### Usage - - -#### 1. Create a file of batch requests for vertex - -LiteLLM expects the file to follow the **[OpenAI batches files format](https://platform.openai.com/docs/guides/batch)** - -Each `body` in the file should be an **OpenAI API request** - -Create a file called `vertex_batch_completions.jsonl` in the current working directory, the `model` should be the Vertex AI model name -``` -{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gemini-1.5-flash-001", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} -{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gemini-1.5-flash-001", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} -``` - - -#### 2. Upload a File of batch requests - -For `vertex_ai` litellm will upload the file to the provided `GCS_BUCKET_NAME` - -```python -import os -oai_client = OpenAI( - api_key="sk-1234", # litellm proxy API key - base_url="http://localhost:4000" # litellm proxy base url -) -file_name = "vertex_batch_completions.jsonl" # -_current_dir = os.path.dirname(os.path.abspath(__file__)) -file_path = os.path.join(_current_dir, file_name) -file_obj = oai_client.files.create( - file=open(file_path, "rb"), - purpose="batch", - extra_body={"custom_llm_provider": "vertex_ai"}, # tell litellm to use vertex_ai for this file upload -) -``` - -**Expected Response** - -```json -{ - "id": "gs://litellm-testing-bucket/litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001/d3f198cd-c0d1-436d-9b1e-28e3f282997a", - "bytes": 416, - "created_at": 1733392026, - "filename": "litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001/d3f198cd-c0d1-436d-9b1e-28e3f282997a", - "object": "file", - "purpose": "batch", - "status": "uploaded", - "status_details": null -} -``` - - - -#### 3. Create a batch - -```python -batch_input_file_id = file_obj.id # use `file_obj` from step 2 -create_batch_response = oai_client.batches.create( - completion_window="24h", - endpoint="/v1/chat/completions", - input_file_id=batch_input_file_id, # example input_file_id = "gs://litellm-testing-bucket/litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001/c2b1b785-252b-448c-b180-033c4c63b3ce" - extra_body={"custom_llm_provider": "vertex_ai"}, # tell litellm to use `vertex_ai` for this batch request -) -``` - -**Expected Response** - -```json -{ - "id": "3814889423749775360", - "completion_window": "24hrs", - "created_at": 1733392026, - "endpoint": "", - "input_file_id": "gs://litellm-testing-bucket/litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001/d3f198cd-c0d1-436d-9b1e-28e3f282997a", - "object": "batch", - "status": "validating", - "cancelled_at": null, - "cancelling_at": null, - "completed_at": null, - "error_file_id": null, - "errors": null, - "expired_at": null, - "expires_at": null, - "failed_at": null, - "finalizing_at": null, - "in_progress_at": null, - "metadata": null, - "output_file_id": "gs://litellm-testing-bucket/litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001", - "request_counts": null -} -``` - -#### 4. Retrieve a batch - -```python -retrieved_batch = oai_client.batches.retrieve( - batch_id=create_batch_response.id, - extra_body={"custom_llm_provider": "vertex_ai"}, # tell litellm to use `vertex_ai` for this batch request -) -``` - -**Expected Response** - -```json -{ - "id": "3814889423749775360", - "completion_window": "24hrs", - "created_at": 1736500100, - "endpoint": "", - "input_file_id": "gs://example-bucket-1-litellm/litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001/7b2e47f5-3dd4-436d-920f-f9155bbdc952", - "object": "batch", - "status": "completed", - "cancelled_at": null, - "cancelling_at": null, - "completed_at": null, - "error_file_id": null, - "errors": null, - "expired_at": null, - "expires_at": null, - "failed_at": null, - "finalizing_at": null, - "in_progress_at": null, - "metadata": null, - "output_file_id": "gs://example-bucket-1-litellm/litellm-vertex-files/publishers/google/models/gemini-1.5-flash-001", - "request_counts": null -} -``` - - ## **Fine Tuning APIs** @@ -2758,6 +2614,44 @@ curl http://localhost:4000/v1/fine_tuning/jobs \ +## Labels + + +Google enables you to add custom metadata to its `generateContent` and `streamGenerateContent` calls. +This mechanism is useful in Vertex AI because it allows costs and usage tracking over multiple +different applications or users. + + +### Usage + +You can use that feature through LiteLLM by sending `labels` or `metadata` field in your requests. + +If the client sets the `labels` field in the request to the LiteLLM, +the LiteLLM will pass the `labels` field to the Vertex AI backend. + +If the client sets the `metadata` field in the request to the LiteLLM and the `labels` field is not set, +the LiteLLM will create the `labels` field filled with `metadata` key/value pairs for all string values and +pass it to the Vertex AI backend. + + +Here is an example JSON request demonstrating the labels usage: + +```json +{ + "model": "gemini-2.0-flash-lite", + "messages": [ + { "role": "user", "content": "respond in 20 words. who are you?" } + ], + "labels": { + "client_app": "acme_comp_financial_app", + "department": "finance", + "project": "acme_ai" + } +} +``` + + + ## Extra ### Using `GOOGLE_APPLICATION_CREDENTIALS` diff --git a/docs/my-website/docs/providers/vertex_batch.md b/docs/my-website/docs/providers/vertex_batch.md new file mode 100644 index 0000000000..4eaa0d69d4 --- /dev/null +++ b/docs/my-website/docs/providers/vertex_batch.md @@ -0,0 +1,264 @@ +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## **Batch APIs** + +Just add the following Vertex env vars to your environment. + +```bash +# GCS Bucket settings, used to store batch prediction files in +export GCS_BUCKET_NAME="my-batch-bucket" # the bucket you want to store batch prediction files in +export GCS_PATH_SERVICE_ACCOUNT="/path/to/service_account.json" # path to your service account json file + +# Vertex /batch endpoint settings, used for LLM API requests +export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service_account.json" # path to your service account json file +export VERTEXAI_LOCATION="us-central1" # can be any vertex location +export VERTEXAI_PROJECT="my-project" +``` + +### Usage + +Follow this complete workflow: create JSONL file → upload file → create batch → retrieve batch status → get file content + +#### 1. Create a JSONL file of batch requests + +LiteLLM expects the file to follow the **[OpenAI batches files format](https://platform.openai.com/docs/guides/batch)**. + +Each `body` in the file should be an **OpenAI API request**. + +Create a file called `batch_requests.jsonl` with your requests: +```jsonl +{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gemini-2.5-flash-lite", "messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gemini-2.5-flash-lite", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello world!"}],"max_tokens": 10}} +``` + +#### 2. Upload the file + +Upload your JSONL file. For `vertex_ai`, the file will be stored in your configured GCS bucket provided by `GCS_BUCKET_NAME`. + + + + +```python showLineNumbers title="upload_file.py" +from openai import OpenAI + +oai_client = OpenAI( + api_key="sk-1234", # litellm proxy API key + base_url="http://localhost:4000" # litellm proxy base url +) + +file_obj = oai_client.files.create( + file=open("batch_requests.jsonl", "rb"), + purpose="batch", + extra_body={"custom_llm_provider": "vertex_ai"} +) + +print(f"File uploaded with ID: {file_obj.id}") +``` + + + + +```bash showLineNumbers title="Upload File" +curl --request POST \ + --url http://localhost:4000/v1/files \ + --header 'Content-Type: multipart/form-data' \ + --form purpose=batch \ + --form file=@batch_requests.jsonl \ + --form custom_llm_provider=vertex_ai +``` + + + + +**Expected Response:** + +```json +{ + "id": "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/abc123-def4-5678-9012-34567890abcd", + "bytes": 416, + "created_at": 1758303684, + "filename": "litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/abc123-def4-5678-9012-34567890abcd", + "object": "file", + "purpose": "batch", + "status": "uploaded", + "expires_at": null, + "status_details": null +} +``` + +#### 3. Create a batch + +Create a batch job using the uploaded file ID. + + + + +```python showLineNumbers title="create_batch.py" +batch_input_file_id = file_obj.id # from step 2 +create_batch_response = oai_client.batches.create( + completion_window="24h", + endpoint="/v1/chat/completions", + input_file_id=batch_input_file_id, # e.g. "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/abc123-def4-5678-9012-34567890abcd" + extra_body={"custom_llm_provider": "vertex_ai"} +) + +print(f"Batch created with ID: {create_batch_response.id}") +``` + + + + +```bash showLineNumbers title="Create Batch Request" +curl --request POST \ + --url http://localhost:4000/v1/batches \ + --header 'Content-Type: application/json' \ + --data '{ + "input_file_id": "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/abc123-def4-5678-9012-34567890abcd", + "endpoint": "/v1/chat/completions", + "completion_window": "24h", + "custom_llm_provider": "vertex_ai" +}' +``` + + + + +**Expected Response:** + +```json +{ + "id": "7814463557919047680", + "completion_window": "24hrs", + "created_at": 1758328011, + "endpoint": "", + "input_file_id": "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/abc123-def4-5678-9012-34567890abcd", + "object": "batch", + "status": "validating", + "cancelled_at": null, + "cancelling_at": null, + "completed_at": null, + "error_file_id": null, + "errors": null, + "expired_at": null, + "expires_at": null, + "failed_at": null, + "finalizing_at": null, + "in_progress_at": null, + "metadata": null, + "output_file_id": "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite", + "request_counts": null, + "usage": null +} +``` + +#### 4. Retrieve batch status + +Check the status of your batch job. The batch will progress through states: `validating` → `in_progress` → `completed`. + + + + +```python showLineNumbers title="retrieve_batch.py" +retrieved_batch = oai_client.batches.retrieve( + batch_id=create_batch_response.id, # Created batch id, e.g. 7814463557919047680 + extra_body={"custom_llm_provider": "vertex_ai"} +) + +print(f"Batch status: {retrieved_batch.status}") +if retrieved_batch.status == "completed": + print(f"Output file: {retrieved_batch.output_file_id}") +``` + + + + +```bash showLineNumbers title="Retrieve Batch Status" +curl --request GET \ + --url 'http://localhost:4000/batches/7814463557919047680?provider=vertex_ai' \ + --header 'Authorization: Bearer sk-1234' +``` + + + + +**Expected Response (when completed):** + +```json +{ + "id": "7814463557919047680", + "completion_window": "24hrs", + "created_at": 1758328011, + "endpoint": "", + "input_file_id": "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/abc123-def4-5678-9012-34567890abcd", + "object": "batch", + "status": "completed", + "cancelled_at": null, + "cancelling_at": null, + "completed_at": null, + "error_file_id": null, + "errors": null, + "expired_at": null, + "expires_at": null, + "failed_at": null, + "finalizing_at": null, + "in_progress_at": null, + "metadata": null, + "output_file_id": "gs://my-batch-bucket/litellm-vertex-files/publishers/google/models/gemini-2.5-flash-lite/prediction-model-2025-09-19T21:26:51.569037Z/predictions.jsonl", + "request_counts": null, + "usage": null +} +``` + +#### 5. Get file content + +Once the batch is completed, retrieve the results using the `output_file_id` from the batch response. + +**Important:** The `output_file_id` must be URL encoded when used in the request path. + + + + +```python showLineNumbers title="get_file_content.py" +import urllib.parse +import json + +output_file_id = retrieved_batch.output_file_id +# URL encode the file ID +encoded_file_id = urllib.parse.quote_plus(output_file_id) + +# Get file content +file_content = oai_client.files.content( + file_id=encoded_file_id, + extra_body={"custom_llm_provider": "vertex_ai"} +) + +# Process the results +for line in file_content.text.strip().split('\n'): + result = json.loads(line) + print(f"Request: {result['request']}") + print(f"Response: {result['response']}") + print("---") +``` + + + + +```bash showLineNumbers title="Get File Content" +# Note: The file ID must be URL encoded +curl --request GET \ + --url 'http://localhost:4000/files/gs%253A%252F%252Fmy-batch-bucket%252Flitellm-vertex-files%252Fpublishers%252Fgoogle%252Fmodels%252Fgemini-2.5-flash-lite%252Fprediction-model-2025-09-19T21%253A26%253A51.569037Z%252Fpredictions.jsonl/content?provider=vertex_ai' \ + --header 'Authorization: Bearer sk-1234' +``` + + + + +**Expected Response:** + +The response contains JSONL format with one result per line: + +```jsonl +{"status":"","processed_time":"2025-09-19T21:29:47.352+00:00","request":{"contents":[{"parts":[{"text":"Hello world!"}],"role":"user"}],"generationConfig":{"max_output_tokens":10},"system_instruction":{"parts":[{"text":"You are a helpful assistant."}]}},"response":{"candidates":[{"avgLogprobs":-0.48079710006713866,"content":{"parts":[{"text":"Hello there! It's nice to meet you"}],"role":"model"},"finishReason":"MAX_TOKENS"}],"createTime":"2025-09-19T21:29:47.484619Z","modelVersion":"gemini-2.5-flash-lite","responseId":"S8vNaIvKHdvshMIP_aOtuAg","usageMetadata":{"candidatesTokenCount":10,"candidatesTokensDetails":[{"modality":"TEXT","tokenCount":10}],"promptTokenCount":9,"promptTokensDetails":[{"modality":"TEXT","tokenCount":9}],"totalTokenCount":19,"trafficType":"ON_DEMAND"}}} +{"status":"","processed_time":"2025-09-19T21:29:47.358+00:00","request":{"contents":[{"parts":[{"text":"Hello world!"}],"role":"user"}],"generationConfig":{"max_output_tokens":10},"system_instruction":{"parts":[{"text":"You are an unhelpful assistant."}]}},"response":{"candidates":[{"avgLogprobs":-0.6168075137668185,"content":{"parts":[{"text":"I am unable to assist with this request."}],"role":"model"},"finishReason":"STOP"}],"createTime":"2025-09-19T21:29:47.470889Z","modelVersion":"gemini-2.5-flash-lite","responseId":"S8vNaOneHISShMIP28nA8QQ","usageMetadata":{"candidatesTokenCount":9,"candidatesTokensDetails":[{"modality":"TEXT","tokenCount":9}],"promptTokenCount":9,"promptTokensDetails":[{"modality":"TEXT","tokenCount":9}],"totalTokenCount":18,"trafficType":"ON_DEMAND"}}} +``` diff --git a/docs/my-website/docs/proxy/budget_reset_and_tz.md b/docs/my-website/docs/proxy/budget_reset_and_tz.md index 541ff6a2f0..340e33afe1 100644 --- a/docs/my-website/docs/proxy/budget_reset_and_tz.md +++ b/docs/my-website/docs/proxy/budget_reset_and_tz.md @@ -29,5 +29,6 @@ Common timezone values: - `US/Pacific` - Pacific Time - `Europe/London` - UK Time - `Asia/Kolkata` - Indian Standard Time (IST) +- `Asia/Bangkok` - Indochina Time (ICT) - `Asia/Tokyo` - Japan Standard Time - `Australia/Sydney` - Australian Eastern Time diff --git a/docs/my-website/docs/proxy/config_settings.md b/docs/my-website/docs/proxy/config_settings.md index ee857f700a..974e95a07b 100644 --- a/docs/my-website/docs/proxy/config_settings.md +++ b/docs/my-website/docs/proxy/config_settings.md @@ -93,6 +93,8 @@ callback_settings: general_settings: completion_model: string + store_prompts_in_spend_logs: boolean + forward_client_headers_to_llm_api: boolean disable_spend_logs: boolean # turn off writing each transaction to the db disable_master_key_return: boolean # turn off returning master key on UI (checked on '/user/info' endpoint) disable_retry_on_max_parallel_request_limit_error: boolean # turn off retries when max parallel request limit is reached @@ -121,6 +123,35 @@ general_settings: alerting: ["slack", "email"] alerting_threshold: 0 use_client_credentials_pass_through_routes: boolean # use client credentials for all pass through routes like "/vertex-ai", /bedrock/. When this is True Virtual Key auth will not be applied on these endpoints + +router_settings: + routing_strategy: simple-shuffle # Literal["simple-shuffle", "least-busy", "usage-based-routing","latency-based-routing"], default="simple-shuffle" - RECOMMENDED for best performance + redis_host: # string + redis_password: # string + redis_port: # string + enable_pre_call_checks: true # bool - Before call is made check if a call is within model context window + allowed_fails: 3 # cooldown model if it fails > 1 call in a minute. + cooldown_time: 30 # (in seconds) how long to cooldown model if fails/min > allowed_fails + disable_cooldowns: True # bool - Disable cooldowns for all models + enable_tag_filtering: True # bool - Use tag based routing for requests + retry_policy: { # Dict[str, int]: retry policy for different types of exceptions + "AuthenticationErrorRetries": 3, + "TimeoutErrorRetries": 3, + "RateLimitErrorRetries": 3, + "ContentPolicyViolationErrorRetries": 4, + "InternalServerErrorRetries": 4 + } + allowed_fails_policy: { + "BadRequestErrorAllowedFails": 1000, # Allow 1000 BadRequestErrors before cooling down a deployment + "AuthenticationErrorAllowedFails": 10, # int + "TimeoutErrorAllowedFails": 12, # int + "RateLimitErrorAllowedFails": 10000, # int + "ContentPolicyViolationErrorAllowedFails": 15, # int + "InternalServerErrorAllowedFails": 20, # int + } + content_policy_fallbacks=[{"claude-2": ["my-fallback-model"]}] # List[Dict[str, List[str]]]: Fallback model for content policy violations + fallbacks=[{"claude-2": ["my-fallback-model"]}] # List[Dict[str, List[str]]]: Fallback model for all errors + ``` ### litellm_settings - Reference @@ -659,6 +690,8 @@ router_settings: | PILLAR_API_KEY | API key for Pillar API Guardrails | PILLAR_ON_FLAGGED_ACTION | Action to take when content is flagged ('block' or 'monitor') | POD_NAME | Pod name for the server, this will be [emitted to `datadog` logs](https://docs.litellm.ai/docs/proxy/logging#datadog) as `POD_NAME` +| POSTHOG_API_KEY | API key for PostHog analytics integration +| POSTHOG_API_URL | Base URL for PostHog API (defaults to https://us.i.posthog.com) | PREDIBASE_API_BASE | Base URL for Predibase API | PRESIDIO_ANALYZER_API_BASE | Base URL for Presidio Analyzer service | PRESIDIO_ANONYMIZER_API_BASE | Base URL for Presidio Anonymizer service @@ -739,3 +772,4 @@ router_settings: | WEBHOOK_URL | URL for receiving webhooks from external services | SPEND_LOG_RUN_LOOPS | Constant for setting how many runs of 1000 batch deletes should spend_log_cleanup task run | | SPEND_LOG_CLEANUP_BATCH_SIZE | Number of logs deleted per batch during cleanup. Default is 1000 | +| COROUTINE_CHECKER_MAX_SIZE_IN_MEMORY | Maximum size for CoroutineChecker in-memory cache. Default is 1000 | \ No newline at end of file diff --git a/docs/my-website/docs/proxy/deploy.md b/docs/my-website/docs/proxy/deploy.md index cdb6f7018f..6a11d069fb 100644 --- a/docs/my-website/docs/proxy/deploy.md +++ b/docs/my-website/docs/proxy/deploy.md @@ -13,6 +13,7 @@ To start using Litellm, run the following commands in a shell: ```bash # Get the code curl -O https://raw.githubusercontent.com/BerriAI/litellm/main/docker-compose.yml +curl -O https://raw.githubusercontent.com/BerriAI/litellm/main/prometheus.yml # Add the master key - you can change this after setup echo 'LITELLM_MASTER_KEY="sk-1234"' > .env diff --git a/docs/my-website/docs/proxy/dynamic_rate_limit.md b/docs/my-website/docs/proxy/dynamic_rate_limit.md new file mode 100644 index 0000000000..74a2d4c6c1 --- /dev/null +++ b/docs/my-website/docs/proxy/dynamic_rate_limit.md @@ -0,0 +1,241 @@ + +# Dynamic TPM/RPM Allocation + +Prevent projects from gobbling too much tpm/rpm. + +Dynamically allocate TPM/RPM quota to api keys, based on active keys in that minute. [**See Code**](https://github.com/BerriAI/litellm/blob/9bffa9a48e610cc6886fc2dce5c1815aeae2ad46/litellm/proxy/hooks/dynamic_rate_limiter.py#L125) + +## Quick Start Usage + +1. Setup config.yaml + +```yaml showLineNumbers title="config.yaml" +model_list: + - model_name: my-fake-model + litellm_params: + model: gpt-3.5-turbo + api_key: my-fake-key + mock_response: hello-world + tpm: 60 + +litellm_settings: + callbacks: ["dynamic_rate_limiter_v3"] + +general_settings: + master_key: sk-1234 # OR set `LITELLM_MASTER_KEY=".."` in your .env + database_url: postgres://.. # OR set `DATABASE_URL=".."` in your .env +``` + +2. Start proxy + +```bash +litellm --config /path/to/config.yaml +``` + +3. Test it! + +```python showLineNumbers title="test.py" +""" +- Run 2 concurrent teams calling same model +- model has 60 TPM +- Mock response returns 30 total tokens / request +- Each team will only be able to make 1 request per minute +""" + +import requests +from openai import OpenAI, RateLimitError + +def create_key(api_key: str, base_url: str): + response = requests.post( + url="{}/key/generate".format(base_url), + json={}, + headers={ + "Authorization": "Bearer {}".format(api_key) + } + ) + + _response = response.json() + + return _response["key"] + +key_1 = create_key(api_key="sk-1234", base_url="http://0.0.0.0:4000") +key_2 = create_key(api_key="sk-1234", base_url="http://0.0.0.0:4000") + +# call proxy with key 1 - works +openai_client_1 = OpenAI(api_key=key_1, base_url="http://0.0.0.0:4000") + +response = openai_client_1.chat.completions.with_raw_response.create( + model="my-fake-model", messages=[{"role": "user", "content": "Hello world!"}], +) + +print("Headers for call 1 - {}".format(response.headers)) +_response = response.parse() +print("Total tokens for call - {}".format(_response.usage.total_tokens)) + + +# call proxy with key 2 - works +openai_client_2 = OpenAI(api_key=key_2, base_url="http://0.0.0.0:4000") + +response = openai_client_2.chat.completions.with_raw_response.create( + model="my-fake-model", messages=[{"role": "user", "content": "Hello world!"}], +) + +print("Headers for call 2 - {}".format(response.headers)) +_response = response.parse() +print("Total tokens for call - {}".format(_response.usage.total_tokens)) +# call proxy with key 2 - fails +try: + openai_client_2.chat.completions.with_raw_response.create(model="my-fake-model", messages=[{"role": "user", "content": "Hey, how's it going?"}]) + raise Exception("This should have failed!") +except RateLimitError as e: + print("This was rate limited b/c - {}".format(str(e))) + +``` + +**Expected Response** + +``` +This was rate limited b/c - Error code: 429 - {'error': {'message': {'error': 'Key= over available TPM=0. Model TPM=0, Active keys=2'}, 'type': 'None', 'param': 'None', 'code': 429}} +``` + + +## [BETA] Set Priority / Reserve Quota + +Reserve TPM/RPM capacity for different environments or use cases. This ensures critical production workloads always have guaranteed capacity, while development or lower-priority tasks use remaining quota. + +**Use Cases:** +- Production vs Development environments +- Real-time applications vs batch processing +- Critical services vs experimental features + +:::tip + +Reserving TPM/RPM on keys based on priority is a premium feature. Please [get an enterprise license](./enterprise.md) for it. +::: + +### How Priority Reservation Works + +Priority reservation allocates a percentage of your model's total TPM/RPM to specific priority levels. Keys with higher priority get guaranteed access to their reserved quota first. + +**Example Scenario:** +- Model has 10 RPM total capacity +- Priority reservation: `{"prod": 0.9, "dev": 0.1}` +- Result: Production keys get 9 RPM guaranteed, Development keys get 1 RPM guaranteed + +### Configuration + +#### 1. Setup config.yaml + +```yaml showLineNumbers title="config.yaml" +model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: "gpt-3.5-turbo" + api_key: os.environ/OPENAI_API_KEY + rpm: 10 # Total model capacity + +litellm_settings: + callbacks: ["dynamic_rate_limiter_v3"] + priority_reservation: + "prod": 0.9 # 90% reserved for production (9 RPM) + "dev": 0.1 # 10% reserved for development (1 RPM) + +general_settings: + master_key: sk-1234 # OR set `LITELLM_MASTER_KEY=".."` in your .env + database_url: postgres://.. # OR set `DATABASE_URL=".."` in your.env +``` + +**Configuration Details:** + +`priority_reservation`: Dict[str, float] +- **Key (str)**: Priority level name (can be any string like "prod", "dev", "critical", etc.) +- **Value (float)**: Percentage of total TPM/RPM to reserve (0.0 to 1.0) +- **Note**: Values should sum to 1.0 or less + +**Start Proxy** + +```bash +litellm --config /path/to/config.yaml +``` + +#### 2. Create Keys with Priority Levels + +**Production Key:** +```bash +curl -X POST 'http://0.0.0.0:4000/key/generate' \ +-H 'Authorization: Bearer sk-1234' \ +-H 'Content-Type: application/json' \ +-d '{ + "metadata": {"priority": "prod"} +}' +``` + +**Development Key:** +```bash +curl -X POST 'http://0.0.0.0:4000/key/generate' \ +-H 'Authorization: Bearer sk-1234' \ +-H 'Content-Type: application/json' \ +-d '{ + "metadata": {"priority": "dev"} +}' +``` + +**Expected Response for both:** +```json +{ + "key": "sk-...", + "metadata": {"priority": "prod"}, // or "dev" + ... +} +``` + +#### 3. Test Priority Allocation + +**Test Production Key (should get 9 RPM):** +```bash +curl -X POST 'http://0.0.0.0:4000/chat/completions' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer sk-prod-key' \ + -d '{ + "model": "gpt-3.5-turbo", + "messages": [{"role": "user", "content": "Hello from prod"}] + }' +``` + +**Test Development Key (should get 1 RPM):** +```bash +curl -X POST 'http://0.0.0.0:4000/chat/completions' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer sk-dev-key' \ + -d '{ + "model": "gpt-3.5-turbo", + "messages": [{"role": "user", "content": "Hello from dev"}] + }' +``` + +### Expected Behavior + +With the configuration above: + +1. **Production keys** can make up to 9 requests per minute +2. **Development keys** can make up to 1 request per minute +3. Production requests are never blocked by development usage + +**Rate Limit Error Example:** +```json +{ + "error": { + "message": "Key=sk-dev-... over available RPM=0. Model RPM=10, Reserved RPM for priority 'dev'=1, Active keys=1", + "type": "rate_limit_exceeded", + "code": 429 + } +} +``` + +### Demo Video + +This video walks through setting up dynamic rate limiting with priority reservation and locust tests to validate the behavior. + + + diff --git a/docs/my-website/docs/proxy/logging_spec.md b/docs/my-website/docs/proxy/logging_spec.md index a39a62318e..5166b86ae1 100644 --- a/docs/my-website/docs/proxy/logging_spec.md +++ b/docs/my-website/docs/proxy/logging_spec.md @@ -61,6 +61,11 @@ Inherits from `StandardLoggingUserAPIKeyMetadata` and adds: | `requester_metadata` | `Optional[dict]` | Additional requester metadata | | `vector_store_request_metadata` | `Optional[List[StandardLoggingVectorStoreRequest]]` | Vector store request metadata | | `requester_custom_headers` | Dict[str, str] | Any custom (`x-`) headers sent by the client to the proxy. | +| `prompt_management_metadata` | `Optional[StandardLoggingPromptManagementMetadata]` | Prompt management and versioning metadata | +| `mcp_tool_call_metadata` | `Optional[StandardLoggingMCPToolCall]` | MCP (Model Context Protocol) tool call information and cost tracking | +| `applied_guardrails` | `Optional[List[str]]` | List of applied guardrail names | +| `usage_object` | `Optional[dict]` | Raw usage object from the LLM provider | +| `cold_storage_object_key` | `Optional[str]` | S3/GCS object key for cold storage retrieval | | `guardrail_information` | `Optional[StandardLoggingGuardrailInformation]` | Guardrail information | @@ -145,4 +150,82 @@ A literal type with two possible values: | `duration` | `Optional[float]` | Duration of the guardrail in seconds | | `masked_entity_count` | `Optional[Dict[str, int]]` | Count of masked entities | +## StandardLoggingPromptManagementMetadata +Used for tracking prompt versioning and management information. + +| Field | Type | Description | +|-------|------|-------------| +| `prompt_id` | `str` | **Required**. Unique identifier for the prompt template or version | +| `prompt_variables` | `Optional[dict]` | Variables/parameters used in the prompt template (e.g., `{"user_name": "John", "context": "support"}`) | +| `prompt_integration` | `str` | **Required**. Integration or system managing the prompt (e.g., `"langfuse"`, `"promptlayer"`, `"custom"`) | + +## StandardLoggingMCPToolCall + +Used to track Model Context Protocol (MCP) tool calls within LiteLLM requests. This provides detailed logging for external tool integrations. + +| Field | Type | Description | +|-------|------|-------------| +| `name` | `str` | **Required**. The name of the tool being called (e.g., `"get_weather"`, `"search_database"`) | +| `arguments` | `dict` | **Required**. Arguments passed to the tool as key-value pairs | +| `result` | `Optional[dict]` | The response/result returned by the tool execution (populated by custom logging hooks) | +| `mcp_server_name` | `Optional[str]` | Name of the MCP server that handled the tool call (e.g., `"weather-service"`, `"database-connector"`) | +| `mcp_server_logo_url` | `Optional[str]` | URL for the MCP server's logo (used for UI display in LiteLLM dashboard) | +| `namespaced_tool_name` | `Optional[str]` | Fully qualified tool name including server prefix (e.g., `"deepwiki-mcp/get_page_content"`, `"github-mcp/create_issue"`) | +| `mcp_server_cost_info` | `Optional[MCPServerCostInfo]` | Cost tracking information for the tool call | + +### MCPServerCostInfo + +Cost tracking structure for MCP server tool calls: + +| Field | Type | Description | +|-------|------|-------------| +| `default_cost_per_query` | `Optional[float]` | Default cost in USD for any tool call to this MCP server | +| `tool_name_to_cost_per_query` | `Optional[Dict[str, float]]` | Per-tool cost mapping for granular pricing (e.g., `{"search": 0.01, "create": 0.05}`) | + +### Usage + +```python +# Basic MCP tool call metadata +mcp_tool_call = { + "name": "search_documents", + "arguments": { + "query": "machine learning tutorials", + "limit": 10, + "filter": "type:pdf" + }, + "mcp_server_name": "document-search-service", + "namespaced_tool_name": "docs-mcp/search_documents", + "mcp_server_cost_info": { + "default_cost_per_query": 0.02, + "tool_name_to_cost_per_query": { + "search_documents": 0.02, + "get_document": 0.01 + } + } +} + +# optional result field (via custom logging hooks) +mcp_tool_call_with_result = { + "name": "search_documents", + "arguments": { + "query": "machine learning tutorials", + "limit": 10, + "filter": "type:pdf" + }, + "result": { + "documents": [...], + "total_found": 42, + "search_time_ms": 150 + }, + "mcp_server_name": "document-search-service", + "namespaced_tool_name": "docs-mcp/search_documents", + "mcp_server_cost_info": { + "default_cost_per_query": 0.02, + "tool_name_to_cost_per_query": { + "search_documents": 0.02, + "get_document": 0.01 + } + } +} +``` \ No newline at end of file diff --git a/docs/my-website/docs/proxy/team_budgets.md b/docs/my-website/docs/proxy/team_budgets.md index 3847406641..03d1879713 100644 --- a/docs/my-website/docs/proxy/team_budgets.md +++ b/docs/my-website/docs/proxy/team_budgets.md @@ -178,188 +178,3 @@ Expect to see this metric on prometheus to track the Remaining Budget for the te ```shell litellm_remaining_team_budget_metric{team_alias="QA Prod Bot",team_id="de35b29e-6ca8-4f47-b804-2b79d07aa99a"} 9.699999999999992e-06 ``` - - -### Dynamic TPM/RPM Allocation - -Prevent projects from gobbling too much tpm/rpm. - -Dynamically allocate TPM/RPM quota to api keys, based on active keys in that minute. [**See Code**](https://github.com/BerriAI/litellm/blob/9bffa9a48e610cc6886fc2dce5c1815aeae2ad46/litellm/proxy/hooks/dynamic_rate_limiter.py#L125) - -1. Setup config.yaml - -```yaml -model_list: - - model_name: my-fake-model - litellm_params: - model: gpt-3.5-turbo - api_key: my-fake-key - mock_response: hello-world - tpm: 60 - -litellm_settings: - callbacks: ["dynamic_rate_limiter"] - -general_settings: - master_key: sk-1234 # OR set `LITELLM_MASTER_KEY=".."` in your .env - database_url: postgres://.. # OR set `DATABASE_URL=".."` in your .env -``` - -2. Start proxy - -```bash -litellm --config /path/to/config.yaml -``` - -3. Test it! - -```python -""" -- Run 2 concurrent teams calling same model -- model has 60 TPM -- Mock response returns 30 total tokens / request -- Each team will only be able to make 1 request per minute -""" - -import requests -from openai import OpenAI, RateLimitError - -def create_key(api_key: str, base_url: str): - response = requests.post( - url="{}/key/generate".format(base_url), - json={}, - headers={ - "Authorization": "Bearer {}".format(api_key) - } - ) - - _response = response.json() - - return _response["key"] - -key_1 = create_key(api_key="sk-1234", base_url="http://0.0.0.0:4000") -key_2 = create_key(api_key="sk-1234", base_url="http://0.0.0.0:4000") - -# call proxy with key 1 - works -openai_client_1 = OpenAI(api_key=key_1, base_url="http://0.0.0.0:4000") - -response = openai_client_1.chat.completions.with_raw_response.create( - model="my-fake-model", messages=[{"role": "user", "content": "Hello world!"}], -) - -print("Headers for call 1 - {}".format(response.headers)) -_response = response.parse() -print("Total tokens for call - {}".format(_response.usage.total_tokens)) - - -# call proxy with key 2 - works -openai_client_2 = OpenAI(api_key=key_2, base_url="http://0.0.0.0:4000") - -response = openai_client_2.chat.completions.with_raw_response.create( - model="my-fake-model", messages=[{"role": "user", "content": "Hello world!"}], -) - -print("Headers for call 2 - {}".format(response.headers)) -_response = response.parse() -print("Total tokens for call - {}".format(_response.usage.total_tokens)) -# call proxy with key 2 - fails -try: - openai_client_2.chat.completions.with_raw_response.create(model="my-fake-model", messages=[{"role": "user", "content": "Hey, how's it going?"}]) - raise Exception("This should have failed!") -except RateLimitError as e: - print("This was rate limited b/c - {}".format(str(e))) - -``` - -**Expected Response** - -``` -This was rate limited b/c - Error code: 429 - {'error': {'message': {'error': 'Key= over available TPM=0. Model TPM=0, Active keys=2'}, 'type': 'None', 'param': 'None', 'code': 429}} -``` - - -#### ✨ [BETA] Set Priority / Reserve Quota - -Reserve tpm/rpm capacity for projects in prod. - -:::tip - -Reserving tpm/rpm on keys based on priority is a premium feature. Please [get an enterprise license](./enterprise.md) for it. -::: - - -1. Setup config.yaml - -```yaml -model_list: - - model_name: gpt-3.5-turbo - litellm_params: - model: "gpt-3.5-turbo" - api_key: os.environ/OPENAI_API_KEY - rpm: 100 - -litellm_settings: - callbacks: ["dynamic_rate_limiter"] - priority_reservation: {"dev": 0, "prod": 1} - -general_settings: - master_key: sk-1234 # OR set `LITELLM_MASTER_KEY=".."` in your .env - database_url: postgres://.. # OR set `DATABASE_URL=".."` in your .env -``` - - -priority_reservation: -- Dict[str, float] - - str: can be any string - - float: from 0 to 1. Specify the % of tpm/rpm to reserve for keys of this priority. - -**Start Proxy** - -``` -litellm --config /path/to/config.yaml -``` - -2. Create a key with that priority - -```bash -curl -X POST 'http://0.0.0.0:4000/key/generate' \ --H 'Authorization: Bearer ' \ --H 'Content-Type: application/json' \ --D '{ - "metadata": {"priority": "dev"} # 👈 KEY CHANGE -}' -``` - -**Expected Response** - -``` -{ - ... - "key": "sk-.." -} -``` - - -3. Test it! - -```bash -curl -X POST 'http://0.0.0.0:4000/chat/completions' \ - -H 'Content-Type: application/json' \ - -H 'Authorization: sk-...' \ # 👈 key from step 2. - -d '{ - "model": "gpt-3.5-turbo", - "messages": [ - { - "role": "user", - "content": "what llm are you" - } - ], -}' -``` - -**Expected Response** - -``` -Key=... over available RPM=0. Model RPM=100, Active keys=None -``` - diff --git a/docs/my-website/docs/sdk/headers.md b/docs/my-website/docs/sdk/headers.md new file mode 100644 index 0000000000..a1fdaadc6f --- /dev/null +++ b/docs/my-website/docs/sdk/headers.md @@ -0,0 +1,328 @@ +# SDK Header Support + +LiteLLM SDK provides comprehensive support for passing additional headers with API requests. This is essential for enterprise environments using API gateways, service meshes, and multi-tenant architectures. + +## Overview + +Headers can be passed to LiteLLM in three ways, with the following priority order: +1. **Request-specific headers** (highest priority) +2. **extra_headers parameter** +3. **Global litellm.headers** (lowest priority) + +When the same header key is specified in multiple places, the higher priority value will be used. + +## Usage Methods + +### 1. Global Headers (litellm.headers) + +Set headers that will be included in all API requests: + +```python +import litellm + +# Set global headers for all requests +litellm.headers = { + "X-API-Gateway-Key": "your-gateway-key", + "X-Company-ID": "acme-corp", + "X-Environment": "production" +} + +# Now all completion calls will include these headers +response = litellm.completion( + model="claude-3-5-sonnet-latest", + messages=[{"role": "user", "content": "Hello"}] +) +``` + +### 2. Per-Request Headers (extra_headers) + +Pass headers for specific requests using the `extra_headers` parameter: + +```python +import litellm + +response = litellm.completion( + model="gpt-4", + messages=[{"role": "user", "content": "Hello"}], + extra_headers={ + "X-Request-ID": "req-12345", + "X-Tenant-ID": "tenant-abc", + "X-Custom-Auth": "bearer-token-xyz" + } +) +``` + +### 3. Request Headers (headers parameter) + +Use the `headers` parameter for the highest priority header control: + +```python +import litellm + +response = litellm.completion( + model="claude-3-5-sonnet-latest", + messages=[{"role": "user", "content": "Hello"}], + headers={ + "X-Priority-Header": "high-priority-value", + "Authorization": "Bearer custom-token" + } +) +``` + +### 4. Combining All Methods + +You can combine all three methods. Headers will be merged with the priority order: + +```python +import litellm + +# Global headers (lowest priority) +litellm.headers = { + "X-Company-ID": "acme-corp", + "X-Shared-Header": "global-value" +} + +response = litellm.completion( + model="gpt-4", + messages=[{"role": "user", "content": "Hello"}], + extra_headers={ + "X-Request-ID": "req-12345", + "X-Shared-Header": "extra-value" # Overrides global + }, + headers={ + "X-Priority-Header": "important", + "X-Shared-Header": "request-value" # Overrides both global and extra + } +) + +# Final headers sent to API: +# { +# "X-Company-ID": "acme-corp", # From global +# "X-Request-ID": "req-12345", # From extra_headers +# "X-Priority-Header": "important", # From headers +# "X-Shared-Header": "request-value" # From headers (highest priority) +# } +``` + +## Enterprise Use Cases + +### API Gateway Integration (Apigee, Kong, AWS API Gateway) + +```python +import litellm + +# Set up headers for API gateway routing and authentication +litellm.headers = { + "X-API-Gateway-Key": "your-gateway-key", + "X-Route-Version": "v2" +} + +# Per-tenant requests +response = litellm.completion( + model="claude-3-5-sonnet-latest", + messages=[{"role": "user", "content": "Analyze this data"}], + extra_headers={ + "X-Tenant-ID": "tenant-123", + "X-Department": "engineering" + } +) +``` + +### Service Mesh (Istio, Linkerd) + +```python +import litellm + +response = litellm.completion( + model="gpt-4", + messages=[{"role": "user", "content": "Hello"}], + extra_headers={ + "X-Trace-ID": "trace-abc-123", + "X-Service-Name": "ai-service", + "X-Version": "1.2.3" + } +) +``` + +### Multi-Tenant SaaS Applications + +```python +import litellm + +def make_ai_request(user_id, tenant_id, content): + return litellm.completion( + model="claude-3-5-sonnet-latest", + messages=[{"role": "user", "content": content}], + extra_headers={ + "X-User-ID": user_id, + "X-Tenant-ID": tenant_id, + "X-Request-Time": str(int(time.time())) + } + ) + +# Usage +response = make_ai_request("user-456", "tenant-org-1", "Help me write code") +``` + +### Request Tracing and Debugging + +```python +import litellm +import uuid + +def traced_completion(model, messages, **kwargs): + trace_id = str(uuid.uuid4()) + + return litellm.completion( + model=model, + messages=messages, + extra_headers={ + "X-Trace-ID": trace_id, + "X-Debug-Mode": "true", + "X-Source-Service": "my-app" + }, + **kwargs + ) + +# Usage +response = traced_completion( + model="gpt-4", + messages=[{"role": "user", "content": "Debug this issue"}] +) +``` + +### Custom Authentication + +```python +import litellm + +def get_custom_auth_token(): + # Your custom authentication logic + return "custom-auth-token" + +response = litellm.completion( + model="claude-3-5-sonnet-latest", + messages=[{"role": "user", "content": "Hello"}], + headers={ + "X-Custom-Auth": get_custom_auth_token(), + "X-Auth-Type": "custom" + } +) +``` + +## Provider Support + +Headers are supported across all LiteLLM providers including: + +- **OpenAI** (GPT models) +- **Anthropic** (Claude models) +- **Cohere** +- **Hugging Face** +- **Custom providers** +- **Azure OpenAI** +- **AWS Bedrock** +- **Google Vertex AI** + +Each provider will receive your custom headers along with their required authentication and API-specific headers. + +## Best Practices + +### 1. Use Meaningful Header Names +```python +# Good +extra_headers = { + "X-Request-ID": "req-12345", + "X-Tenant-ID": "org-456" +} + +# Avoid +extra_headers = { + "custom1": "value1", + "h2": "value2" +} +``` + +### 2. Include Tracing Information +```python +extra_headers = { + "X-Trace-ID": trace_id, + "X-Span-ID": span_id, + "X-Service-Name": "ai-service" +} +``` + +### 3. Handle Sensitive Information Carefully +```python +# Don't log sensitive headers +import os + +if os.getenv("ENVIRONMENT") != "production": + extra_headers["X-Debug-User"] = user_id +``` + +### 4. Use Environment-Specific Headers +```python +import os + +environment = os.getenv("ENVIRONMENT", "development") + +litellm.headers = { + "X-Environment": environment, + "X-Service-Version": os.getenv("SERVICE_VERSION", "unknown") +} +``` + +## Troubleshooting + +### Headers Not Being Passed + +If your headers aren't reaching the API: + +1. **Check Header Names**: Ensure header names don't conflict with provider-specific headers +2. **Verify Priority**: Remember that `headers` > `extra_headers` > `litellm.headers` +3. **Test with Logging**: Enable verbose logging to see what headers are being sent + +```python +import litellm + +# Enable debug logging +litellm.set_verbose = True + +response = litellm.completion( + model="gpt-4", + messages=[{"role": "user", "content": "test"}], + extra_headers={"X-Debug": "test"} +) +``` + +### Gateway or Proxy Issues + +If using API gateways or proxies: + +1. **Check Gateway Requirements**: Verify required headers for your gateway +2. **Test Direct vs Gateway**: Compare direct API calls vs gateway calls +3. **Validate Header Format**: Some gateways have header format requirements + +## Security Considerations + +1. **Don't Log Sensitive Headers**: Avoid logging authentication tokens or personal data +2. **Use HTTPS**: Always use secure connections when passing sensitive headers +3. **Validate Header Values**: Sanitize user-provided header values +4. **Rotate Keys**: Regularly rotate any API keys passed in headers + +```python +import litellm +import re + +def safe_header_value(value): + # Remove potentially dangerous characters + return re.sub(r'[^\w\-.]', '', str(value)) + +response = litellm.completion( + model="gpt-4", + messages=[{"role": "user", "content": "Hello"}], + extra_headers={ + "X-User-ID": safe_header_value(user_id) + } +) +``` \ No newline at end of file diff --git a/docs/my-website/docs/troubleshoot.md b/docs/my-website/docs/troubleshoot.md index b6a9c6a6b9..9d2b3757ee 100644 --- a/docs/my-website/docs/troubleshoot.md +++ b/docs/my-website/docs/troubleshoot.md @@ -2,7 +2,7 @@ [Schedule Demo 👋](https://calendly.com/d/4mp-gd3-k5k/berriai-1-1-onboarding-litellm-hosted-version) [Community Discord 💭](https://discord.gg/wuPM9dRgDw) -[Community Slack 💭](https://join.slack.com/share/enQtOTE0ODczMzk2Nzk4NC01YjUxNjY2YjBlYTFmNDRiZTM3NDFiYTM3MzVkODFiMDVjOGRjMmNmZTZkZTMzOWQzZGQyZWIwYjQ0MWExYmE3) +[Community Slack 💭](https://litellmossslack.slack.com/) Our numbers 📞 +1 (770) 8783-106 / ‭+1 (412) 618-6238‬ diff --git a/docs/my-website/release_notes/v1.76.0-stable/index.md b/docs/my-website/release_notes/v1.76.0-stable/index.md index 660c8cbcf0..d93568d49d 100644 --- a/docs/my-website/release_notes/v1.76.0-stable/index.md +++ b/docs/my-website/release_notes/v1.76.0-stable/index.md @@ -1,5 +1,5 @@ --- -title: "[PRE-RELEASE]v1.76.0-stable - RPS Improvements" +title: "v1.76.0-stable - RPS Improvements" slug: "v1-76-0" date: 2025-08-23T10:00:00 authors: diff --git a/docs/my-website/release_notes/v1.77.2-stable/index.md b/docs/my-website/release_notes/v1.77.2-stable/index.md index 6d54db84df..fdd80693d0 100644 --- a/docs/my-website/release_notes/v1.77.2-stable/index.md +++ b/docs/my-website/release_notes/v1.77.2-stable/index.md @@ -1,5 +1,5 @@ --- -title: "[Pre-Release] v1.77.2-stable - Bedrock Batches API" +title: "v1.77.2-stable - Bedrock Batches API" slug: "v1-77-2" date: 2025-09-13T10:00:00 authors: @@ -21,22 +21,22 @@ import TabItem from '@theme/TabItem'; ## Deploy this version -:::info - -This release is not yet live. - -::: - ``` showLineNumbers title="docker run litellm" +docker run \ +-e STORE_MODEL_IN_DB=True \ +-p 4000:4000 \ +ghcr.io/berriai/litellm:main-v1.77.2-stable ``` + ``` showLineNumbers title="pip install litellm" +pip install litellm==1.77.2.post1 ``` diff --git a/docs/my-website/release_notes/v1.77.3-stable/index.md b/docs/my-website/release_notes/v1.77.3-stable/index.md new file mode 100644 index 0000000000..adea34f978 --- /dev/null +++ b/docs/my-website/release_notes/v1.77.3-stable/index.md @@ -0,0 +1,258 @@ +--- +title: "[Preview] v1.77.3-stable - Priority Based Rate Limiting" +slug: "v1-77-3" +date: 2025-09-21T10:00:00 +authors: + - name: Krrish Dholakia + title: CEO, LiteLLM + url: https://www.linkedin.com/in/krish-d/ + image_url: https://pbs.twimg.com/profile_images/1298587542745358340/DZv3Oj-h_400x400.jpg + - name: Ishaan Jaff + title: CTO, LiteLLM + url: https://www.linkedin.com/in/reffajnaahsi/ + image_url: https://pbs.twimg.com/profile_images/1613813310264340481/lz54oEiB_400x400.jpg + +hide_table_of_contents: false +--- + +import Image from '@theme/IdealImage'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Deploy this version + + + + +``` showLineNumbers title="docker run litellm" +docker run \ +-e STORE_MODEL_IN_DB=True \ +-p 4000:4000 \ +ghcr.io/berriai/litellm:main-v1.77.3.rc.1 +``` + + + + + +``` showLineNumbers title="pip install litellm" +pip install litellm==1.77.3 +``` + + + + +--- + +## Key Highlights + +- **+550 RPS Performance Improvements** - Optimizations in request handling and object initialization. +- **Priority Quota Reservation** - Proxy admins can now reserve TPM/RPM capacity for specific keys. + +## Priority Quota Reservation + +This release adds support for priority quota reservation. This allows **Proxy Admins** to reserve TPM/RPM capacity for keys based on metadata priority levels, ensuring critical production workloads get guaranteed access regardless of development traffic volume. + +Get started [here](../../docs/proxy/dynamic_rate_limit#priority-quota-reservation) + + + + +## New Models / Updated Models + +#### New Model Support + +| Provider | Model | Context Window | Input ($/1M tokens) | Output ($/1M tokens) | Features | +| -------- | ----- | -------------- | ------------------- | -------------------- | -------- | +| SambaNova | `sambanova/deepseek-v3.1` | 128K | $0.90 | $0.90 | Chat completions | +| SambaNova | `sambanova/gpt-oss-120b` | 128K | $0.72 | $0.72 | Chat completions | +| OVHCloud | Various models | Varies | Contact provider | Contact provider | Chat completions | +| CompactifAI | Various models | Varies | Contact provider | Contact provider | Chat completions | +| TwelveLabs | `twelvelabs/marengo-embed-2.7` | 32K | $0.12 | $0.00 | Embeddings | + +#### Features + +- **[OVHCloud AI Endpoints](../../docs/providers/ovhcloud)** + - New provider support with comprehensive model catalog - [PR #14494](https://github.com/BerriAI/litellm/pull/14494) +- **[CompactifAI](../../docs/providers/compactifai)** + - New provider integration - [PR #14532](https://github.com/BerriAI/litellm/pull/14532) +- **[SambaNova](../../docs/providers/sambanova)** + - Added DeepSeek v3.1 and GPT-OSS-120B models - [PR #14500](https://github.com/BerriAI/litellm/pull/14500) +- **[Bedrock](../../docs/providers/bedrock)** + - Cross-region inference profile cost calculation - [PR #14566](https://github.com/BerriAI/litellm/pull/14566) + - AWS external ID parameter support for authentication - [PR #14582](https://github.com/BerriAI/litellm/pull/14582) + - CountTokens API implementation - [PR #14557](https://github.com/BerriAI/litellm/pull/14557) + - Titan V2 encoding_format parameter support - [PR #14687](https://github.com/BerriAI/litellm/pull/14687) + - Nova Canvas image generation inference profiles - [PR #14578](https://github.com/BerriAI/litellm/pull/14578) + - Bedrock Batches API - batch processing support with file upload and request transformation - [PR #14618](https://github.com/BerriAI/litellm/pull/14618) + - Bedrock Twelve Labs embedding provider support - [PR #14697](https://github.com/BerriAI/litellm/pull/14697) +- **[Vertex AI](../../docs/providers/vertex)** + - Gemini labels field provider-aware filtering - [PR #14563](https://github.com/BerriAI/litellm/pull/14563) + - Gemini Batch API support - [PR #14733](https://github.com/BerriAI/litellm/pull/14733) +- **[Volcengine](../../docs/providers/volcengine)** + - Fixed thinking parameters when disabled - [PR #14569](https://github.com/BerriAI/litellm/pull/14569) +- **[Cohere](../../docs/providers/cohere)** + - Handle Generate API deprecation, default to chat endpoints - [PR #14676](https://github.com/BerriAI/litellm/pull/14676) +- **[TwelveLabs](../../docs/providers/twelvelabs)** + - Added Marengo Embed 2.7 embedding support - [PR #14674](https://github.com/BerriAI/litellm/pull/14674) + +### Bug Fixes + +- **[Bedrock](../../docs/providers/bedrock)** + - Empty arguments handling in tool call invocation - [PR #14583](https://github.com/BerriAI/litellm/pull/14583) +- **[Vertex AI](../../docs/providers/vertex)** + - Avoid deepcopy crash with non-pickleables in Gemini/Vertex - [PR #14418](https://github.com/BerriAI/litellm/pull/14418) +- **[XAI](../../docs/providers/xai)** + - Fix unsupported stop parameter for grok-code models - [PR #14565](https://github.com/BerriAI/litellm/pull/14565) +- **[Gemini](../../docs/providers/gemini)** + - Updated error message for Gemini API - [PR #14589](https://github.com/BerriAI/litellm/pull/14589) + - Fixed 2.5 Flash Image Preview model routing - [PR #14715](https://github.com/BerriAI/litellm/pull/14715) + - API key passing for token counting endpoints - [PR #14744](https://github.com/BerriAI/litellm/pull/14744) + +#### New Provider Support + +- **[OVHCloud AI Endpoints](../../docs/providers/ovhcloud)** + - Complete provider integration with model catalog and authentication - [PR #14494](https://github.com/BerriAI/litellm/pull/14494) +- **[CompactifAI](../../docs/providers/compactifai)** + - New provider support with documentation - [PR #14532](https://github.com/BerriAI/litellm/pull/14532) + +--- + +## LLM API Endpoints + +#### Features + +- **[/responses](../../docs/response_api)** + - Added cancel endpoint support for non-admin users - [PR #14594](https://github.com/BerriAI/litellm/pull/14594) + - Improved response session handling and cold storage configuration with s3 - [PR #14534](https://github.com/BerriAI/litellm/pull/14534) + - Added OpenAI & Azure /responses/cancel endpoint support - [PR #14561](https://github.com/BerriAI/litellm/pull/14561) +- **General** + - Enhanced rate limit error messages with details - [PR #14736](https://github.com/BerriAI/litellm/pull/14736) + - Middle-truncation for spend log payloads - [PR #14637](https://github.com/BerriAI/litellm/pull/14637) + +#### Bugs + +- **[/chat/completions](../../docs/completion/input)** + - Fixed completion chat ID handling - [PR #14548](https://github.com/BerriAI/litellm/pull/14548) + - Prevent AttributeError for _get_tags_from_request_kwargs - [PR #14735](https://github.com/BerriAI/litellm/pull/14735) +- **[/responses](../../docs/response_api)** + - Fixed cost calculation - [PR #14675](https://github.com/BerriAI/litellm/pull/14675) +- **General** + - Rate limiter AttributeError fix - [PR #14609](https://github.com/BerriAI/litellm/pull/14609) + +--- + +## Spend Tracking, Budgets and Rate Limiting + +- **Responses API Cost Calculation** fix - [PR #14675](https://github.com/BerriAI/litellm/pull/14675) +- **Anthropic Cache Token Pricing** - Separate 1-hour vs 5-minute cache creation costs - [PR #14620](https://github.com/BerriAI/litellm/pull/14620), [PR #14652](https://github.com/BerriAI/litellm/pull/14652) +- **Indochina Time Timezone** support for budget resets - [PR #14666](https://github.com/BerriAI/litellm/pull/14666) +- **Soft Budget Alert Cache Issues** - Resolved soft budget alert cache issues - [PR #14491](https://github.com/BerriAI/litellm/pull/14491) +- **Dynamic Rate Limiter v3** - Priority routing improvements - [PR #14734](https://github.com/BerriAI/litellm/pull/14734) +- **Enhanced Rate Limit Errors** - More detailed error messages - [PR #14736](https://github.com/BerriAI/litellm/pull/14736) + +--- + +## Management Endpoints / UI + +#### Features + +- **Team Member Service Account Keys** - Allow team members to view keys they create - [PR #14619](https://github.com/BerriAI/litellm/pull/14619) +- **Default Budget for JWT Teams** - Auto-assign budgets to generated teams - [PR #14514](https://github.com/BerriAI/litellm/pull/14514) +- **SSO Access Control Groups** - Enhanced token info endpoint integration - [PR #14738](https://github.com/BerriAI/litellm/pull/14738) +- **Health Test Connect Protection** - Restrict access based on model creation permissions - [PR #14650](https://github.com/BerriAI/litellm/pull/14650) +- **Amazon Bedrock Guardrail Info View** - Enhanced logging visualization - [PR #14696](https://github.com/BerriAI/litellm/pull/14696) + +#### Bug Fixes + +- **SCIM v2** - Fix group PUSH and PUT operations for non-existent members - [PR #14581](https://github.com/BerriAI/litellm/pull/14581) +- **Guardrail View/Edit/Delete** behavior fixes - [PR #14622](https://github.com/BerriAI/litellm/pull/14622) +- **In-Memory Guardrail** update failures - [PR #14653](https://github.com/BerriAI/litellm/pull/14653) + +--- + +## Logging / Guardrail Integrations + +#### Features + +- **[DataDog](../../docs/proxy/logging#datadog)** + - Enhanced spend tracking metrics - [PR #14555](https://github.com/BerriAI/litellm/pull/14555) + - Stream support with is_streamed_request parameter - [PR #14673](https://github.com/BerriAI/litellm/pull/14673) + - Fixed tool calls metadata passing - [PR #14531](https://github.com/BerriAI/litellm/pull/14531) +- **[Langfuse](../../docs/proxy/logging#langfuse)** + - Added logging support for Responses API - [PR #14597](https://github.com/BerriAI/litellm/pull/14597) +- **[Langsmith](../../docs/proxy/logging#langsmith)** + - Langsmith Sampling Rate - Key/Team-level tracing configuration - [PR #14740](https://github.com/BerriAI/litellm/pull/14740) +- **[Prometheus](../../docs/proxy/logging#prometheus)** + - Multi-worker support improvements - [PR #14530](https://github.com/BerriAI/litellm/pull/14530) + - User email labels in monitoring - [PR #14520](https://github.com/BerriAI/litellm/pull/14520) +- **[Opik](../../docs/proxy/logging#opik)** + - Fixed timezone issue - [PR #14708](https://github.com/BerriAI/litellm/pull/14708) + +### Bug Fixes + +- **[S3](../../docs/proxy/logging#s3-buckets)** + - Fixed 404 error when using s3_endpoint_url - [PR #14559](https://github.com/BerriAI/litellm/pull/14559) + +#### Guardrails + +- **Tool Permission Guardrail** - Fine-grained tool access control - [PR #14519](https://github.com/BerriAI/litellm/pull/14519) +- **Bedrock Guardrails** - Selective guarding support with runtime endpoint configuration - [PR #14575](https://github.com/BerriAI/litellm/pull/14575), [PR #14650](https://github.com/BerriAI/litellm/pull/14650) +- **Default Last Message** in guardrails - [PR #14640](https://github.com/BerriAI/litellm/pull/14640) +- **AWS exceptions handling despite 200 response** - [PR #14658](https://github.com/BerriAI/litellm/pull/14658) +#### New Integration + +- **[PostHog](../../docs/observability/posthog)** - Complete observability integration for LiteLLM usage tracking and analytics - [PR #14610](https://github.com/BerriAI/litellm/pull/14610) + +--- + + +## MCP Gateway + +- **MCP Server Alias Parsing** - Multi-part URL path support - [PR #14558](https://github.com/BerriAI/litellm/pull/14558) +- **MCP Filter Recomputation** - After server deletion - [PR #14542](https://github.com/BerriAI/litellm/pull/14542) +- **MCP Gateway Tools List** improvements - [PR #14695](https://github.com/BerriAI/litellm/pull/14695) + +--- + +## Performance / Loadbalancing / Reliability improvements + +- **+500 RPS Performance Boost** when sending the `user` field - [PR #14616](https://github.com/BerriAI/litellm/pull/14616) +- **+50 RPS** by removing iscoroutine from hot path - [PR #14649](https://github.com/BerriAI/litellm/pull/14649) +- **7% reduction** in __init__ overhead - [PR #14689](https://github.com/BerriAI/litellm/pull/14689) +- **Generic Object Pool** implementation for better resource management - [PR #14702](https://github.com/BerriAI/litellm/pull/14702) + +--- + +## General Proxy Improvements + +- **Middle-Truncation** for spend log payloads - [PR #14637](https://github.com/BerriAI/litellm/pull/14637) + +#### Security + +- **Security Update** - Bump aiohttp==3.12.14, fix CVE-2025-53643 - [PR #14638](https://github.com/BerriAI/litellm/pull/14638) + +--- + +## New Contributors + +* @luisfucros made their first contribution in [PR #14500](https://github.com/BerriAI/litellm/pull/14500) +* @hanakannzashi made their first contribution in [PR #14548](https://github.com/BerriAI/litellm/pull/14548) +* @eliasto made their first contribution in [PR #14494](https://github.com/BerriAI/litellm/pull/14494) +* @Rasmusafj made their first contribution in [PR #14491](https://github.com/BerriAI/litellm/pull/14491) +* @LingXuanYin made their first contribution in [PR #14569](https://github.com/BerriAI/litellm/pull/14569) +* @ronaldpereira made their first contribution in [PR #14613](https://github.com/BerriAI/litellm/pull/14613) +* @hula-la made their first contribution in [PR #14534](https://github.com/BerriAI/litellm/pull/14534) +* @carlos-marchal-ph made their first contribution in [PR #14610](https://github.com/BerriAI/litellm/pull/14610) +* @akraines made their first contribution in [PR #14637](https://github.com/BerriAI/litellm/pull/14637) +* @mrFranklin made their first contribution in [PR #14708](https://github.com/BerriAI/litellm/pull/14708) +* @tcx4c70 made their first contribution in [PR #14675](https://github.com/BerriAI/litellm/pull/14675) +* @michaeltansg made their first contribution in [PR #14666](https://github.com/BerriAI/litellm/pull/14666) +* @tosi29 made their first contribution in [PR #14725](https://github.com/BerriAI/litellm/pull/14725) +* @gmdfalk made their first contribution in [PR #14735](https://github.com/BerriAI/litellm/pull/14735) +* @FelipeRodriguesGare made their first contribution in [PR #14733](https://github.com/BerriAI/litellm/pull/14733) +* @mritunjaysharma394 made their first contribution in [PR #14678](https://github.com/BerriAI/litellm/pull/14678) + +--- + +## **[Full Changelog](https://github.com/BerriAI/litellm/compare/v1.77.2.rc.1...v1.77.3.rc.1)** diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index f3bab0219f..fe6dbc2729 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -201,7 +201,7 @@ const sidebars = { { type: "category", label: "Budgets + Rate Limits", - items: ["proxy/users", "proxy/temporary_budget_increase", "proxy/rate_limit_tiers", "proxy/team_budgets", "proxy/customers"], + items: ["proxy/users", "proxy/temporary_budget_increase", "proxy/rate_limit_tiers", "proxy/team_budgets", "proxy/dynamic_rate_limit", "proxy/customers"], }, { type: "link", @@ -392,6 +392,7 @@ const sidebars = { "providers/vertex", "providers/vertex_partner", "providers/vertex_image", + "providers/vertex_batch", ] }, { @@ -411,6 +412,7 @@ const sidebars = { label: "Bedrock", items: [ "providers/bedrock", + "providers/bedrock_embedding", "providers/bedrock_agents", "providers/bedrock_batches", "providers/bedrock_vector_store", @@ -522,6 +524,7 @@ const sidebars = { "completion/batching", "completion/mock_requests", "completion/reliable_completions", + "proxy/veo_video_generation", ] }, diff --git a/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py b/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py index 1028a443a4..d4964b9667 100644 --- a/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py +++ b/enterprise/litellm_enterprise/enterprise_callbacks/pagerduty/pagerduty.py @@ -109,6 +109,9 @@ class PagerDutyAlerting(SlackAlerting): error_llm_provider=error_info.get("llm_provider"), user_api_key_hash=_meta.get("user_api_key_hash"), user_api_key_alias=_meta.get("user_api_key_alias"), + user_api_key_spend=_meta.get("user_api_key_spend"), + user_api_key_max_budget=_meta.get("user_api_key_max_budget"), + user_api_key_budget_reset_at=_meta.get("user_api_key_budget_reset_at"), user_api_key_org_id=_meta.get("user_api_key_org_id"), user_api_key_team_id=_meta.get("user_api_key_team_id"), user_api_key_user_id=_meta.get("user_api_key_user_id"), @@ -191,6 +194,9 @@ class PagerDutyAlerting(SlackAlerting): error_llm_provider="HangingRequest", user_api_key_hash=user_api_key_dict.api_key, user_api_key_alias=user_api_key_dict.key_alias, + user_api_key_spend=user_api_key_dict.spend, + user_api_key_max_budget=user_api_key_dict.max_budget, + user_api_key_budget_reset_at=user_api_key_dict.budget_reset_at.isoformat() if user_api_key_dict.budget_reset_at else None, user_api_key_org_id=user_api_key_dict.org_id, user_api_key_team_id=user_api_key_dict.team_id, user_api_key_user_id=user_api_key_dict.user_id, diff --git a/enterprise/litellm_enterprise/integrations/prometheus.py b/enterprise/litellm_enterprise/integrations/prometheus.py index efee1a7783..4a1e8d7543 100644 --- a/enterprise/litellm_enterprise/integrations/prometheus.py +++ b/enterprise/litellm_enterprise/integrations/prometheus.py @@ -102,7 +102,9 @@ class PrometheusLogger(CustomLogger): # "team", # "team_alias", # ], - labelnames=self.get_labels_for_metric("litellm_llm_api_time_to_first_token_metric"), + labelnames=self.get_labels_for_metric( + "litellm_llm_api_time_to_first_token_metric" + ), buckets=LATENCY_BUCKETS, ) @@ -240,14 +242,14 @@ class PrometheusLogger(CustomLogger): self.litellm_deployment_state = self._gauge_factory( "litellm_deployment_state", "LLM Deployment Analytics - The state of the deployment: 0 = healthy, 1 = partial outage, 2 = complete outage", - labelnames=self.get_labels_for_metric("litellm_deployment_state") + labelnames=self.get_labels_for_metric("litellm_deployment_state"), ) self.litellm_deployment_cooled_down = self._counter_factory( "litellm_deployment_cooled_down", "LLM Deployment Analytics - Number of times a deployment has been cooled down by LiteLLM load balancing logic. exception_status is the status of the exception that caused the deployment to be cooled down", # labelnames=_logged_llm_labels + [EXCEPTION_STATUS], - labelnames=self.get_labels_for_metric("litellm_deployment_cooled_down") + labelnames=self.get_labels_for_metric("litellm_deployment_cooled_down"), ) self.litellm_deployment_success_responses = self._counter_factory( @@ -1039,20 +1041,12 @@ class PrometheusLogger(CustomLogger): _labels = prometheus_label_factory( supported_enum_labels=self.get_labels_for_metric( - metric_name="litellm_proxy_total_requests_metric" + metric_name="litellm_spend_metric" ), enum_values=enum_values, ) - self.litellm_spend_metric.labels( - end_user_id, - user_api_key, - user_api_key_alias, - model, - user_api_team, - user_api_team_alias, - user_id, - ).inc(response_cost) + self.litellm_spend_metric.labels(**_labels).inc(response_cost) def _set_virtual_key_rate_limit_metrics( self, @@ -2280,7 +2274,9 @@ def get_custom_labels_from_metadata(metadata: dict) -> Dict[str, str]: return result -def _tag_matches_wildcard_configured_pattern(tags: List[str], configured_tag: str) -> bool: +def _tag_matches_wildcard_configured_pattern( + tags: List[str], configured_tag: str +) -> bool: """ Check if any of the request tags matches a wildcard configured pattern @@ -2305,6 +2301,7 @@ def _tag_matches_wildcard_configured_pattern(tags: List[str], configured_tag: st import re from litellm.router_utils.pattern_match_deployments import PatternMatchRouter + pattern_router = PatternMatchRouter() regex_pattern = pattern_router._pattern_to_regex(configured_tag) return any(re.match(pattern=regex_pattern, string=tag) for tag in tags) @@ -2313,11 +2310,11 @@ def _tag_matches_wildcard_configured_pattern(tags: List[str], configured_tag: st def get_custom_labels_from_tags(tags: List[str]) -> Dict[str, str]: """ Get custom labels from tags based on admin configuration. - + Supports both exact matches and wildcard patterns: - Exact match: "prod" matches "prod" exactly - - Wildcard pattern: "User-Agent: curl/*" matches "User-Agent: curl/7.68.0" - + - Wildcard pattern: "User-Agent: curl/*" matches "User-Agent: curl/7.68.0" + Reuses PatternMatchRouter for wildcard pattern matching. Returns dict of label_name: "true" if the tag matches the configured tag, "false" otherwise @@ -2345,17 +2342,19 @@ def get_custom_labels_from_tags(tags: List[str]) -> Dict[str, str]: for configured_tag in configured_tags: label_name = _sanitize_prometheus_label_name(f"tag_{configured_tag}") - + # Check for exact match first (backwards compatibility) if configured_tag in tags: result[label_name] = "true" continue - + # Use PatternMatchRouter for wildcard pattern matching - if "*" in configured_tag and _tag_matches_wildcard_configured_pattern(tags=tags, configured_tag=configured_tag): + if "*" in configured_tag and _tag_matches_wildcard_configured_pattern( + tags=tags, configured_tag=configured_tag + ): result[label_name] = "true" continue - + # No match found result[label_name] = "false" diff --git a/enterprise/pyproject.toml b/enterprise/pyproject.toml index 217bb753f4..1d1fa64549 100644 --- a/enterprise/pyproject.toml +++ b/enterprise/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm-enterprise" -version = "0.1.19" +version = "0.1.20" description = "Package for LiteLLM Enterprise features" authors = ["BerriAI"] readme = "README.md" @@ -22,7 +22,7 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "0.1.19" +version = "0.1.20" version_files = [ "pyproject.toml:version", "../requirements.txt:litellm-enterprise==", diff --git a/examples/sdk_headers_example.py b/examples/sdk_headers_example.py new file mode 100644 index 0000000000..4ce31df4a7 --- /dev/null +++ b/examples/sdk_headers_example.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 +""" +Example demonstrating LiteLLM SDK header support for enterprise environments. + +This example shows how to use additional headers with API gateways, service meshes, +and multi-tenant architectures. +""" + +import litellm +import os +from typing import Dict, Any + +def example_global_headers(): + """Example: Set global headers for all requests""" + print("=== Global Headers Example ===") + + # Set global headers that will be included in all API requests + litellm.headers = { + "X-API-Gateway-Key": "your-gateway-key-here", + "X-Company-ID": "acme-corp", + "X-Environment": "production" + } + + print("Global headers set:", litellm.headers) + + # These headers will now be included in all completion calls + # (Note: This example doesn't actually make API calls) + print("Global headers will be included in all subsequent completion() calls") + + +def example_per_request_headers(): + """Example: Using extra_headers for specific requests""" + print("\n=== Per-Request Headers Example ===") + + headers_to_send = { + "X-Request-ID": "req-12345", + "X-Tenant-ID": "tenant-abc", + "X-Custom-Auth": "bearer-token-xyz" + } + + print("Per-request headers:", headers_to_send) + + # Example of how you would use extra_headers in a real call + # response = litellm.completion( + # model="claude-3-5-sonnet-latest", + # messages=[{"role": "user", "content": "Hello"}], + # extra_headers=headers_to_send + # ) + + +def example_header_priority(): + """Example: Demonstrating header priority and merging""" + print("\n=== Header Priority Example ===") + + # Set global headers + litellm.headers = { + "X-Company-ID": "acme-corp", + "X-Shared-Header": "global-value" + } + + # Headers that would be sent in a request + extra_headers = { + "X-Request-ID": "req-12345", + "X-Shared-Header": "extra-value" # Overrides global + } + + request_headers = { + "X-Priority-Header": "important", + "X-Shared-Header": "request-value" # Overrides both global and extra + } + + print("Global headers:", litellm.headers) + print("Extra headers:", extra_headers) + print("Request headers:", request_headers) + print("\nFinal headers would be:") + print(" X-Company-ID: acme-corp (from global)") + print(" X-Request-ID: req-12345 (from extra)") + print(" X-Priority-Header: important (from request)") + print(" X-Shared-Header: request-value (request wins - highest priority)") + + +def example_enterprise_api_gateway(): + """Example: Enterprise API Gateway scenario""" + print("\n=== Enterprise API Gateway Example ===") + + # Simulate enterprise environment with Apigee or similar + gateway_config = { + "X-API-Gateway-Key": os.getenv("API_GATEWAY_KEY", "demo-key"), + "X-Route-Version": "v2", + "X-Rate-Limit-Group": "premium" + } + + # Set gateway headers globally + litellm.headers = gateway_config + print("Gateway headers configured:", gateway_config) + + # Function to make tenant-specific requests + def make_tenant_request(tenant_id: str, user_id: str, content: str) -> Dict[str, Any]: + """Make an AI request with tenant-specific headers""" + + tenant_headers = { + "X-Tenant-ID": tenant_id, + "X-User-ID": user_id, + "X-Request-Time": "2024-01-01T00:00:00Z", + "X-Service-Name": "ai-assistant" + } + + print(f"Making request for tenant {tenant_id}, user {user_id}") + print("Tenant-specific headers:", tenant_headers) + + # In a real scenario, this would make the actual API call: + # return litellm.completion( + # model="claude-3-5-sonnet-latest", + # messages=[{"role": "user", "content": content}], + # extra_headers=tenant_headers + # ) + + # For demo purposes, return mock data + return {"mock": "response", "headers_used": {**gateway_config, **tenant_headers}} + + # Example usage + result = make_tenant_request("tenant-123", "user-456", "Analyze this data") + print("Response:", result) + + +def example_service_mesh(): + """Example: Service mesh integration (Istio, Linkerd)""" + print("\n=== Service Mesh Example ===") + + service_mesh_headers = { + "X-Trace-ID": "trace-abc-123", + "X-Span-ID": "span-def-456", + "X-Service-Name": "ai-service", + "X-Version": "1.2.3", + "X-Cluster": "prod-us-west-2" + } + + print("Service mesh headers:", service_mesh_headers) + + # Example of using these headers for distributed tracing + # response = litellm.completion( + # model="gpt-4", + # messages=[{"role": "user", "content": "Hello"}], + # extra_headers=service_mesh_headers + # ) + + +def example_debugging_and_monitoring(): + """Example: Request debugging and monitoring""" + print("\n=== Debugging and Monitoring Example ===") + + import uuid + import time + + # Generate unique identifiers for request tracking + trace_id = str(uuid.uuid4()) + request_id = f"req-{int(time.time())}" + + debug_headers = { + "X-Trace-ID": trace_id, + "X-Request-ID": request_id, + "X-Debug-Mode": "true", + "X-Source-Service": "customer-support-bot", + "X-Request-Priority": "high" + } + + print("Debug headers:", debug_headers) + print(f"Trace ID: {trace_id}") + print(f"Request ID: {request_id}") + + # These headers help with: + # 1. Distributed tracing across services + # 2. Request correlation in logs + # 3. Debug mode enablement + # 4. Priority-based routing + + +if __name__ == "__main__": + print("LiteLLM SDK Header Support Examples") + print("=" * 50) + + example_global_headers() + example_per_request_headers() + example_header_priority() + example_enterprise_api_gateway() + example_service_mesh() + example_debugging_and_monitoring() + + print("\n" + "=" * 50) + print("All examples completed!") + print("\nTo use in your application:") + print("1. Set litellm.headers for global headers") + print("2. Use extra_headers parameter for request-specific headers") + print("3. Use headers parameter for highest priority headers") + print("4. Headers are merged with priority: headers > extra_headers > litellm.headers") \ No newline at end of file diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.2.19-py3-none-any.whl b/litellm-proxy-extras/dist/litellm_proxy_extras-0.2.19-py3-none-any.whl new file mode 100644 index 0000000000..c035bb4421 Binary files /dev/null and b/litellm-proxy-extras/dist/litellm_proxy_extras-0.2.19-py3-none-any.whl differ diff --git a/litellm-proxy-extras/dist/litellm_proxy_extras-0.2.19.tar.gz b/litellm-proxy-extras/dist/litellm_proxy_extras-0.2.19.tar.gz new file mode 100644 index 0000000000..85069c622b Binary files /dev/null and b/litellm-proxy-extras/dist/litellm_proxy_extras-0.2.19.tar.gz differ diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20250918083359_drop_spec_version_column_from_mcp_table/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20250918083359_drop_spec_version_column_from_mcp_table/migration.sql new file mode 100644 index 0000000000..5686876b37 --- /dev/null +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20250918083359_drop_spec_version_column_from_mcp_table/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - You are about to drop the column `spec_version` on the `LiteLLM_MCPServerTable` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "public"."LiteLLM_MCPServerTable" DROP COLUMN "spec_version"; diff --git a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma index b8f2201d6b..2b1e20820f 100644 --- a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma +++ b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma @@ -171,7 +171,6 @@ model LiteLLM_MCPServerTable { description String? url String? transport String @default("sse") - spec_version String @default("2025-03-26") auth_type String? created_at DateTime? @default(now()) @map("created_at") created_by String? diff --git a/litellm-proxy-extras/pyproject.toml b/litellm-proxy-extras/pyproject.toml index 0cb9c35fa6..1c368d5807 100644 --- a/litellm-proxy-extras/pyproject.toml +++ b/litellm-proxy-extras/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm-proxy-extras" -version = "0.2.18" +version = "0.2.19" description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package." authors = ["BerriAI"] readme = "README.md" @@ -22,7 +22,7 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "0.2.18" +version = "0.2.19" version_files = [ "pyproject.toml:version", "../requirements.txt:litellm-proxy-extras==", diff --git a/litellm/__init__.py b/litellm/__init__.py index 8404cf5125..aa8357b6c7 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -68,6 +68,7 @@ from litellm.constants import ( bedrock_embedding_models, known_tokenizer_config, BEDROCK_INVOKE_PROVIDERS_LITERAL, + BEDROCK_EMBEDDING_PROVIDERS_LITERAL, BEDROCK_CONVERSE_MODELS, DEFAULT_MAX_TOKENS, DEFAULT_SOFT_BUDGET, @@ -117,6 +118,7 @@ _custom_logger_compatible_callbacks_literal = Literal[ "logfire", "literalai", "dynamic_rate_limiter", + "dynamic_rate_limiter_v3", "langsmith", "prometheus", "otel", @@ -148,6 +150,7 @@ _custom_logger_compatible_callbacks_literal = Literal[ "vector_store_pre_call_hook", "dotprompt", "cloudzero", + "posthog", ] configured_cold_storage_logger: Optional[ _custom_logger_compatible_callbacks_literal @@ -1051,7 +1054,6 @@ from .llms.databricks.chat.transformation import DatabricksConfig from .llms.databricks.embed.transformation import DatabricksEmbeddingConfig from .llms.predibase.chat.transformation import PredibaseConfig from .llms.replicate.chat.transformation import ReplicateConfig -from .llms.cohere.completion.transformation import CohereTextConfig as CohereConfig from .llms.snowflake.chat.transformation import SnowflakeConfig from .llms.cohere.rerank.transformation import CohereRerankConfig from .llms.cohere.rerank_v2.transformation import CohereRerankV2Config diff --git a/litellm/batches/main.py b/litellm/batches/main.py index e5c7a2e4b6..37b9aff4ef 100644 --- a/litellm/batches/main.py +++ b/litellm/batches/main.py @@ -340,7 +340,7 @@ def create_batch( @client async def aretrieve_batch( batch_id: str, - custom_llm_provider: Literal["openai", "azure", "vertex_ai"] = "openai", + custom_llm_provider: Literal["openai", "azure", "vertex_ai", "bedrock"] = "openai", metadata: Optional[Dict[str, str]] = None, extra_headers: Optional[Dict[str, str]] = None, extra_body: Optional[Dict[str, str]] = None, @@ -378,11 +378,129 @@ async def aretrieve_batch( except Exception as e: raise e +def _handle_retrieve_batch_providers_without_provider_config( + batch_id: str, + optional_params: GenericLiteLLMParams, + timeout: Union[float, httpx.Timeout], + litellm_params: dict, + _retrieve_batch_request: RetrieveBatchRequest, + _is_async: bool, + custom_llm_provider: Literal["openai", "azure", "vertex_ai", "bedrock"] = "openai", +): + api_base: Optional[str] = None + if custom_llm_provider == "openai": + # for deepinfra/perplexity/anyscale/groq we check in get_llm_provider and pass in the api base from there + api_base = ( + optional_params.api_base + or litellm.api_base + or os.getenv("OPENAI_BASE_URL") + or os.getenv("OPENAI_API_BASE") + or "https://api.openai.com/v1" + ) + organization = ( + optional_params.organization + or litellm.organization + or os.getenv("OPENAI_ORGANIZATION", None) + or None # default - https://github.com/openai/openai-python/blob/284c1799070c723c6a553337134148a7ab088dd8/openai/util.py#L105 + ) + # set API KEY + api_key = ( + optional_params.api_key + or litellm.api_key # for deepinfra/perplexity/anyscale we check in get_llm_provider and pass in the api key from there + or litellm.openai_key + or os.getenv("OPENAI_API_KEY") + ) + + response = openai_batches_instance.retrieve_batch( + _is_async=_is_async, + retrieve_batch_data=_retrieve_batch_request, + api_base=api_base, + api_key=api_key, + organization=organization, + timeout=timeout, + max_retries=optional_params.max_retries, + ) + elif custom_llm_provider == "azure": + api_base = ( + optional_params.api_base + or litellm.api_base + or get_secret_str("AZURE_API_BASE") + ) + api_version = ( + optional_params.api_version + or litellm.api_version + or get_secret_str("AZURE_API_VERSION") + ) + + api_key = ( + optional_params.api_key + or litellm.api_key + or litellm.azure_key + or get_secret_str("AZURE_OPENAI_API_KEY") + or get_secret_str("AZURE_API_KEY") + ) + + extra_body = optional_params.get("extra_body", {}) + if extra_body is not None: + extra_body.pop("azure_ad_token", None) + else: + get_secret_str("AZURE_AD_TOKEN") # type: ignore + + response = azure_batches_instance.retrieve_batch( + _is_async=_is_async, + api_base=api_base, + api_key=api_key, + api_version=api_version, + timeout=timeout, + max_retries=optional_params.max_retries, + retrieve_batch_data=_retrieve_batch_request, + litellm_params=litellm_params, + ) + elif custom_llm_provider == "vertex_ai": + api_base = optional_params.api_base or "" + vertex_ai_project = ( + optional_params.vertex_project + or litellm.vertex_project + or get_secret_str("VERTEXAI_PROJECT") + ) + vertex_ai_location = ( + optional_params.vertex_location + or litellm.vertex_location + or get_secret_str("VERTEXAI_LOCATION") + ) + vertex_credentials = optional_params.vertex_credentials or get_secret_str( + "VERTEXAI_CREDENTIALS" + ) + + response = vertex_ai_batches_instance.retrieve_batch( + _is_async=_is_async, + batch_id=batch_id, + api_base=api_base, + vertex_project=vertex_ai_project, + vertex_location=vertex_ai_location, + vertex_credentials=vertex_credentials, + timeout=timeout, + max_retries=optional_params.max_retries, + ) + else: + raise litellm.exceptions.BadRequestError( + message="LiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.".format( + custom_llm_provider + ), + model="n/a", + llm_provider=custom_llm_provider, + response=httpx.Response( + status_code=400, + content="Unsupported provider", + request=httpx.Request(method="create_thread", url="https://github.com/BerriAI/litellm"), # type: ignore + ), + ) + return response @client def retrieve_batch( batch_id: str, - custom_llm_provider: Literal["openai", "azure", "vertex_ai"] = "openai", + custom_llm_provider: Literal["openai", "azure", "vertex_ai", "bedrock"] = "openai", metadata: Optional[Dict[str, str]] = None, extra_headers: Optional[Dict[str, str]] = None, extra_body: Optional[Dict[str, str]] = None, @@ -430,115 +548,59 @@ def retrieve_batch( ) _is_async = kwargs.pop("aretrieve_batch", False) is True - api_base: Optional[str] = None - if custom_llm_provider == "openai": - # for deepinfra/perplexity/anyscale/groq we check in get_llm_provider and pass in the api base from there - api_base = ( - optional_params.api_base - or litellm.api_base - or os.getenv("OPENAI_BASE_URL") - or os.getenv("OPENAI_API_BASE") - or "https://api.openai.com/v1" - ) - organization = ( - optional_params.organization - or litellm.organization - or os.getenv("OPENAI_ORGANIZATION", None) - or None # default - https://github.com/openai/openai-python/blob/284c1799070c723c6a553337134148a7ab088dd8/openai/util.py#L105 - ) - # set API KEY - api_key = ( - optional_params.api_key - or litellm.api_key # for deepinfra/perplexity/anyscale we check in get_llm_provider and pass in the api key from there - or litellm.openai_key - or os.getenv("OPENAI_API_KEY") - ) - - response = openai_batches_instance.retrieve_batch( - _is_async=_is_async, - retrieve_batch_data=_retrieve_batch_request, - api_base=api_base, - api_key=api_key, - organization=organization, - timeout=timeout, - max_retries=optional_params.max_retries, - ) - elif custom_llm_provider == "azure": - api_base = ( - optional_params.api_base - or litellm.api_base - or get_secret_str("AZURE_API_BASE") - ) - api_version = ( - optional_params.api_version - or litellm.api_version - or get_secret_str("AZURE_API_VERSION") - ) - - api_key = ( - optional_params.api_key - or litellm.api_key - or litellm.azure_key - or get_secret_str("AZURE_OPENAI_API_KEY") - or get_secret_str("AZURE_API_KEY") - ) - - extra_body = optional_params.get("extra_body", {}) - if extra_body is not None: - extra_body.pop("azure_ad_token", None) - else: - get_secret_str("AZURE_AD_TOKEN") # type: ignore - - response = azure_batches_instance.retrieve_batch( - _is_async=_is_async, - api_base=api_base, - api_key=api_key, - api_version=api_version, - timeout=timeout, - max_retries=optional_params.max_retries, - retrieve_batch_data=_retrieve_batch_request, - litellm_params=litellm_params, - ) - elif custom_llm_provider == "vertex_ai": - api_base = optional_params.api_base or "" - vertex_ai_project = ( - optional_params.vertex_project - or litellm.vertex_project - or get_secret_str("VERTEXAI_PROJECT") - ) - vertex_ai_location = ( - optional_params.vertex_location - or litellm.vertex_location - or get_secret_str("VERTEXAI_LOCATION") - ) - vertex_credentials = optional_params.vertex_credentials or get_secret_str( - "VERTEXAI_CREDENTIALS" - ) - - response = vertex_ai_batches_instance.retrieve_batch( - _is_async=_is_async, - batch_id=batch_id, - api_base=api_base, - vertex_project=vertex_ai_project, - vertex_location=vertex_ai_location, - vertex_credentials=vertex_credentials, - timeout=timeout, - max_retries=optional_params.max_retries, + client = kwargs.get("client", None) + + # Try to use provider config first (for providers like bedrock) + model: Optional[str] = kwargs.get("model", None) + if model is not None: + provider_config = ProviderConfigManager.get_provider_batches_config( + model=model, + provider=LlmProviders(custom_llm_provider), ) else: - raise litellm.exceptions.BadRequestError( - message="LiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.".format( - custom_llm_provider - ), - model="n/a", - llm_provider=custom_llm_provider, - response=httpx.Response( - status_code=400, - content="Unsupported provider", - request=httpx.Request(method="create_thread", url="https://github.com/BerriAI/litellm"), # type: ignore + provider_config = None + + if provider_config is not None: + response = base_llm_http_handler.retrieve_batch( + batch_id=batch_id, + provider_config=provider_config, + litellm_params=litellm_params, + headers=extra_headers or {}, + api_base=optional_params.api_base, + api_key=optional_params.api_key, + logging_obj=litellm_logging_obj or LiteLLMLoggingObj( + model=model or "bedrock/unknown", + messages=[], + stream=False, + call_type="batch_retrieve", + start_time=None, + litellm_call_id="batch_retrieve_" + batch_id, + function_id="batch_retrieve", ), + _is_async=_is_async, + client=client + if client is not None + and isinstance(client, (HTTPHandler, AsyncHTTPHandler)) + else None, + timeout=timeout, + model=model, ) - return response + return response + + + ######################################################### + # Handle providers without provider config + ######################################################### + return _handle_retrieve_batch_providers_without_provider_config( + batch_id=batch_id, + custom_llm_provider=custom_llm_provider, + optional_params=optional_params, + litellm_params=litellm_params, + _retrieve_batch_request=_retrieve_batch_request, + _is_async=_is_async, + timeout=timeout, + ) + except Exception as e: raise e diff --git a/litellm/caching/redis_cache.py b/litellm/caching/redis_cache.py index 47bc0222ed..af7468ba14 100644 --- a/litellm/caching/redis_cache.py +++ b/litellm/caching/redis_cache.py @@ -19,6 +19,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Tuple, Union, cast import litellm from litellm._logging import print_verbose, verbose_logger from litellm.litellm_core_utils.core_helpers import _get_parent_otel_span_from_kwargs +from litellm.litellm_core_utils.coroutine_checker import coroutine_checker from litellm.types.caching import RedisPipelineIncrementOperation from litellm.types.services import ServiceTypes @@ -138,7 +139,7 @@ class RedisCache(BaseCache): self.redis_flush_size = redis_flush_size self.redis_version = "Unknown" try: - if not inspect.iscoroutinefunction(self.redis_client): + if not coroutine_checker.is_async_callable(self.redis_client): self.redis_version = self.redis_client.info()["redis_version"] # type: ignore except Exception: pass diff --git a/litellm/constants.py b/litellm/constants.py index bb8da97a8f..005eb2bb6d 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -179,7 +179,7 @@ NON_LLM_CONNECTION_TIMEOUT = int( os.getenv("NON_LLM_CONNECTION_TIMEOUT", 15) ) # timeout for adjacent services (e.g. jwt auth) MAX_EXCEPTION_MESSAGE_LENGTH = int(os.getenv("MAX_EXCEPTION_MESSAGE_LENGTH", 2000)) -MAX_STRING_LENGTH_PROMPT_IN_DB = int(os.getenv("MAX_STRING_LENGTH_PROMPT_IN_DB", 1000)) +MAX_STRING_LENGTH_PROMPT_IN_DB = int(os.getenv("MAX_STRING_LENGTH_PROMPT_IN_DB", 2048)) BEDROCK_MAX_POLICY_SIZE = int(os.getenv("BEDROCK_MAX_POLICY_SIZE", 75)) REPLICATE_POLLING_DELAY_SECONDS = float( os.getenv("REPLICATE_POLLING_DELAY_SECONDS", 0.5) @@ -805,6 +805,12 @@ BEDROCK_INVOKE_PROVIDERS_LITERAL = Literal[ "deepseek_r1", ] +BEDROCK_EMBEDDING_PROVIDERS_LITERAL = Literal[ + "cohere", + "amazon", + "twelvelabs", +] + BEDROCK_CONVERSE_MODELS = [ "openai.gpt-oss-20b-1:0", "openai.gpt-oss-120b-1:0", @@ -858,6 +864,7 @@ bedrock_embedding_models: set = set( "amazon.titan-embed-text-v1", "cohere.embed-english-v3", "cohere.embed-multilingual-v3", + "twelvelabs.marengo-embed-2-7-v1:0", ] ) @@ -976,6 +983,7 @@ HEALTH_CHECK_TIMEOUT_SECONDS = int( os.getenv("HEALTH_CHECK_TIMEOUT_SECONDS", 60) ) # 60 seconds LITTELM_INTERNAL_HEALTH_SERVICE_ACCOUNT_NAME = "litellm-internal-health-check" +LITTELM_CLI_SERVICE_ACCOUNT_NAME = "litellm-cli" UI_SESSION_TOKEN_TEAM_ID = "litellm-dashboard" LITELLM_PROXY_ADMIN_NAME = "default_user_id" @@ -1099,3 +1107,8 @@ SENTRY_PII_DENYLIST = [ "SMTP_SENDER_EMAIL", "TEST_EMAIL_ADDRESS", ] + +# CoroutineChecker cache configuration +COROUTINE_CHECKER_MAX_SIZE_IN_MEMORY = int( + os.getenv("COROUTINE_CHECKER_MAX_SIZE_IN_MEMORY", 1000) +) diff --git a/litellm/experimental_mcp_client/client.py b/litellm/experimental_mcp_client/client.py index c97da6624a..ecb58e1822 100644 --- a/litellm/experimental_mcp_client/client.py +++ b/litellm/experimental_mcp_client/client.py @@ -19,8 +19,6 @@ from litellm._logging import verbose_logger from litellm.types.mcp import ( MCPAuth, MCPAuthType, - MCPSpecVersion, - MCPSpecVersionType, MCPStdioConfig, MCPTransport, MCPTransportType, @@ -48,7 +46,6 @@ class MCPClient: auth_value: Optional[str] = None, timeout: float = 60.0, stdio_config: Optional[MCPStdioConfig] = None, - protocol_version: MCPSpecVersionType = MCPSpecVersion.jun_2025, ): self.server_url: str = server_url self.transport_type: MCPTransport = transport_type @@ -62,7 +59,6 @@ class MCPClient: self._session_ctx = None self._task: Optional[asyncio.Task] = None self.stdio_config: Optional[MCPStdioConfig] = stdio_config - self.protocol_version: MCPSpecVersionType = protocol_version # handle the basic auth value if provided if auth_value: @@ -84,22 +80,24 @@ class MCPClient: """Initialize the transport and session.""" if self._session: return # Already connected - + try: if self.transport_type == MCPTransport.stdio: # For stdio transport, use stdio_client with command-line parameters if not self.stdio_config: raise ValueError("stdio_config is required for stdio transport") - + server_params = StdioServerParameters( command=self.stdio_config.get("command", ""), args=self.stdio_config.get("args", []), - env=self.stdio_config.get("env", {}) + env=self.stdio_config.get("env", {}), ) - + self._transport_ctx = stdio_client(server_params) self._transport = await self._transport_ctx.__aenter__() - self._session_ctx = ClientSession(self._transport[0], self._transport[1]) + self._session_ctx = ClientSession( + self._transport[0], self._transport[1] + ) self._session = await self._session_ctx.__aenter__() await self._session.initialize() elif self.transport_type == MCPTransport.sse: @@ -110,7 +108,9 @@ class MCPClient: headers=headers, ) self._transport = await self._transport_ctx.__aenter__() - self._session_ctx = ClientSession(self._transport[0], self._transport[1]) + self._session_ctx = ClientSession( + self._transport[0], self._transport[1] + ) self._session = await self._session_ctx.__aenter__() await self._session.initialize() else: # http @@ -121,7 +121,9 @@ class MCPClient: headers=headers, ) self._transport = await self._transport_ctx.__aenter__() - self._session_ctx = ClientSession(self._transport[0], self._transport[1]) + self._session_ctx = ClientSession( + self._transport[0], self._transport[1] + ) self._session = await self._session_ctx.__aenter__() await self._session.initialize() except ValueError as e: @@ -184,8 +186,10 @@ class MCPClient: def _get_auth_headers(self) -> dict: """Generate authentication headers based on auth type.""" - headers = {} - + headers = { + "MCP-Protocol-Version": "2025-06-18" + } + if self._mcp_auth_value: if self.auth_type == MCPAuth.bearer_token: headers["Authorization"] = f"Bearer {self._mcp_auth_value}" @@ -196,18 +200,8 @@ class MCPClient: elif self.auth_type == MCPAuth.authorization: headers["Authorization"] = self._mcp_auth_value - # Handle protocol version - it might be a string or enum - if hasattr(self.protocol_version, 'value'): - # It's an enum - protocol_version_str = self.protocol_version.value - else: - # It's a string - protocol_version_str = str(self.protocol_version) - - headers["MCP-Protocol-Version"] = protocol_version_str return headers - async def list_tools(self) -> List[MCPTool]: """List available tools from the server.""" if not self._session: @@ -216,7 +210,7 @@ class MCPClient: except Exception as e: verbose_logger.warning(f"MCP client connection failed: {str(e)}") return [] - + if self._session is None: verbose_logger.warning("MCP client session is not initialized") return [] @@ -245,17 +239,20 @@ class MCPClient: except Exception as e: verbose_logger.warning(f"MCP client connection failed: {str(e)}") return MCPCallToolResult( - content=[TextContent(type="text", text=f"{str(e)}")], - isError=True + content=[TextContent(type="text", text=f"{str(e)}")], isError=True ) if self._session is None: verbose_logger.warning("MCP client session is not initialized") return MCPCallToolResult( - content=[TextContent(type="text", text="MCP client session is not initialized")], + content=[ + TextContent( + type="text", text="MCP client session is not initialized" + ) + ], isError=True, ) - + try: tool_result = await self._session.call_tool( name=call_tool_request_params.name, @@ -270,8 +267,8 @@ class MCPClient: await self.disconnect() # Return a default error result instead of raising return MCPCallToolResult( - content=[TextContent(type="text", text=f"{str(e)}")], # Empty content for error case + content=[ + TextContent(type="text", text=f"{str(e)}") + ], # Empty content for error case isError=True, ) - - diff --git a/litellm/files/main.py b/litellm/files/main.py index 299e52895b..18be2c702b 100644 --- a/litellm/files/main.py +++ b/litellm/files/main.py @@ -731,7 +731,7 @@ def file_list( async def afile_content( file_id: str, - custom_llm_provider: Literal["openai", "azure"] = "openai", + custom_llm_provider: Literal["openai", "azure", "vertex_ai"] = "openai", extra_headers: Optional[Dict[str, str]] = None, extra_body: Optional[Dict[str, str]] = None, **kwargs, @@ -887,6 +887,32 @@ def file_content( client=client, litellm_params=litellm_params_dict, ) + elif custom_llm_provider == "vertex_ai": + api_base = optional_params.api_base or "" + vertex_ai_project = ( + optional_params.vertex_project + or litellm.vertex_project + or get_secret_str("VERTEXAI_PROJECT") + ) + vertex_ai_location = ( + optional_params.vertex_location + or litellm.vertex_location + or get_secret_str("VERTEXAI_LOCATION") + ) + vertex_credentials = optional_params.vertex_credentials or get_secret_str( + "VERTEXAI_CREDENTIALS" + ) + + response = vertex_ai_files_instance.file_content( + _is_async=_is_async, + file_content_request=_file_content_request, + api_base=api_base, + vertex_credentials=vertex_credentials, + vertex_project=vertex_ai_project, + vertex_location=vertex_ai_location, + timeout=timeout, + max_retries=optional_params.max_retries, + ) else: raise litellm.exceptions.BadRequestError( message="LiteLLM doesn't support {} for 'custom_llm_provider'. Supported providers are 'openai', 'azure', 'vertex_ai'.".format( diff --git a/litellm/integrations/custom_guardrail.py b/litellm/integrations/custom_guardrail.py index 40d2137a7f..6b77557cd3 100644 --- a/litellm/integrations/custom_guardrail.py +++ b/litellm/integrations/custom_guardrail.py @@ -357,6 +357,7 @@ class CustomGuardrail(CustomLogger): end_time: Optional[float] = None, duration: Optional[float] = None, masked_entity_count: Optional[Dict[str, int]] = None, + guardrail_provider: Optional[str] = None, ) -> None: """ Builds `StandardLoggingGuardrailInformation` and adds it to the request metadata so it can be used for logging to DataDog, Langfuse, etc. @@ -367,6 +368,7 @@ class CustomGuardrail(CustomLogger): slg = StandardLoggingGuardrailInformation( guardrail_name=self.guardrail_name, + guardrail_provider=guardrail_provider, guardrail_mode=( GuardrailMode(**self.event_hook.model_dump()) # type: ignore if isinstance(self.event_hook, Mode) @@ -487,7 +489,8 @@ class CustomGuardrail(CustomLogger): """ Update the guardrails litellm params in memory """ - pass + for key, value in vars(litellm_params).items(): + setattr(self, key, value) def log_guardrail_information(func): diff --git a/litellm/integrations/datadog/datadog_llm_obs.py b/litellm/integrations/datadog/datadog_llm_obs.py index adab0ca659..2702192f63 100644 --- a/litellm/integrations/datadog/datadog_llm_obs.py +++ b/litellm/integrations/datadog/datadog_llm_obs.py @@ -148,10 +148,22 @@ class DataDogLLMObsLogger(DataDogLogger, CustomBatchLogger): ), ), } - verbose_logger.debug("payload %s", json.dumps(payload, indent=4)) + + # serialize datetime objects - for budget reset time in spend metrics + from litellm.litellm_core_utils.safe_json_dumps import safe_dumps + + try: + verbose_logger.debug("payload %s", safe_dumps(payload)) + except Exception as debug_error: + verbose_logger.debug( + "payload serialization failed: %s", str(debug_error) + ) + + json_payload = safe_dumps(payload) + response = await self.async_client.post( url=self.intake_url, - json=payload, + content=json_payload, headers={ "DD-API-KEY": self.DD_API_KEY, "Content-Type": "application/json", @@ -486,6 +498,7 @@ class DataDogLLMObsLogger(DataDogLogger, CustomBatchLogger): "guardrail_information": standard_logging_payload.get( "guardrail_information", None ), + "is_streamed_request": self._get_stream_value_from_payload(standard_logging_payload), } ######################################################### @@ -494,6 +507,12 @@ class DataDogLLMObsLogger(DataDogLogger, CustomBatchLogger): latency_metrics = self._get_latency_metrics(standard_logging_payload) _metadata.update({"latency_metrics": dict(latency_metrics)}) + ######################################################### + # Add spend metrics to metadata + ######################################################### + spend_metrics = self._get_spend_metrics(standard_logging_payload) + _metadata.update({"spend_metrics": dict(spend_metrics)}) + ## extract tool calls and add to metadata tool_call_metadata = self._extract_tool_call_metadata(standard_logging_payload) _metadata.update(tool_call_metadata) @@ -543,6 +562,96 @@ class DataDogLLMObsLogger(DataDogLogger, CustomBatchLogger): return latency_metrics + def _get_stream_value_from_payload(self, standard_logging_payload: StandardLoggingPayload) -> bool: + """ + Extract the stream value from standard logging payload. + + The stream field in StandardLoggingPayload is only set to True for completed streaming responses. + For non-streaming requests, it's None. The original stream parameter is in model_parameters. + + Returns: + bool: True if this was a streaming request, False otherwise + """ + # Check top-level stream field first (only True for completed streaming) + stream_value = standard_logging_payload.get("stream") + if stream_value is True: + return True + + # Fallback to model_parameters.stream for original request parameters + model_params = standard_logging_payload.get("model_parameters", {}) + if isinstance(model_params, dict): + stream_value = model_params.get("stream") + if stream_value is True: + return True + + # Default to False for non-streaming requests + return False + + def _get_spend_metrics( + self, standard_logging_payload: StandardLoggingPayload + ) -> DDLLMObsSpendMetrics: + """ + Get the spend metrics from the standard logging payload + """ + spend_metrics: DDLLMObsSpendMetrics = DDLLMObsSpendMetrics() + + # send response cost + spend_metrics["response_cost"] = standard_logging_payload.get( + "response_cost", 0.0 + ) + + # Get budget information from metadata + metadata = standard_logging_payload.get("metadata", {}) + + # API key max budget + user_api_key_max_budget = metadata.get("user_api_key_max_budget") + if user_api_key_max_budget is not None: + spend_metrics["user_api_key_max_budget"] = float(user_api_key_max_budget) + + # API key spend + user_api_key_spend = metadata.get("user_api_key_spend") + if user_api_key_spend is not None: + try: + spend_metrics["user_api_key_spend"] = float(user_api_key_spend) + except (ValueError, TypeError): + verbose_logger.debug( + f"Invalid user_api_key_spend value: {user_api_key_spend}" + ) + + # API key budget reset datetime + user_api_key_budget_reset_at = metadata.get("user_api_key_budget_reset_at") + if user_api_key_budget_reset_at is not None: + try: + from datetime import datetime, timezone + + budget_reset_at = None + if isinstance(user_api_key_budget_reset_at, str): + # Handle ISO format strings that might have 'Z' suffix + iso_string = user_api_key_budget_reset_at.replace("Z", "+00:00") + budget_reset_at = datetime.fromisoformat(iso_string) + elif isinstance(user_api_key_budget_reset_at, datetime): + budget_reset_at = user_api_key_budget_reset_at + + if budget_reset_at is not None: + # Preserve timezone info if already present + if budget_reset_at.tzinfo is None: + budget_reset_at = budget_reset_at.replace(tzinfo=timezone.utc) + + # Convert to ISO string format for JSON serialization + # This prevents circular reference issues and ensures proper timezone representation + iso_string = budget_reset_at.isoformat() + spend_metrics["user_api_key_budget_reset_at"] = iso_string + + # Debug logging to verify the conversion + verbose_logger.debug( + f"Converted budget_reset_at to ISO format: {iso_string}" + ) + except Exception as e: + verbose_logger.debug(f"Error processing budget reset datetime: {e}") + verbose_logger.debug(f"Original value: {user_api_key_budget_reset_at}") + + return spend_metrics + def _process_input_messages_preserving_tool_calls( self, messages: List[Any] ) -> List[Dict[str, Any]]: diff --git a/litellm/integrations/langfuse/langfuse.py b/litellm/integrations/langfuse/langfuse.py index 9c3f07fa1a..2457773138 100644 --- a/litellm/integrations/langfuse/langfuse.py +++ b/litellm/integrations/langfuse/langfuse.py @@ -15,7 +15,7 @@ from litellm.litellm_core_utils.redact_messages import redact_user_api_key_info from litellm.llms.custom_httpx.http_handler import _get_httpx_client from litellm.secret_managers.main import str_to_bool from litellm.types.integrations.langfuse import * -from litellm.types.llms.openai import HttpxBinaryResponseContent +from litellm.types.llms.openai import HttpxBinaryResponseContent, ResponsesAPIResponse from litellm.types.utils import ( EmbeddingResponse, ImageResponse, @@ -196,6 +196,7 @@ class LangFuseLogger: TranscriptionResponse, RerankResponse, HttpxBinaryResponseContent, + ResponsesAPIResponse, ], start_time: Optional[datetime] = None, end_time: Optional[datetime] = None, @@ -305,6 +306,7 @@ class LangFuseLogger: TranscriptionResponse, RerankResponse, HttpxBinaryResponseContent, + ResponsesAPIResponse, ], prompt: dict, level: str, @@ -369,6 +371,11 @@ class LangFuseLogger: ): input = prompt output = response_obj.results + elif response_obj is not None and isinstance( + response_obj, litellm.ResponsesAPIResponse + ): + input = prompt + output = self._get_responses_api_content_for_langfuse(response_obj) elif ( kwargs.get("call_type") is not None and kwargs.get("call_type") == "_arealtime" @@ -768,6 +775,19 @@ class LangFuseLogger: else: return None + @staticmethod + def _get_responses_api_content_for_langfuse( + response_obj: ResponsesAPIResponse, + ): + """ + Get the responses API content for Langfuse logging + """ + if hasattr(response_obj, 'output') and response_obj.output: + # ResponsesAPIResponse.output is a list of strings + return response_obj.output + else: + return None + @staticmethod def _get_langfuse_tags( standard_logging_object: Optional[StandardLoggingPayload], diff --git a/litellm/integrations/langsmith.py b/litellm/integrations/langsmith.py index 7035aa3a81..7783b704b4 100644 --- a/litellm/integrations/langsmith.py +++ b/litellm/integrations/langsmith.py @@ -39,6 +39,7 @@ class LangsmithLogger(CustomBatchLogger): langsmith_api_key: Optional[str] = None, langsmith_project: Optional[str] = None, langsmith_base_url: Optional[str] = None, + langsmith_sampling_rate: Optional[float] = None, **kwargs, ): self.flush_lock = asyncio.Lock() @@ -49,7 +50,8 @@ class LangsmithLogger(CustomBatchLogger): langsmith_base_url=langsmith_base_url, ) self.sampling_rate: float = ( - float(os.getenv("LANGSMITH_SAMPLING_RATE")) # type: ignore + langsmith_sampling_rate + or float(os.getenv("LANGSMITH_SAMPLING_RATE")) # type: ignore if os.getenv("LANGSMITH_SAMPLING_RATE") is not None and os.getenv("LANGSMITH_SAMPLING_RATE").strip().isdigit() # type: ignore else 1.0 @@ -76,26 +78,14 @@ class LangsmithLogger(CustomBatchLogger): langsmith_base_url: Optional[str] = None, ) -> LangsmithCredentialsObject: _credentials_api_key = langsmith_api_key or os.getenv("LANGSMITH_API_KEY") - if _credentials_api_key is None: - raise Exception( - "Invalid Langsmith API Key given. _credentials_api_key=None." - ) _credentials_project = ( langsmith_project or os.getenv("LANGSMITH_PROJECT") or "litellm-completion" ) - if _credentials_project is None: - raise Exception( - "Invalid Langsmith API Key given. _credentials_project=None." - ) _credentials_base_url = ( langsmith_base_url or os.getenv("LANGSMITH_BASE_URL") or "https://api.smith.langchain.com" ) - if _credentials_base_url is None: - raise Exception( - "Invalid Langsmith API Key given. _credentials_base_url=None." - ) return LangsmithCredentialsObject( LANGSMITH_API_KEY=_credentials_api_key, @@ -200,12 +190,7 @@ class LangsmithLogger(CustomBatchLogger): def log_success_event(self, kwargs, response_obj, start_time, end_time): try: - sampling_rate = ( - float(os.getenv("LANGSMITH_SAMPLING_RATE")) # type: ignore - if os.getenv("LANGSMITH_SAMPLING_RATE") is not None - and os.getenv("LANGSMITH_SAMPLING_RATE").strip().isdigit() # type: ignore - else 1.0 - ) + sampling_rate = self._get_sampling_rate_to_use_for_request(kwargs=kwargs) random_sample = random.random() if random_sample > sampling_rate: verbose_logger.info( @@ -219,6 +204,7 @@ class LangsmithLogger(CustomBatchLogger): kwargs, response_obj, ) + credentials = self._get_credentials_to_use_for_request(kwargs=kwargs) data = self._prepare_log_data( kwargs=kwargs, @@ -245,7 +231,7 @@ class LangsmithLogger(CustomBatchLogger): async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): try: - sampling_rate = self.sampling_rate + sampling_rate = self._get_sampling_rate_to_use_for_request(kwargs=kwargs) random_sample = random.random() if random_sample > sampling_rate: verbose_logger.info( @@ -286,7 +272,7 @@ class LangsmithLogger(CustomBatchLogger): ) async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): - sampling_rate = self.sampling_rate + sampling_rate = self._get_sampling_rate_to_use_for_request(kwargs=kwargs) random_sample = random.random() if random_sample > sampling_rate: verbose_logger.info( @@ -417,6 +403,17 @@ class LangsmithLogger(CustomBatchLogger): for queue_object in self.log_queue: credentials = queue_object["credentials"] + # if credential missing, skip - log warning + if ( + credentials["LANGSMITH_API_KEY"] is None + or credentials["LANGSMITH_PROJECT"] is None + ): + verbose_logger.warning( + "Langsmith Logging - credentials missing - api_key: %s, project: %s", + credentials["LANGSMITH_API_KEY"], + credentials["LANGSMITH_PROJECT"], + ) + continue key = CredentialsKey( api_key=credentials["LANGSMITH_API_KEY"], project=credentials["LANGSMITH_PROJECT"], @@ -432,6 +429,19 @@ class LangsmithLogger(CustomBatchLogger): return log_queue_by_credentials + def _get_sampling_rate_to_use_for_request(self, kwargs: Dict[str, Any]) -> float: + standard_callback_dynamic_params: Optional[StandardCallbackDynamicParams] = ( + kwargs.get("standard_callback_dynamic_params", None) + ) + sampling_rate: float = self.sampling_rate + if standard_callback_dynamic_params is not None: + _sampling_rate = standard_callback_dynamic_params.get( + "langsmith_sampling_rate" + ) + if _sampling_rate is not None: + sampling_rate = float(_sampling_rate) + return sampling_rate + def _get_credentials_to_use_for_request( self, kwargs: Dict[str, Any] ) -> LangsmithCredentialsObject: @@ -442,9 +452,9 @@ class LangsmithLogger(CustomBatchLogger): Otherwise, use the default credentials. """ - standard_callback_dynamic_params: Optional[ - StandardCallbackDynamicParams - ] = kwargs.get("standard_callback_dynamic_params", None) + standard_callback_dynamic_params: Optional[StandardCallbackDynamicParams] = ( + kwargs.get("standard_callback_dynamic_params", None) + ) if standard_callback_dynamic_params is not None: credentials = self.get_credentials_from_env( langsmith_api_key=standard_callback_dynamic_params.get( diff --git a/litellm/integrations/opik/opik.py b/litellm/integrations/opik/opik.py index 8cbfb9e653..9f90d2384d 100644 --- a/litellm/integrations/opik/opik.py +++ b/litellm/integrations/opik/opik.py @@ -3,6 +3,7 @@ Opik Logger that logs LLM events to an Opik server """ import asyncio +from datetime import timezone import json import traceback from typing import Dict, List @@ -291,8 +292,8 @@ class OpikLogger(CustomBatchLogger): "project_name": project_name, "id": trace_id, "name": trace_name, - "start_time": start_time.isoformat() + "Z", - "end_time": end_time.isoformat() + "Z", + "start_time": start_time.astimezone(timezone.utc).isoformat().replace("+00:00", "Z"), + "end_time": end_time.astimezone(timezone.utc).isoformat().replace("+00:00", "Z"), "input": input_data, "output": output_data, "metadata": metadata, @@ -312,8 +313,8 @@ class OpikLogger(CustomBatchLogger): "parent_span_id": parent_span_id, "name": span_name, "type": "llm", - "start_time": start_time.isoformat() + "Z", - "end_time": end_time.isoformat() + "Z", + "start_time": start_time.astimezone(timezone.utc).isoformat().replace("+00:00", "Z"), + "end_time": end_time.astimezone(timezone.utc).isoformat().replace("+00:00", "Z"), "input": input_data, "output": output_data, "metadata": metadata, diff --git a/litellm/integrations/posthog.py b/litellm/integrations/posthog.py new file mode 100644 index 0000000000..d321135f28 --- /dev/null +++ b/litellm/integrations/posthog.py @@ -0,0 +1,333 @@ +""" +PostHog Integration - sends LLM analytics events to PostHog + +Follows PostHog's LLM Analytics format: https://posthog.com/docs/llm-analytics/manual-capture + +async_log_success_event: stores batch of events in memory and flushes to PostHog +async_log_failure_event: logs failed LLM calls with error information + +For batching specific details see CustomBatchLogger class +""" + +import asyncio +import os +import uuid +from typing import Any, Dict, Optional + + +from litellm._logging import verbose_logger +from litellm.integrations.custom_batch_logger import CustomBatchLogger +from litellm.llms.custom_httpx.http_handler import ( + _get_httpx_client, + get_async_httpx_client, + httpxSpecialProvider, +) +from litellm.types.integrations.posthog import ( + POSTHOG_MAX_BATCH_SIZE, + PostHogEventPayload, +) +from litellm.types.utils import StandardLoggingPayload + + +class PostHogLogger(CustomBatchLogger): + def __init__(self, **kwargs): + """ + Initializes the PostHog logger, checks if the correct env variables are set + + Required environment variables: + `POSTHOG_API_KEY` - your PostHog API key + `POSTHOG_API_URL` - your PostHog API URL (defaults to https://app.posthog.com) + """ + try: + verbose_logger.debug("PostHog: in init posthog logger") + if os.getenv("POSTHOG_API_KEY", None) is None: + raise Exception("POSTHOG_API_KEY is not set, set 'POSTHOG_API_KEY=<>'") + + self.async_client = get_async_httpx_client( + llm_provider=httpxSpecialProvider.LoggingCallback + ) + self.sync_client = _get_httpx_client() + + self.POSTHOG_API_KEY = os.getenv("POSTHOG_API_KEY") + posthog_api_url = os.getenv("POSTHOG_API_URL", "https://us.i.posthog.com") + self.posthog_host = posthog_api_url.rstrip('/') + self.capture_url = f"{self.posthog_host}/batch/" + + self._async_initialized = False + self.flush_lock = None + self.log_queue = [] + + super().__init__( + **kwargs, flush_lock=None, batch_size=POSTHOG_MAX_BATCH_SIZE + ) + + except Exception as e: + verbose_logger.exception( + f"PostHog: Got exception on init PostHog client {str(e)}" + ) + raise e + + def log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + verbose_logger.debug( + "PostHog: Sync logging - Enters logging function for model %s", kwargs + ) + + event_payload = self.create_posthog_event_payload(kwargs) + + headers = { + "Content-Type": "application/json", + } + + payload = self._create_posthog_payload([event_payload]) + + response = self.sync_client.post( + url=self.capture_url, + json=payload, + headers=headers, + ) + response.raise_for_status() + + if response.status_code != 200: + raise Exception( + f"Response from PostHog API status_code: {response.status_code}, text: {response.text}" + ) + + verbose_logger.debug("PostHog: Sync event successfully sent") + + except Exception as e: + verbose_logger.exception(f"PostHog Sync Layer Error - {str(e)}") + + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + try: + verbose_logger.debug( + "PostHog: Async logging - Enters logging function for model %s", kwargs + ) + self._ensure_async_setup() # Lazy initialization + await self._log_async_event(kwargs, response_obj, start_time, end_time) + except Exception as e: + verbose_logger.exception(f"PostHog Layer Error - {str(e)}") + pass + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + try: + verbose_logger.debug( + "PostHog: Async logging - Enters logging function for model %s", kwargs + ) + self._ensure_async_setup() # Lazy initialization + await self._log_async_event(kwargs, response_obj, start_time, end_time) + except Exception as e: + verbose_logger.exception(f"PostHog Layer Error - {str(e)}") + pass + + async def _log_async_event(self, kwargs, response_obj=None, start_time=0.0, end_time=0.0): + # Note: response_obj, start_time, end_time not used - all data comes from kwargs + event_payload = self.create_posthog_event_payload(kwargs) + + self.log_queue.append(event_payload) + verbose_logger.debug( + f"PostHog, event added to queue. Will flush in {self.flush_interval} seconds..." + ) + + if len(self.log_queue) >= self.batch_size: + await self.flush_queue() + + def create_posthog_event_payload(self, kwargs: Dict[str, Any]) -> PostHogEventPayload: + """ + Helper function to create a PostHog event payload for logging + + Args: + kwargs (Dict[str, Any]): request kwargs containing standard_logging_object + + Returns: + PostHogEventPayload: defined in types.py + """ + standard_logging_object: Optional[StandardLoggingPayload] = kwargs.get( + "standard_logging_object", None + ) + if standard_logging_object is None: + raise ValueError("standard_logging_object not found in kwargs") + + call_type = standard_logging_object.get("call_type", "") + event_name = "$ai_embedding" if call_type == "embedding" else "$ai_generation" + + properties = self._create_posthog_properties( + standard_logging_object=standard_logging_object, + kwargs=kwargs, + event_name=event_name, + ) + + distinct_id = self._get_distinct_id(standard_logging_object, kwargs) + + return PostHogEventPayload( + event=event_name, + properties=properties, + distinct_id=distinct_id, + ) + + def _create_posthog_properties( + self, + standard_logging_object: StandardLoggingPayload, + kwargs: Dict[str, Any], + event_name: str, + ) -> Dict[str, Any]: + """Create PostHog properties following LLM Analytics spec""" + properties = {} + + # Core model information + properties["$ai_model"] = self._safe_get(standard_logging_object, "model", "") + properties["$ai_provider"] = self._safe_get(standard_logging_object, "custom_llm_provider", "") + + # Input/Output data + messages = self._safe_get(standard_logging_object, "messages") + if messages is not None: + properties["$ai_input"] = messages + + if event_name == "$ai_generation": + response = self._safe_get(standard_logging_object, "response") + if response is not None: + properties["$ai_output_choices"] = response + + # Token information + properties["$ai_input_tokens"] = self._safe_get(standard_logging_object, "prompt_tokens", 0) + if event_name == "$ai_generation": + properties["$ai_output_tokens"] = self._safe_get(standard_logging_object, "completion_tokens", 0) + + # Cost and performance + response_cost = self._safe_get(standard_logging_object, "response_cost") + if response_cost is not None: + properties["$ai_total_cost_usd"] = response_cost + + properties["$ai_latency"] = self._safe_get(standard_logging_object, "response_time", 0.0) + + # Error handling + if self._safe_get(standard_logging_object, "status") == "failure": + properties["$ai_is_error"] = True + error_str = self._safe_get(standard_logging_object, "error_str") + if error_str is not None: + properties["$ai_error"] = error_str + + # Add trace properties + self._add_trace_properties(properties, kwargs) + + # Add custom metadata fields + self._add_custom_metadata_properties(properties, kwargs) + + return properties + + def _add_trace_properties(self, properties: Dict[str, Any], kwargs: Dict[str, Any]): + standard_logging_object = self._safe_get(kwargs, "standard_logging_object", {}) + + trace_id = self._safe_get(standard_logging_object, "trace_id", self._safe_uuid()) + properties["$ai_trace_id"] = trace_id + + span_id = self._safe_get(standard_logging_object, "id", self._safe_uuid()) + properties["$ai_span_id"] = span_id + + metadata = self._extract_metadata(kwargs) + parent_id = metadata.get("parent_run_id") or metadata.get("parent_id") + if parent_id: + properties["$ai_parent_id"] = parent_id + + def _add_custom_metadata_properties(self, properties: Dict[str, Any], kwargs: Dict[str, Any]): + """Add custom metadata fields to PostHog properties""" + metadata = self._extract_metadata(kwargs) + if not isinstance(metadata, dict): + return + + litellm_internal_fields = { + "endpoint", "caching_groups", "user_api_key_hash", "user_api_key_alias", + "user_api_key_team_id", "user_api_key_user_id", "user_api_key_org_id", + "user_api_key_team_alias", "user_api_key_end_user_id", "user_api_key_user_email", + "user_api_key", "user_api_end_user_max_budget", "litellm_api_version", + "global_max_parallel_requests", "user_api_key_team_max_budget", "user_api_key_team_spend", + "user_api_key_spend", "user_api_key_max_budget", "user_api_key_model_max_budget", + "user_api_key_metadata", "headers", "litellm_parent_otel_span", "requester_ip_address", + "model_group", "model_group_size", "deployment", "model_info", "api_base", + "caching_groups", "hidden_params", "parent_run_id", "parent_id", "user_id" + } + + for key, value in metadata.items(): + if key not in litellm_internal_fields: + properties[key] = value + + def _get_distinct_id( + self, standard_logging_object: StandardLoggingPayload, kwargs: Dict[str, Any] + ) -> str: + metadata = self._extract_metadata(kwargs) + user_id = self._safe_get(metadata, "user_id") + if user_id: + return str(user_id) + end_user = self._safe_get(standard_logging_object, "end_user") + if end_user: + return str(end_user) + trace_id = self._safe_get(standard_logging_object, "trace_id") + if trace_id: + return str(trace_id) + + return self._safe_uuid() + + async def async_send_batch(self): + """ + Sends the in memory logs queue to PostHog API + + Raises: + Raises a NON Blocking verbose_logger.exception if an error occurs + """ + try: + if not self.log_queue: + return + + verbose_logger.debug( + f"PostHog: Sending batch of {len(self.log_queue)} events" + ) + + headers = { + "Content-Type": "application/json", + } + + payload = self._create_posthog_payload(list(self.log_queue)) + + response = await self.async_client.post( + url=self.capture_url, + json=payload, + headers=headers, + ) + response.raise_for_status() + + if response.status_code != 200: + raise Exception( + f"Response from PostHog API status_code: {response.status_code}, text: {response.text}" + ) + + verbose_logger.debug( + f"PostHog: Batch of {len(self.log_queue)} events successfully sent" + ) + except Exception as e: + verbose_logger.exception(f"PostHog Error sending batch API - {str(e)}") + + def _ensure_async_setup(self): + if not self._async_initialized: + try: + self.flush_lock = asyncio.Lock() + asyncio.create_task(self.periodic_flush()) + self._async_initialized = True + verbose_logger.debug("PostHog: Async components initialized") + except Exception as e: + verbose_logger.error(f"PostHog: Failed to initialize async components: {str(e)}") + raise + + def _extract_metadata(self, kwargs: Dict[str, Any]) -> Dict[str, Any]: + litellm_params = kwargs.get("litellm_params", {}) or {} + return litellm_params.get("metadata", {}) or {} + + def _safe_uuid(self) -> str: + return str(uuid.uuid4()) + + def _create_posthog_payload(self, events: list) -> Dict[str, Any]: + return {"api_key": self.POSTHOG_API_KEY, "batch": events} + + def _safe_get(self, obj: Any, key: str, default: Any = None) -> Any: + if obj is None or not hasattr(obj, 'get'): + return default + return obj.get(key, default) diff --git a/litellm/litellm_core_utils/cached_imports.py b/litellm/litellm_core_utils/cached_imports.py new file mode 100644 index 0000000000..c3ab292e9c --- /dev/null +++ b/litellm/litellm_core_utils/cached_imports.py @@ -0,0 +1,56 @@ +""" +Cached imports module for LiteLLM. + +This module provides cached import functionality to avoid repeated imports +inside functions that are critical to performance. +""" + +from typing import TYPE_CHECKING, Callable, Optional, Type + +# Type annotations for cached imports +if TYPE_CHECKING: + from litellm.litellm_core_utils.litellm_logging import Logging + from litellm.litellm_core_utils.coroutine_checker import CoroutineChecker + +# Global cache variables +_LiteLLMLogging: Optional[Type["Logging"]] = None +_coroutine_checker: Optional["CoroutineChecker"] = None +_set_callbacks: Optional[Callable] = None + + +def get_litellm_logging_class() -> Type["Logging"]: + """Get the cached LiteLLM Logging class, initializing if needed.""" + global _LiteLLMLogging + if _LiteLLMLogging is not None: + return _LiteLLMLogging + from litellm.litellm_core_utils.litellm_logging import Logging + _LiteLLMLogging = Logging + return _LiteLLMLogging + + +def get_coroutine_checker() -> "CoroutineChecker": + """Get the cached coroutine checker instance, initializing if needed.""" + global _coroutine_checker + if _coroutine_checker is not None: + return _coroutine_checker + from litellm.litellm_core_utils.coroutine_checker import coroutine_checker + _coroutine_checker = coroutine_checker + return _coroutine_checker + + +def get_set_callbacks() -> Callable: + """Get the cached set_callbacks function, initializing if needed.""" + global _set_callbacks + if _set_callbacks is not None: + return _set_callbacks + from litellm.litellm_core_utils.litellm_logging import set_callbacks + _set_callbacks = set_callbacks + return _set_callbacks + + +def clear_cached_imports() -> None: + """Clear all cached imports. Useful for testing or memory management.""" + global _LiteLLMLogging, _coroutine_checker, _set_callbacks + _LiteLLMLogging = None + _coroutine_checker = None + _set_callbacks = None diff --git a/litellm/litellm_core_utils/core_helpers.py b/litellm/litellm_core_utils/core_helpers.py index 4aeb9d4d64..7423e55b62 100644 --- a/litellm/litellm_core_utils/core_helpers.py +++ b/litellm/litellm_core_utils/core_helpers.py @@ -228,9 +228,11 @@ def safe_deep_copy(data): """ Safe Deep Copy - The LiteLLM Request has some object that can-not be pickled / deep copied - - Use this function to safely deep copy the LiteLLM Request + The LiteLLM request may contain objects that cannot be pickled/deep-copied + (e.g., tracing spans, locks, clients). + + This helper deep-copies each top-level key independently; on failure keeps + original ref """ import copy @@ -255,9 +257,22 @@ def safe_deep_copy(data): "litellm_parent_otel_span" ) data["litellm_metadata"]["litellm_parent_otel_span"] = "placeholder" - new_data = copy.deepcopy(data) - # Step 2: re-add the litellm_parent_otel_span after doing a deep copy + # Step 2: Per-key deepcopy with fallback + if isinstance(data, dict): + new_data = {} + for k, v in data.items(): + try: + new_data[k] = copy.deepcopy(v) + except Exception: + new_data[k] = v + else: + try: + new_data = copy.deepcopy(data) + except Exception: + new_data = data + + # Step 3: re-add the litellm_parent_otel_span after doing a deep copy if isinstance(data, dict) and litellm_parent_otel_span is not None: if "metadata" in data and "litellm_parent_otel_span" in data["metadata"]: data["metadata"]["litellm_parent_otel_span"] = litellm_parent_otel_span @@ -268,4 +283,4 @@ def safe_deep_copy(data): data["litellm_metadata"][ "litellm_parent_otel_span" ] = litellm_parent_otel_span - return new_data + return new_data \ No newline at end of file diff --git a/litellm/litellm_core_utils/coroutine_checker.py b/litellm/litellm_core_utils/coroutine_checker.py new file mode 100644 index 0000000000..368aee62ed --- /dev/null +++ b/litellm/litellm_core_utils/coroutine_checker.py @@ -0,0 +1,63 @@ +# CoroutineChecker utility for checking if functions/callables are coroutines or coroutine functions + +import inspect +from typing import Any +from weakref import WeakKeyDictionary +from litellm.constants import ( + COROUTINE_CHECKER_MAX_SIZE_IN_MEMORY, +) + + +class CoroutineChecker: + """Utility class for checking coroutine status of functions and callables. + + Simple bounded cache using WeakKeyDictionary to avoid memory leaks. + """ + + def __init__(self): + self._cache = WeakKeyDictionary() + self._max_size = COROUTINE_CHECKER_MAX_SIZE_IN_MEMORY + + def is_async_callable(self, callback: Any) -> bool: + """Fast, cached check for whether a callback is an async function. + Falls back gracefully if the object cannot be weak-referenced or cached. + 2.59x speedup. + """ + # Fast path: check cache first (most common case) + try: + cached = self._cache.get(callback) + if cached is not None: + return cached + except Exception: + pass + + # Determine target - optimized path for common cases + target = callback + if not inspect.isfunction(target) and not inspect.ismethod(target): + try: + call_attr = getattr(target, "__call__", None) + if call_attr is not None: + target = call_attr + except Exception: + pass + + # Compute result + try: + result = inspect.iscoroutinefunction(target) + except Exception: + result = False + + # Cache the result with size enforcement + try: + # Simple size enforcement: clear cache if it gets too large + if len(self._cache) >= self._max_size: + self._cache.clear() + + self._cache[callback] = result + except Exception: + pass + + return result + +# Global instance for backward compatibility and convenience +coroutine_checker = CoroutineChecker() diff --git a/litellm/litellm_core_utils/custom_logger_registry.py b/litellm/litellm_core_utils/custom_logger_registry.py index af51fe9ab7..bb8fa580e3 100644 --- a/litellm/litellm_core_utils/custom_logger_registry.py +++ b/litellm/litellm_core_utils/custom_logger_registry.py @@ -33,6 +33,7 @@ from litellm.integrations.mlflow import MlflowLogger from litellm.integrations.openmeter import OpenMeterLogger from litellm.integrations.opentelemetry import OpenTelemetry from litellm.integrations.opik.opik import OpikLogger +from litellm.integrations.posthog import PostHogLogger try: from litellm_enterprise.integrations.prometheus import PrometheusLogger @@ -46,6 +47,7 @@ from litellm.integrations.vector_store_integrations.vector_store_pre_call_hook i VectorStorePreCallHook, ) from litellm.proxy.hooks.dynamic_rate_limiter import _PROXY_DynamicRateLimitHandler +from litellm.proxy.hooks.dynamic_rate_limiter_v3 import _PROXY_DynamicRateLimitHandlerV3 class CustomLoggerRegistry: @@ -85,9 +87,11 @@ class CustomLoggerRegistry: "s3_v2": S3Logger, "aws_sqs": SQSLogger, "dynamic_rate_limiter": _PROXY_DynamicRateLimitHandler, + "dynamic_rate_limiter_v3": _PROXY_DynamicRateLimitHandlerV3, "vector_store_pre_call_hook": VectorStorePreCallHook, "dotprompt": DotpromptManager, "cloudzero": CloudZeroLogger, + "posthog": PostHogLogger, } try: diff --git a/litellm/litellm_core_utils/duration_parser.py b/litellm/litellm_core_utils/duration_parser.py index 08e5323c30..9a317cfcf0 100644 --- a/litellm/litellm_core_utils/duration_parser.py +++ b/litellm/litellm_core_utils/duration_parser.py @@ -158,6 +158,7 @@ def _setup_timezone( "US/Eastern": timezone(timedelta(hours=-4)), # EDT "US/Pacific": timezone(timedelta(hours=-7)), # PDT "Asia/Kolkata": timezone(timedelta(hours=5, minutes=30)), # IST + "Asia/Bangkok": timezone(timedelta(hours=7)), # ICT (Indochina Time) "Europe/London": timezone(timedelta(hours=1)), # BST "UTC": timezone.utc, } diff --git a/litellm/litellm_core_utils/exception_mapping_utils.py b/litellm/litellm_core_utils/exception_mapping_utils.py index 25ae0269ab..409f5ebe0b 100644 --- a/litellm/litellm_core_utils/exception_mapping_utils.py +++ b/litellm/litellm_core_utils/exception_mapping_utils.py @@ -6,6 +6,7 @@ import httpx import litellm from litellm._logging import verbose_logger +from litellm.types.utils import LlmProviders from ..exceptions import ( APIConnectionError, @@ -556,7 +557,7 @@ def exception_type( # type: ignore # noqa: PLR0915 model=model, llm_provider="anthropic", ) - elif "overloaded_error" in error_str: + elif "overloaded_error" in error_str or "Overloaded" in error_str: exception_mapping_worked = True raise InternalServerError( message="AnthropicError - {}".format(error_str), @@ -762,7 +763,7 @@ def exception_type( # type: ignore # noqa: PLR0915 error_str += "XXXXXXX" + '"' raise AuthenticationError( - message=f"{custom_llm_provider}Exception: Authentication Error - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception: Authentication Error - {error_str}", llm_provider=custom_llm_provider, model=model, response=getattr(original_exception, "response", None), @@ -771,14 +772,14 @@ def exception_type( # type: ignore # noqa: PLR0915 elif "model's maximum context limit" in error_str: exception_mapping_worked = True raise ContextWindowExceededError( - message=f"{custom_llm_provider}Exception: Context Window Error - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception: Context Window Error - {error_str}", model=model, llm_provider=custom_llm_provider, ) elif "token_quota_reached" in error_str: exception_mapping_worked = True raise RateLimitError( - message=f"{custom_llm_provider}Exception: Rate Limit Errror - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception: Rate Limit Errror - {error_str}", llm_provider=custom_llm_provider, model=model, response=getattr(original_exception, "response", None), @@ -789,14 +790,14 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise litellm.InternalServerError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", llm_provider=custom_llm_provider, model=model, ) elif "model_no_support_for_function" in error_str: exception_mapping_worked = True raise BadRequestError( - message=f"{custom_llm_provider}Exception - Use 'watsonx_text' route instead. IBM WatsonX does not support `/text/chat` endpoint. - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception - Use 'watsonx_text' route instead. IBM WatsonX does not support `/text/chat` endpoint. - {error_str}", llm_provider=custom_llm_provider, model=model, ) @@ -804,7 +805,7 @@ def exception_type( # type: ignore # noqa: PLR0915 if original_exception.status_code == 500: exception_mapping_worked = True raise litellm.InternalServerError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", llm_provider=custom_llm_provider, model=model, ) @@ -814,28 +815,28 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise AuthenticationError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", llm_provider=custom_llm_provider, model=model, ) elif original_exception.status_code == 400: exception_mapping_worked = True raise BadRequestError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", llm_provider=custom_llm_provider, model=model, ) elif original_exception.status_code == 404: exception_mapping_worked = True raise NotFoundError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", llm_provider=custom_llm_provider, model=model, ) elif original_exception.status_code == 408: exception_mapping_worked = True raise Timeout( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", model=model, llm_provider=custom_llm_provider, litellm_debug_info=extra_information, @@ -846,7 +847,7 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise BadRequestError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", model=model, llm_provider=custom_llm_provider, litellm_debug_info=extra_information, @@ -854,7 +855,7 @@ def exception_type( # type: ignore # noqa: PLR0915 elif original_exception.status_code == 429: exception_mapping_worked = True raise RateLimitError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", model=model, llm_provider=custom_llm_provider, litellm_debug_info=extra_information, @@ -862,7 +863,7 @@ def exception_type( # type: ignore # noqa: PLR0915 elif original_exception.status_code == 503: exception_mapping_worked = True raise ServiceUnavailableError( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", model=model, llm_provider=custom_llm_provider, litellm_debug_info=extra_information, @@ -870,7 +871,7 @@ def exception_type( # type: ignore # noqa: PLR0915 elif original_exception.status_code == 504: # gateway timeout error exception_mapping_worked = True raise Timeout( - message=f"{custom_llm_provider}Exception - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {original_exception.message}", model=model, llm_provider=custom_llm_provider, litellm_debug_info=extra_information, @@ -1168,9 +1169,9 @@ def exception_type( # type: ignore # noqa: PLR0915 exception_status_code=original_exception.status_code, ) elif ( - custom_llm_provider == "vertex_ai" - or custom_llm_provider == "vertex_ai_beta" - or custom_llm_provider == "gemini" + custom_llm_provider == LlmProviders.VERTEX_AI + or custom_llm_provider == LlmProviders.VERTEX_AI_BETA + or custom_llm_provider == LlmProviders.GEMINI ): if ( "Vertex AI API has not been used in project" in error_str @@ -1178,9 +1179,9 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise BadRequestError( - message=f"litellm.BadRequestError: VertexAIException - {error_str}", + message=f"litellm.BadRequestError: {custom_llm_provider}Exception - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, response=httpx.Response( status_code=400, request=httpx.Request( @@ -1193,7 +1194,7 @@ def exception_type( # type: ignore # noqa: PLR0915 if "400 Request payload size exceeds" in error_str: exception_mapping_worked = True raise ContextWindowExceededError( - message=f"VertexException - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", model=model, llm_provider=custom_llm_provider, ) @@ -1203,9 +1204,9 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise litellm.InternalServerError( - message=f"litellm.InternalServerError: VertexAIException - {error_str}", + message=f"litellm.InternalServerError: {custom_llm_provider}Exception - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, response=httpx.Response( status_code=500, content=str(original_exception), @@ -1216,7 +1217,7 @@ def exception_type( # type: ignore # noqa: PLR0915 elif "API key not valid." in error_str: exception_mapping_worked = True raise AuthenticationError( - message=f"{custom_llm_provider}Exception - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", model=model, llm_provider=custom_llm_provider, litellm_debug_info=extra_information, @@ -1224,9 +1225,9 @@ def exception_type( # type: ignore # noqa: PLR0915 elif "403" in error_str: exception_mapping_worked = True raise BadRequestError( - message=f"VertexAIException BadRequestError - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception BadRequestError - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, response=httpx.Response( status_code=403, request=httpx.Request( @@ -1243,9 +1244,9 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise ContentPolicyViolationError( - message=f"VertexAIException ContentPolicyViolationError - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception ContentPolicyViolationError - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, litellm_debug_info=extra_information, response=httpx.Response( status_code=400, @@ -1264,9 +1265,9 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise RateLimitError( - message=f"litellm.RateLimitError: VertexAIException - {error_str}", + message=f"litellm.RateLimitError: {custom_llm_provider}Exception - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, litellm_debug_info=extra_information, response=httpx.Response( status_code=429, @@ -1282,18 +1283,18 @@ def exception_type( # type: ignore # noqa: PLR0915 ): exception_mapping_worked = True raise litellm.InternalServerError( - message=f"litellm.InternalServerError: VertexAIException - {error_str}", + message=f"litellm.InternalServerError: {custom_llm_provider}Exception - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, litellm_debug_info=extra_information, ) if hasattr(original_exception, "status_code"): if original_exception.status_code == 400: exception_mapping_worked = True raise BadRequestError( - message=f"VertexAIException BadRequestError - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception BadRequestError - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, litellm_debug_info=extra_information, response=httpx.Response( status_code=400, @@ -1306,21 +1307,35 @@ def exception_type( # type: ignore # noqa: PLR0915 if original_exception.status_code == 401: exception_mapping_worked = True raise AuthenticationError( - message=f"VertexAIException - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", llm_provider=custom_llm_provider, model=model, ) + if original_exception.status_code == 403: + exception_mapping_worked = True + raise PermissionDeniedError( + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", + llm_provider=custom_llm_provider, + model=model, + response=httpx.Response( + status_code=403, + request=httpx.Request( + method="POST", + url="https://cloud.google.com/vertex-ai/", + ), + ), + ) if original_exception.status_code == 404: exception_mapping_worked = True raise NotFoundError( - message=f"VertexAIException - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", llm_provider=custom_llm_provider, model=model, ) if original_exception.status_code == 408: exception_mapping_worked = True raise Timeout( - message=f"VertexAIException - {original_exception.message}", + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", llm_provider=custom_llm_provider, model=model, ) @@ -1328,9 +1343,9 @@ def exception_type( # type: ignore # noqa: PLR0915 if original_exception.status_code == 429: exception_mapping_worked = True raise RateLimitError( - message=f"litellm.RateLimitError: VertexAIException - {error_str}", + message=f"litellm.RateLimitError: {custom_llm_provider.capitalize()}Exception - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, litellm_debug_info=extra_information, response=httpx.Response( status_code=429, @@ -1343,9 +1358,9 @@ def exception_type( # type: ignore # noqa: PLR0915 if original_exception.status_code == 500: exception_mapping_worked = True raise litellm.InternalServerError( - message=f"VertexAIException InternalServerError - {error_str}", + message=f"{custom_llm_provider.capitalize()}Exception InternalServerError - {error_str}", model=model, - llm_provider="vertex_ai", + llm_provider=custom_llm_provider, litellm_debug_info=extra_information, response=httpx.Response( status_code=500, @@ -1353,71 +1368,20 @@ def exception_type( # type: ignore # noqa: PLR0915 request=httpx.Request(method="completion", url="https://github.com/BerriAI/litellm"), # type: ignore ), ) - if original_exception.status_code == 503: + if original_exception.status_code == 502: exception_mapping_worked = True - raise ServiceUnavailableError( - message=f"VertexAIException - {original_exception.message}", + raise APIConnectionError( + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", llm_provider=custom_llm_provider, model=model, ) - elif custom_llm_provider == "palm" or custom_llm_provider == "gemini": - if "503 Getting metadata" in error_str: - # auth errors look like this - # 503 Getting metadata from plugin failed with error: Reauthentication is needed. Please run `gcloud auth application-default login` to reauthenticate. - exception_mapping_worked = True - raise BadRequestError( - message="GeminiException - Invalid api key", - model=model, - llm_provider="palm", - response=getattr(original_exception, "response", None), - ) - if ( - "504 Deadline expired before operation could complete." in error_str - or "504 Deadline Exceeded" in error_str - ): - exception_mapping_worked = True - raise Timeout( - message=f"GeminiException - {original_exception.message}", - model=model, - llm_provider="palm", - exception_status_code=original_exception.status_code, - ) - if "400 Request payload size exceeds" in error_str: - exception_mapping_worked = True - raise ContextWindowExceededError( - message=f"GeminiException - {error_str}", - model=model, - llm_provider="palm", - response=getattr(original_exception, "response", None), - ) - if ( - "500 An internal error has occurred." in error_str - or "list index out of range" in error_str - ): - exception_mapping_worked = True - raise APIError( - status_code=getattr(original_exception, "status_code", 500), - message=f"GeminiException - {original_exception.message}", - llm_provider="palm", - model=model, - request=httpx.Response( - status_code=429, - request=httpx.Request( - method="POST", - url=" https://cloud.google.com/vertex-ai/", - ), - ), - ) - if hasattr(original_exception, "status_code"): - if original_exception.status_code == 400: + if original_exception.status_code == 503: exception_mapping_worked = True - raise BadRequestError( - message=f"GeminiException - {error_str}", + raise ServiceUnavailableError( + message=f"{custom_llm_provider.capitalize()}Exception - {error_str}", + llm_provider=custom_llm_provider, model=model, - llm_provider="palm", - response=getattr(original_exception, "response", None), ) - # Dailed: Error occurred: 400 Request payload size exceeds the limit: 20000 bytes elif custom_llm_provider == "cloudflare": if "Authentication error" in error_str: exception_mapping_worked = True @@ -1449,6 +1413,14 @@ def exception_type( # type: ignore # noqa: PLR0915 model=model, response=getattr(original_exception, "response", None), ) + elif "invalid type: parameter" in error_str: + exception_mapping_worked = True + raise BadRequestError( + message=f"CohereException - {original_exception.message}", + llm_provider="cohere", + model=model, + response=getattr(original_exception, "response", None), + ) elif "too many tokens" in error_str: exception_mapping_worked = True raise ContextWindowExceededError( diff --git a/litellm/litellm_core_utils/get_supported_openai_params.py b/litellm/litellm_core_utils/get_supported_openai_params.py index d60e79069c..06e650f938 100644 --- a/litellm/litellm_core_utils/get_supported_openai_params.py +++ b/litellm/litellm_core_utils/get_supported_openai_params.py @@ -94,9 +94,7 @@ def get_supported_openai_params( # noqa: PLR0915 return litellm.VLLMConfig().get_supported_openai_params(model=model) elif custom_llm_provider == "deepseek": return litellm.DeepSeekChatConfig().get_supported_openai_params(model=model) - elif custom_llm_provider == "cohere": - return litellm.CohereConfig().get_supported_openai_params(model=model) - elif custom_llm_provider == "cohere_chat": + elif custom_llm_provider == "cohere_chat" or custom_llm_provider == "cohere": return litellm.CohereChatConfig().get_supported_openai_params(model=model) elif custom_llm_provider == "maritalk": return litellm.MaritalkConfig().get_supported_openai_params(model=model) diff --git a/litellm/litellm_core_utils/litellm_logging.py b/litellm/litellm_core_utils/litellm_logging.py index 2f21d28089..059fd9f1fc 100644 --- a/litellm/litellm_core_utils/litellm_logging.py +++ b/litellm/litellm_core_utils/litellm_logging.py @@ -138,6 +138,7 @@ from ..integrations.logfire_logger import LogfireLevel, LogfireLogger from ..integrations.lunary import LunaryLogger from ..integrations.openmeter import OpenMeterLogger from ..integrations.opik.opik import OpikLogger +from ..integrations.posthog import PostHogLogger from ..integrations.prompt_layer import PromptLayerLogger from ..integrations.s3 import S3Logger from ..integrations.s3_v2 import S3Logger as S3V2Logger @@ -193,7 +194,6 @@ _in_memory_loggers: List[Any] = [] sentry_sdk_instance = None capture_exception = None add_breadcrumb = None -posthog = None slack_app = None alerts_channel = None heliconeLogger = None @@ -300,9 +300,9 @@ class Logging(LiteLLMLoggingBaseClass): self.litellm_trace_id: str = litellm_trace_id or str(uuid.uuid4()) self.function_id = function_id self.streaming_chunks: List[Any] = [] # for generating complete stream response - self.sync_streaming_chunks: List[Any] = ( - [] - ) # for generating complete stream response + self.sync_streaming_chunks: List[ + Any + ] = [] # for generating complete stream response self.log_raw_request_response = log_raw_request_response # Initialize dynamic callbacks @@ -672,24 +672,23 @@ class Logging(LiteLLMLoggingBaseClass): if anthropic_cache_control_logger := AnthropicCacheControlHook.get_custom_logger_for_anthropic_cache_control_hook( non_default_params ): - self.model_call_details["prompt_integration"] = ( - anthropic_cache_control_logger.__class__.__name__ - ) + self.model_call_details[ + "prompt_integration" + ] = anthropic_cache_control_logger.__class__.__name__ return anthropic_cache_control_logger ######################################################### # Vector Store / Knowledge Base hooks ######################################################### if litellm.vector_store_registry is not None: - vector_store_custom_logger = _init_custom_logger_compatible_class( logging_integration="vector_store_pre_call_hook", internal_usage_cache=None, llm_router=None, ) - self.model_call_details["prompt_integration"] = ( - vector_store_custom_logger.__class__.__name__ - ) + self.model_call_details[ + "prompt_integration" + ] = vector_store_custom_logger.__class__.__name__ return vector_store_custom_logger return None @@ -741,9 +740,9 @@ class Logging(LiteLLMLoggingBaseClass): model ): # if model name was changes pre-call, overwrite the initial model call name with the new one self.model_call_details["model"] = model - self.model_call_details["litellm_params"]["api_base"] = ( - self._get_masked_api_base(additional_args.get("api_base", "")) - ) + self.model_call_details["litellm_params"][ + "api_base" + ] = self._get_masked_api_base(additional_args.get("api_base", "")) def pre_call(self, input, api_key, model=None, additional_args={}): # noqa: PLR0915 # Log the exact input to the LLM API @@ -772,10 +771,10 @@ class Logging(LiteLLMLoggingBaseClass): try: # [Non-blocking Extra Debug Information in metadata] if turn_off_message_logging is True: - _metadata["raw_request"] = ( - "redacted by litellm. \ + _metadata[ + "raw_request" + ] = "redacted by litellm. \ 'litellm.turn_off_message_logging=True'" - ) else: curl_command = self._get_request_curl_command( api_base=additional_args.get("api_base", ""), @@ -786,32 +785,32 @@ class Logging(LiteLLMLoggingBaseClass): _metadata["raw_request"] = str(curl_command) # split up, so it's easier to parse in the UI - self.model_call_details["raw_request_typed_dict"] = ( - RawRequestTypedDict( - raw_request_api_base=str( - additional_args.get("api_base") or "" - ), - raw_request_body=self._get_raw_request_body( - additional_args.get("complete_input_dict", {}) - ), - raw_request_headers=self._get_masked_headers( - additional_args.get("headers", {}) or {}, - ignore_sensitive_headers=True, - ), - error=None, - ) + self.model_call_details[ + "raw_request_typed_dict" + ] = RawRequestTypedDict( + raw_request_api_base=str( + additional_args.get("api_base") or "" + ), + raw_request_body=self._get_raw_request_body( + additional_args.get("complete_input_dict", {}) + ), + raw_request_headers=self._get_masked_headers( + additional_args.get("headers", {}) or {}, + ignore_sensitive_headers=True, + ), + error=None, ) except Exception as e: - self.model_call_details["raw_request_typed_dict"] = ( - RawRequestTypedDict( - error=str(e), - ) + self.model_call_details[ + "raw_request_typed_dict" + ] = RawRequestTypedDict( + error=str(e), ) - _metadata["raw_request"] = ( - "Unable to Log \ + _metadata[ + "raw_request" + ] = "Unable to Log \ raw request: {}".format( - str(e) - ) + str(e) ) if getattr(self, "logger_fn", None) and callable(self.logger_fn): try: @@ -1112,13 +1111,13 @@ class Logging(LiteLLMLoggingBaseClass): for callback in callbacks: try: if isinstance(callback, CustomLogger): - response: Optional[MCPPostCallResponseObject] = ( - await callback.async_post_mcp_tool_call_hook( - kwargs=kwargs, - response_obj=post_mcp_tool_call_response_obj, - start_time=start_time, - end_time=end_time, - ) + response: Optional[ + MCPPostCallResponseObject + ] = await callback.async_post_mcp_tool_call_hook( + kwargs=kwargs, + response_obj=post_mcp_tool_call_response_obj, + start_time=start_time, + end_time=end_time, ) ###################################################################### # if any of the callbacks modify the response, use the modified response @@ -1238,9 +1237,9 @@ class Logging(LiteLLMLoggingBaseClass): verbose_logger.debug( f"response_cost_failure_debug_information: {debug_info}" ) - self.model_call_details["response_cost_failure_debug_information"] = ( - debug_info - ) + self.model_call_details[ + "response_cost_failure_debug_information" + ] = debug_info return None try: @@ -1265,9 +1264,9 @@ class Logging(LiteLLMLoggingBaseClass): verbose_logger.debug( f"response_cost_failure_debug_information: {debug_info}" ) - self.model_call_details["response_cost_failure_debug_information"] = ( - debug_info - ) + self.model_call_details[ + "response_cost_failure_debug_information" + ] = debug_info return None @@ -1411,9 +1410,9 @@ class Logging(LiteLLMLoggingBaseClass): end_time = datetime.datetime.now() if self.completion_start_time is None: self.completion_start_time = end_time - self.model_call_details["completion_start_time"] = ( - self.completion_start_time - ) + self.model_call_details[ + "completion_start_time" + ] = self.completion_start_time self.model_call_details["log_event_type"] = "successful_api_call" self.model_call_details["end_time"] = end_time self.model_call_details["cache_hit"] = cache_hit @@ -1466,39 +1465,39 @@ class Logging(LiteLLMLoggingBaseClass): "response_cost" ] else: - self.model_call_details["response_cost"] = ( - self._response_cost_calculator(result=logging_result) - ) + self.model_call_details[ + "response_cost" + ] = self._response_cost_calculator(result=logging_result) ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details["standard_logging_object"] = ( - get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=logging_result, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=logging_result, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, ) elif isinstance(result, dict) or isinstance(result, list): ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details["standard_logging_object"] = ( - get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=result, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=result, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, ) elif standard_logging_object is not None: - self.model_call_details["standard_logging_object"] = ( - standard_logging_object - ) + self.model_call_details[ + "standard_logging_object" + ] = standard_logging_object else: # streaming chunks + image gen. self.model_call_details["response_cost"] = None @@ -1597,7 +1596,6 @@ class Logging(LiteLLMLoggingBaseClass): ) if complete_streaming_response is not None: - self.success_handler(result=complete_streaming_response) return @@ -1650,23 +1648,23 @@ class Logging(LiteLLMLoggingBaseClass): verbose_logger.debug( "Logging Details LiteLLM-Success Call streaming complete" ) - self.model_call_details["complete_streaming_response"] = ( - complete_streaming_response - ) - self.model_call_details["response_cost"] = ( - self._response_cost_calculator(result=complete_streaming_response) - ) + self.model_call_details[ + "complete_streaming_response" + ] = complete_streaming_response + self.model_call_details[ + "response_cost" + ] = self._response_cost_calculator(result=complete_streaming_response) ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details["standard_logging_object"] = ( - get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=complete_streaming_response, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=complete_streaming_response, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, ) callbacks = self.get_combined_callback_list( dynamic_success_callbacks=self.dynamic_success_callbacks, @@ -1994,10 +1992,10 @@ class Logging(LiteLLMLoggingBaseClass): ) else: if self.stream and complete_streaming_response: - self.model_call_details["complete_response"] = ( - self.model_call_details.get( - "complete_streaming_response", {} - ) + self.model_call_details[ + "complete_response" + ] = self.model_call_details.get( + "complete_streaming_response", {} ) result = self.model_call_details["complete_response"] openMeterLogger.log_success_event( @@ -2036,10 +2034,10 @@ class Logging(LiteLLMLoggingBaseClass): ) else: if self.stream and complete_streaming_response: - self.model_call_details["complete_response"] = ( - self.model_call_details.get( - "complete_streaming_response", {} - ) + self.model_call_details[ + "complete_response" + ] = self.model_call_details.get( + "complete_streaming_response", {} ) result = self.model_call_details["complete_response"] @@ -2141,10 +2139,12 @@ class Logging(LiteLLMLoggingBaseClass): result.usage = batch_usage elif not is_base64_unified_file_id: # only run for non-unified file ids - response_cost, batch_usage, batch_models = ( - await _handle_completed_batch( - batch=result, custom_llm_provider=self.custom_llm_provider - ) + ( + response_cost, + batch_usage, + batch_models, + ) = await _handle_completed_batch( + batch=result, custom_llm_provider=self.custom_llm_provider ) result._hidden_params["response_cost"] = response_cost @@ -2175,9 +2175,9 @@ class Logging(LiteLLMLoggingBaseClass): if complete_streaming_response is not None: print_verbose("Async success callbacks: Got a complete streaming response") - self.model_call_details["async_complete_streaming_response"] = ( - complete_streaming_response - ) + self.model_call_details[ + "async_complete_streaming_response" + ] = complete_streaming_response try: if self.model_call_details.get("cache_hit", False) is True: @@ -2188,10 +2188,10 @@ class Logging(LiteLLMLoggingBaseClass): model_call_details=self.model_call_details ) # base_model defaults to None if not set on model_info - self.model_call_details["response_cost"] = ( - self._response_cost_calculator( - result=complete_streaming_response - ) + self.model_call_details[ + "response_cost" + ] = self._response_cost_calculator( + result=complete_streaming_response ) verbose_logger.debug( @@ -2204,16 +2204,16 @@ class Logging(LiteLLMLoggingBaseClass): self.model_call_details["response_cost"] = None ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details["standard_logging_object"] = ( - get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj=complete_streaming_response, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="success", - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj=complete_streaming_response, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="success", + standard_built_in_tools_params=self.standard_built_in_tools_params, ) callbacks = self.get_combined_callback_list( dynamic_success_callbacks=self.dynamic_async_success_callbacks, @@ -2426,18 +2426,18 @@ class Logging(LiteLLMLoggingBaseClass): ## STANDARDIZED LOGGING PAYLOAD - self.model_call_details["standard_logging_object"] = ( - get_standard_logging_object_payload( - kwargs=self.model_call_details, - init_response_obj={}, - start_time=start_time, - end_time=end_time, - logging_obj=self, - status="failure", - error_str=str(exception), - original_exception=exception, - standard_built_in_tools_params=self.standard_built_in_tools_params, - ) + self.model_call_details[ + "standard_logging_object" + ] = get_standard_logging_object_payload( + kwargs=self.model_call_details, + init_response_obj={}, + start_time=start_time, + end_time=end_time, + logging_obj=self, + status="failure", + error_str=str(exception), + original_exception=exception, + standard_built_in_tools_params=self.standard_built_in_tools_params, ) return start_time, end_time @@ -3068,7 +3068,7 @@ def set_callbacks(callback_list, function_id=None): # noqa: PLR0915 """ Globally sets the callback client """ - global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, supabaseClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger, deepevalLogger + global sentry_sdk_instance, capture_exception, add_breadcrumb, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, supabaseClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger, deepevalLogger try: for callback in callback_list: @@ -3107,19 +3107,6 @@ def set_callbacks(callback_list, function_id=None): # noqa: PLR0915 ) capture_exception = sentry_sdk_instance.capture_exception add_breadcrumb = sentry_sdk_instance.add_breadcrumb - elif callback == "posthog": - try: - from posthog import Posthog - except ImportError: - print_verbose("Package 'posthog' is missing. Installing it...") - subprocess.check_call( - [sys.executable, "-m", "pip", "install", "posthog"] - ) - from posthog import Posthog - posthog = Posthog( - project_api_key=os.environ.get("POSTHOG_API_KEY"), - host=os.environ.get("POSTHOG_API_URL"), - ) elif callback == "slack": try: from slack_bolt import App @@ -3214,6 +3201,14 @@ def _init_custom_logger_compatible_class( # noqa: PLR0915 _openmeter_logger = OpenMeterLogger() _in_memory_loggers.append(_openmeter_logger) return _openmeter_logger # type: ignore + elif logging_integration == "posthog": + for callback in _in_memory_loggers: + if isinstance(callback, PostHogLogger): + return callback # type: ignore + + _posthog_logger = PostHogLogger() + _in_memory_loggers.append(_posthog_logger) + return _posthog_logger # type: ignore elif logging_integration == "braintrust": from litellm.integrations.braintrust_logging import BraintrustLogger @@ -3326,9 +3321,9 @@ def _init_custom_logger_compatible_class( # noqa: PLR0915 endpoint=arize_config.endpoint, ) - os.environ["OTEL_EXPORTER_OTLP_TRACES_HEADERS"] = ( - f"space_id={arize_config.space_key},api_key={arize_config.api_key}" - ) + os.environ[ + "OTEL_EXPORTER_OTLP_TRACES_HEADERS" + ] = f"space_id={arize_config.space_key},api_key={arize_config.api_key}" for callback in _in_memory_loggers: if ( isinstance(callback, ArizeLogger) @@ -3352,9 +3347,9 @@ def _init_custom_logger_compatible_class( # noqa: PLR0915 # auth can be disabled on local deployments of arize phoenix if arize_phoenix_config.otlp_auth_headers is not None: - os.environ["OTEL_EXPORTER_OTLP_TRACES_HEADERS"] = ( - arize_phoenix_config.otlp_auth_headers - ) + os.environ[ + "OTEL_EXPORTER_OTLP_TRACES_HEADERS" + ] = arize_phoenix_config.otlp_auth_headers for callback in _in_memory_loggers: if ( @@ -3449,6 +3444,30 @@ def _init_custom_logger_compatible_class( # noqa: PLR0915 dynamic_rate_limiter_obj.update_variables(llm_router=llm_router) _in_memory_loggers.append(dynamic_rate_limiter_obj) return dynamic_rate_limiter_obj # type: ignore + elif logging_integration == "dynamic_rate_limiter_v3": + from litellm.proxy.hooks.dynamic_rate_limiter_v3 import ( + _PROXY_DynamicRateLimitHandlerV3, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, _PROXY_DynamicRateLimitHandlerV3): + return callback # type: ignore + + if internal_usage_cache is None: + raise Exception( + "Internal Error: Cache cannot be empty - internal_usage_cache={}".format( + internal_usage_cache + ) + ) + + dynamic_rate_limiter_obj_v3 = _PROXY_DynamicRateLimitHandlerV3( + internal_usage_cache=internal_usage_cache + ) + + if llm_router is not None and isinstance(llm_router, litellm.Router): + dynamic_rate_limiter_obj_v3.update_variables(llm_router=llm_router) + _in_memory_loggers.append(dynamic_rate_limiter_obj_v3) + return dynamic_rate_limiter_obj_v3 # type: ignore elif logging_integration == "langtrace": if "LANGTRACE_API_KEY" not in os.environ: raise ValueError("LANGTRACE_API_KEY not found in environment variables") @@ -3462,9 +3481,9 @@ def _init_custom_logger_compatible_class( # noqa: PLR0915 exporter="otlp_http", endpoint="https://langtrace.ai/api/trace", ) - os.environ["OTEL_EXPORTER_OTLP_TRACES_HEADERS"] = ( - f"api_key={os.getenv('LANGTRACE_API_KEY')}" - ) + os.environ[ + "OTEL_EXPORTER_OTLP_TRACES_HEADERS" + ] = f"api_key={os.getenv('LANGTRACE_API_KEY')}" for callback in _in_memory_loggers: if ( isinstance(callback, OpenTelemetry) @@ -3712,6 +3731,14 @@ def get_custom_logger_compatible_class( # noqa: PLR0915 for callback in _in_memory_loggers: if isinstance(callback, _PROXY_DynamicRateLimitHandler): return callback # type: ignore + elif logging_integration == "dynamic_rate_limiter_v3": + from litellm.proxy.hooks.dynamic_rate_limiter_v3 import ( + _PROXY_DynamicRateLimitHandlerV3, + ) + + for callback in _in_memory_loggers: + if isinstance(callback, _PROXY_DynamicRateLimitHandlerV3): + return callback # type: ignore elif logging_integration == "langtrace": from litellm.integrations.opentelemetry import OpenTelemetry @@ -3910,22 +3937,25 @@ class StandardLoggingPayloadSetup: clean_metadata = StandardLoggingMetadata( user_api_key_hash=None, user_api_key_alias=None, + user_api_key_spend=None, + user_api_key_max_budget=None, + user_api_key_budget_reset_at=None, user_api_key_team_id=None, user_api_key_org_id=None, user_api_key_user_id=None, user_api_key_team_alias=None, user_api_key_user_email=None, + user_api_key_end_user_id=None, + user_api_key_request_route=None, spend_logs_metadata=None, requester_ip_address=None, requester_metadata=None, - user_api_key_end_user_id=None, prompt_management_metadata=prompt_management_metadata, applied_guardrails=applied_guardrails, mcp_tool_call_metadata=mcp_tool_call_metadata, vector_store_request_metadata=vector_store_request_metadata, usage_object=usage_object, requester_custom_headers=None, - user_api_key_request_route=None, cold_storage_object_key=None, ) if isinstance(metadata, dict): @@ -4114,10 +4144,10 @@ class StandardLoggingPayloadSetup: for key in StandardLoggingHiddenParams.__annotations__.keys(): if key in hidden_params: if key == "additional_headers": - clean_hidden_params["additional_headers"] = ( - StandardLoggingPayloadSetup.get_additional_headers( - hidden_params[key] - ) + clean_hidden_params[ + "additional_headers" + ] = StandardLoggingPayloadSetup.get_additional_headers( + hidden_params[key] ) else: clean_hidden_params[key] = hidden_params[key] # type: ignore @@ -4150,15 +4180,28 @@ class StandardLoggingPayloadSetup: from litellm.integrations.s3 import get_s3_object_key # Only generate object key if cold storage is configured - if litellm.configured_cold_storage_logger is None: + configured_cold_storage_logger = litellm.configured_cold_storage_logger + if configured_cold_storage_logger is None: return None try: # Generate file name in same format as litellm.utils.get_logging_id s3_file_name = f"time-{start_time.strftime('%H-%M-%S-%f')}_{response_id}" + # Get the actual s3_path from the configured cold storage logger instance + s3_path = "" # default value + + # Try to get the actual logger instance from the logger name + try: + custom_logger = litellm.logging_callback_manager.get_active_custom_logger_for_callback_name(configured_cold_storage_logger) + if custom_logger and hasattr(custom_logger, 's3_path') and custom_logger.s3_path: + s3_path = custom_logger.s3_path + except Exception: + # If any error occurs in getting the logger instance, use default empty s3_path + pass + s3_object_key = get_s3_object_key( - s3_path="", # Use empty path as default + s3_path=s3_path, # Use actual s3_path from logger configuration team_alias_prefix="", # Don't split by team alias for cold storage start_time=start_time, s3_file_name=s3_file_name, @@ -4553,6 +4596,9 @@ def get_standard_logging_metadata( clean_metadata = StandardLoggingMetadata( user_api_key_hash=None, user_api_key_alias=None, + user_api_key_spend=None, + user_api_key_max_budget=None, + user_api_key_budget_reset_at=None, user_api_key_team_id=None, user_api_key_org_id=None, user_api_key_user_id=None, @@ -4572,14 +4618,10 @@ def get_standard_logging_metadata( cold_storage_object_key=None, ) if isinstance(metadata, dict): - # Filter the metadata dictionary to include only the specified keys - clean_metadata = StandardLoggingMetadata( - **{ # type: ignore - key: metadata[key] - for key in StandardLoggingMetadata.__annotations__.keys() - if key in metadata - } - ) + # Update the clean_metadata with values from input metadata that match StandardLoggingMetadata fields + for key in StandardLoggingMetadata.__annotations__.keys(): + if key in metadata: + clean_metadata[key] = metadata[key] # type: ignore if metadata.get("user_api_key") is not None: if is_valid_sha256_hash(str(metadata.get("user_api_key"))): @@ -4602,9 +4644,9 @@ def scrub_sensitive_keys_in_metadata(litellm_params: Optional[dict]): ): for k, v in metadata["user_api_key_metadata"].items(): if k == "logging": # prevent logging user logging keys - cleaned_user_api_key_metadata[k] = ( - "scrubbed_by_litellm_for_sensitive_keys" - ) + cleaned_user_api_key_metadata[ + k + ] = "scrubbed_by_litellm_for_sensitive_keys" else: cleaned_user_api_key_metadata[k] = v diff --git a/litellm/litellm_core_utils/llm_cost_calc/utils.py b/litellm/litellm_core_utils/llm_cost_calc/utils.py index c851ec06a6..60a3119841 100644 --- a/litellm/litellm_core_utils/llm_cost_calc/utils.py +++ b/litellm/litellm_core_utils/llm_cost_calc/utils.py @@ -1,11 +1,12 @@ # What is this? ## Helper utilities for cost_per_token() -from typing import Any, Literal, Optional, Tuple, cast +from typing import Any, Literal, Optional, Tuple, TypedDict, cast import litellm from litellm._logging import verbose_logger from litellm.types.utils import ( + CacheCreationTokenDetails, CallTypes, ImageResponse, ModelInfo, @@ -113,20 +114,34 @@ def _generic_cost_per_character( return prompt_cost, completion_cost -def _get_token_base_cost(model_info: ModelInfo, usage: Usage) -> Tuple[float, float, float, float]: +def _get_token_base_cost( + model_info: ModelInfo, usage: Usage +) -> Tuple[float, float, float, float, float]: """ Return prompt cost, completion cost, and cache costs for a given model and usage. If input_tokens > threshold and `input_cost_per_token_above_[x]k_tokens` or `input_cost_per_token_above_[x]_tokens` is set, then we use the corresponding threshold cost for all token types. - + Returns: Tuple[float, float, float, float] - (prompt_cost, completion_cost, cache_creation_cost, cache_read_cost) """ - prompt_base_cost = cast(float, _get_cost_per_unit(model_info, "input_cost_per_token")) - completion_base_cost = cast(float, _get_cost_per_unit(model_info, "output_cost_per_token")) - cache_creation_cost = cast(float, _get_cost_per_unit(model_info, "cache_creation_input_token_cost")) - cache_read_cost = cast(float, _get_cost_per_unit(model_info, "cache_read_input_token_cost")) + prompt_base_cost = cast( + float, _get_cost_per_unit(model_info, "input_cost_per_token") + ) + completion_base_cost = cast( + float, _get_cost_per_unit(model_info, "output_cost_per_token") + ) + cache_creation_cost = cast( + float, _get_cost_per_unit(model_info, "cache_creation_input_token_cost") + ) + cache_creation_cost_above_1hr = cast( + float, + _get_cost_per_unit(model_info, "cache_creation_input_token_cost_above_1hr"), + ) + cache_read_cost = cast( + float, _get_cost_per_unit(model_info, "cache_read_input_token_cost") + ) ## CHECK IF ABOVE THRESHOLD threshold: Optional[float] = None @@ -140,34 +155,57 @@ def _get_token_base_cost(model_info: ModelInfo, usage: Usage) -> Tuple[float, fl ) if usage.prompt_tokens > threshold: - prompt_base_cost = cast(float, _get_cost_per_unit(model_info, key, prompt_base_cost)) - completion_base_cost = cast(float, _get_cost_per_unit( - model_info, - f"output_cost_per_token_above_{threshold_str}_tokens", - completion_base_cost, - )) - + prompt_base_cost = cast( + float, _get_cost_per_unit(model_info, key, prompt_base_cost) + ) + completion_base_cost = cast( + float, + _get_cost_per_unit( + model_info, + f"output_cost_per_token_above_{threshold_str}_tokens", + completion_base_cost, + ), + ) + # Apply tiered pricing to cache costs - cache_creation_tiered_key = f"cache_creation_input_token_cost_above_{threshold_str}_tokens" - cache_read_tiered_key = f"cache_read_input_token_cost_above_{threshold_str}_tokens" - + cache_creation_tiered_key = ( + f"cache_creation_input_token_cost_above_{threshold_str}_tokens" + ) + cache_read_tiered_key = ( + f"cache_read_input_token_cost_above_{threshold_str}_tokens" + ) + if cache_creation_tiered_key in model_info: - cache_creation_cost = cast(float, _get_cost_per_unit( - model_info, cache_creation_tiered_key, cache_creation_cost - )) - + cache_creation_cost = cast( + float, + _get_cost_per_unit( + model_info, + cache_creation_tiered_key, + cache_creation_cost, + ), + ) + if cache_read_tiered_key in model_info: - cache_read_cost = cast(float, _get_cost_per_unit( - model_info, cache_read_tiered_key, cache_read_cost - )) - + cache_read_cost = cast( + float, + _get_cost_per_unit( + model_info, cache_read_tiered_key, cache_read_cost + ), + ) + break except (IndexError, ValueError): continue except Exception: continue - return prompt_base_cost, completion_base_cost, cache_creation_cost, cache_read_cost + return ( + prompt_base_cost, + completion_base_cost, + cache_creation_cost, + cache_creation_cost_above_1hr, + cache_read_cost, + ) def calculate_cost_component( @@ -195,7 +233,9 @@ def calculate_cost_component( return 0.0 -def _get_cost_per_unit(model_info: ModelInfo, cost_key: str, default_value: Optional[float] = 0.0) -> Optional[float]: +def _get_cost_per_unit( + model_info: ModelInfo, cost_key: str, default_value: Optional[float] = 0.0 +) -> Optional[float]: # Sometimes the cost per unit is a string (e.g.: If a value like "3e-7" was read from the config.yaml) cost_per_unit = model_info.get(cost_key) if isinstance(cost_per_unit, float): @@ -210,7 +250,196 @@ def _get_cost_per_unit(model_info: ModelInfo, cost_key: str, default_value: Opti f"litellm.litellm_core_utils.llm_cost_calc.utils.py::calculate_cost_per_component(): Exception occured - {cost_per_unit}\nDefaulting to 0.0" ) return default_value - + + +def calculate_cache_writing_cost( + cache_creation_tokens: int, + cache_creation_token_details: Optional[CacheCreationTokenDetails], + cache_creation_cost_above_1hr: float, + cache_creation_cost: float, +) -> float: + """ + Adjust cost of cache creation tokens based on the cache creation token details. + """ + total_cost: float = 0.0 + if cache_creation_token_details is not None: + # get the number of 5m and 1h cache creation tokens + cache_creation_tokens_5m = ( + cache_creation_token_details.ephemeral_5m_input_tokens + ) + cache_creation_tokens_1h = ( + cache_creation_token_details.ephemeral_1h_input_tokens + ) + # add the number of 5m and 1h cache creation tokens to the cache creation tokens + total_cost += ( + cache_creation_tokens_5m * cache_creation_cost + if cache_creation_tokens_5m is not None + else 0.0 + ) + total_cost += ( + cache_creation_tokens_1h * cache_creation_cost_above_1hr + if cache_creation_tokens_1h is not None + else 0.0 + ) + else: + total_cost += cache_creation_tokens * cache_creation_cost + return total_cost + + +class PromptTokensDetailsResult(TypedDict): + cache_hit_tokens: int + cache_creation_tokens: int + cache_creation_token_details: Optional[CacheCreationTokenDetails] + text_tokens: int + audio_tokens: int + character_count: int + image_count: int + video_length_seconds: int + + +def _parse_prompt_tokens_details(usage: Usage) -> PromptTokensDetailsResult: + cache_hit_tokens = ( + cast(Optional[int], getattr(usage.prompt_tokens_details, "cached_tokens", 0)) + or 0 + ) + cache_creation_tokens = ( + cast( + Optional[int], + getattr(usage.prompt_tokens_details, "cache_creation_tokens", 0), + ) + or 0 + ) + cache_creation_token_details = ( + cast( + Optional[CacheCreationTokenDetails], + getattr(usage.prompt_tokens_details, "cache_creation_token_details", None), + ) + or None + ) + text_tokens = ( + cast(Optional[int], getattr(usage.prompt_tokens_details, "text_tokens", None)) + or 0 # default to prompt tokens, if this field is not set + ) + audio_tokens = ( + cast(Optional[int], getattr(usage.prompt_tokens_details, "audio_tokens", 0)) + or 0 + ) + character_count = ( + cast( + Optional[int], + getattr(usage.prompt_tokens_details, "character_count", 0), + ) + or 0 + ) + image_count = ( + cast(Optional[int], getattr(usage.prompt_tokens_details, "image_count", 0)) or 0 + ) + video_length_seconds = ( + cast( + Optional[int], + getattr(usage.prompt_tokens_details, "video_length_seconds", 0), + ) + or 0 + ) + + return PromptTokensDetailsResult( + cache_hit_tokens=cache_hit_tokens, + cache_creation_tokens=cache_creation_tokens, + cache_creation_token_details=cache_creation_token_details, + text_tokens=text_tokens, + audio_tokens=audio_tokens, + character_count=character_count, + image_count=image_count, + video_length_seconds=video_length_seconds, + ) + + +class CompletionTokensDetailsResult(TypedDict): + audio_tokens: int + text_tokens: int + reasoning_tokens: int + + +def _parse_completion_tokens_details(usage: Usage) -> CompletionTokensDetailsResult: + audio_tokens = ( + cast( + Optional[int], + getattr(usage.completion_tokens_details, "audio_tokens", 0), + ) + or 0 + ) + text_tokens = ( + cast( + Optional[int], + getattr(usage.completion_tokens_details, "text_tokens", None), + ) + or 0 # default to completion tokens, if this field is not set + ) + reasoning_tokens = ( + cast( + Optional[int], + getattr(usage.completion_tokens_details, "reasoning_tokens", 0), + ) + or 0 + ) + + return CompletionTokensDetailsResult( + audio_tokens=audio_tokens, + text_tokens=text_tokens, + reasoning_tokens=reasoning_tokens, + ) + + +def _calculate_input_cost( + prompt_tokens_details: PromptTokensDetailsResult, + model_info: ModelInfo, + prompt_base_cost: float, + cache_read_cost: float, + cache_creation_cost: float, + cache_creation_cost_above_1hr: float, +) -> float: + """ + Calculates the input cost for a given model, prompt tokens, and completion tokens. + """ + prompt_cost = float(prompt_tokens_details["text_tokens"]) * prompt_base_cost + + ### CACHE READ COST - Now uses tiered pricing + prompt_cost += float(prompt_tokens_details["cache_hit_tokens"]) * cache_read_cost + + ### AUDIO COST + prompt_cost += calculate_cost_component( + model_info, "input_cost_per_audio_token", prompt_tokens_details["audio_tokens"] + ) + + ### CACHE WRITING COST - Now uses tiered pricing + prompt_cost += calculate_cache_writing_cost( + cache_creation_tokens=prompt_tokens_details["cache_creation_tokens"], + cache_creation_token_details=prompt_tokens_details[ + "cache_creation_token_details" + ], + cache_creation_cost_above_1hr=cache_creation_cost_above_1hr, + cache_creation_cost=cache_creation_cost, + ) + + ### CHARACTER COST + + prompt_cost += calculate_cost_component( + model_info, "input_cost_per_character", prompt_tokens_details["character_count"] + ) + + ### IMAGE COUNT COST + prompt_cost += calculate_cost_component( + model_info, "input_cost_per_image", prompt_tokens_details["image_count"] + ) + + ### VIDEO LENGTH COST + prompt_cost += calculate_cost_component( + model_info, + "input_cost_per_video_per_second", + prompt_tokens_details["video_length_seconds"], + ) + + return prompt_cost def generic_cost_per_token( @@ -236,83 +465,45 @@ def generic_cost_per_token( ### Cost of processing (non-cache hit + cache hit) + Cost of cache-writing (cache writing) prompt_cost = 0.0 ### PROCESSING COST - text_tokens = usage.prompt_tokens - cache_hit_tokens = 0 - audio_tokens = 0 - character_count = 0 - image_count = 0 - video_length_seconds = 0 + prompt_tokens_details = PromptTokensDetailsResult( + cache_hit_tokens=0, + cache_creation_tokens=0, + cache_creation_token_details=None, + text_tokens=usage.prompt_tokens, + audio_tokens=0, + character_count=0, + image_count=0, + video_length_seconds=0, + ) if usage.prompt_tokens_details: - cache_hit_tokens = ( - cast( - Optional[int], getattr(usage.prompt_tokens_details, "cached_tokens", 0) - ) - or 0 - ) - text_tokens = ( - cast( - Optional[int], getattr(usage.prompt_tokens_details, "text_tokens", None) - ) - or 0 # default to prompt tokens, if this field is not set - ) - audio_tokens = ( - cast(Optional[int], getattr(usage.prompt_tokens_details, "audio_tokens", 0)) - or 0 - ) - character_count = ( - cast( - Optional[int], - getattr(usage.prompt_tokens_details, "character_count", 0), - ) - or 0 - ) - image_count = ( - cast(Optional[int], getattr(usage.prompt_tokens_details, "image_count", 0)) - or 0 - ) - video_length_seconds = ( - cast( - Optional[int], - getattr(usage.prompt_tokens_details, "video_length_seconds", 0), - ) - or 0 - ) + prompt_tokens_details = _parse_prompt_tokens_details(usage) ## EDGE CASE - text tokens not set inside PromptTokensDetails - if text_tokens == 0: - text_tokens = usage.prompt_tokens - cache_hit_tokens - audio_tokens - prompt_base_cost, completion_base_cost, cache_creation_cost, cache_read_cost = _get_token_base_cost( - model_info=model_info, usage=usage - ) + if prompt_tokens_details["text_tokens"] == 0: + text_tokens = ( + usage.prompt_tokens + - prompt_tokens_details["cache_hit_tokens"] + - prompt_tokens_details["audio_tokens"] + - prompt_tokens_details["cache_creation_tokens"] + ) + prompt_tokens_details["text_tokens"] = text_tokens - prompt_cost = float(text_tokens) * prompt_base_cost + ( + prompt_base_cost, + completion_base_cost, + cache_creation_cost, + cache_creation_cost_above_1hr, + cache_read_cost, + ) = _get_token_base_cost(model_info=model_info, usage=usage) - ### CACHE READ COST - Now uses tiered pricing - prompt_cost += float(cache_hit_tokens) * cache_read_cost - - ### AUDIO COST - prompt_cost += calculate_cost_component( - model_info, "input_cost_per_audio_token", audio_tokens - ) - - ### CACHE WRITING COST - Now uses tiered pricing - prompt_cost += float(usage._cache_creation_input_tokens or 0) * cache_creation_cost - - ### CHARACTER COST - - prompt_cost += calculate_cost_component( - model_info, "input_cost_per_character", character_count - ) - - ### IMAGE COUNT COST - prompt_cost += calculate_cost_component( - model_info, "input_cost_per_image", image_count - ) - - ### VIDEO LENGTH COST - prompt_cost += calculate_cost_component( - model_info, "input_cost_per_video_per_second", video_length_seconds + prompt_cost = _calculate_input_cost( + prompt_tokens_details=prompt_tokens_details, + model_info=model_info, + prompt_base_cost=prompt_base_cost, + cache_read_cost=cache_read_cost, + cache_creation_cost=cache_creation_cost, + cache_creation_cost_above_1hr=cache_creation_cost_above_1hr, ) ## CALCULATE OUTPUT COST @@ -321,27 +512,10 @@ def generic_cost_per_token( reasoning_tokens = 0 is_text_tokens_total = False if usage.completion_tokens_details is not None: - audio_tokens = ( - cast( - Optional[int], - getattr(usage.completion_tokens_details, "audio_tokens", 0), - ) - or 0 - ) - text_tokens = ( - cast( - Optional[int], - getattr(usage.completion_tokens_details, "text_tokens", None), - ) - or 0 # default to completion tokens, if this field is not set - ) - reasoning_tokens = ( - cast( - Optional[int], - getattr(usage.completion_tokens_details, "reasoning_tokens", 0), - ) - or 0 - ) + completion_tokens_details = _parse_completion_tokens_details(usage) + audio_tokens = completion_tokens_details["audio_tokens"] + text_tokens = completion_tokens_details["text_tokens"] + reasoning_tokens = completion_tokens_details["reasoning_tokens"] if text_tokens == 0: text_tokens = usage.completion_tokens @@ -350,8 +524,12 @@ def generic_cost_per_token( ## TEXT COST completion_cost = float(text_tokens) * completion_base_cost - _output_cost_per_audio_token = _get_cost_per_unit(model_info, "output_cost_per_audio_token", None) - _output_cost_per_reasoning_token = _get_cost_per_unit(model_info, "output_cost_per_reasoning_token", None) + _output_cost_per_audio_token = _get_cost_per_unit( + model_info, "output_cost_per_audio_token", None + ) + _output_cost_per_reasoning_token = _get_cost_per_unit( + model_info, "output_cost_per_reasoning_token", None + ) ## AUDIO COST if not is_text_tokens_total and audio_tokens is not None and audio_tokens > 0: @@ -397,7 +575,7 @@ class CostCalculatorUtils: ]: return True return False - + @staticmethod def route_image_generation_cost_calculator( model: str, diff --git a/litellm/litellm_core_utils/object_pooling.py b/litellm/litellm_core_utils/object_pooling.py new file mode 100644 index 0000000000..846e6536f8 --- /dev/null +++ b/litellm/litellm_core_utils/object_pooling.py @@ -0,0 +1,137 @@ +""" +Generic object pooling utilities for LiteLLM. + +This module provides a flexible object pooling system that can be used +to pool any type of object, reducing memory allocation overhead and +improving performance for frequently created/destroyed objects. + +Memory Management Strategy: +- Balanced eviction-based memory control to optimize reuse ratio +- Moderate eviction frequency (300s) to maintain high object reuse +- Conservative eviction weight (0.3) to avoid destroying useful objects +- Lower pre-warm count (5) to reduce initial memory footprint +- Always keeps at least one object available for high availability +- Unlimited pools when maxsize is not specified (eviction controls actual usage) +""" + +from typing import Any, Callable, Optional, Type, TypeVar + +from pond import Pond, PooledObject, PooledObjectFactory + +T = TypeVar('T') + +class GenericPooledObjectFactory(PooledObjectFactory): + """Generic factory class for creating pooled objects of any type.""" + + def __init__( + self, + object_class: Type[T], + pooled_maxsize: Optional[int] = None, # None = unlimited pool with eviction-based memory control + least_one: bool = True, # Always keep at least one for high concurrency + initializer: Optional[Callable[[T], None]] = None + ): + # Only pass maxsize to Pond if user specified it - otherwise let Pond handle unlimited pools + if pooled_maxsize is not None: + super().__init__(pooled_maxsize=pooled_maxsize, least_one=least_one) + else: + super().__init__(least_one=least_one) + self.object_class = object_class + self.initializer = initializer + self._user_maxsize = pooled_maxsize # Store original user preference + + def createInstance(self) -> PooledObject: + """Create a new instance wrapped in a PooledObject.""" + # Create a properly initialized instance + obj = self.object_class() + return PooledObject(obj) + + def destroy(self, pooled_object: PooledObject): + """Destroy the pooled object.""" + if hasattr(pooled_object.keeped_object, '__dict__'): + pooled_object.keeped_object.__dict__.clear() + del pooled_object + + def reset(self, pooled_object: PooledObject, **kwargs: Any) -> PooledObject: + """Reset the pooled object to a clean state.""" + obj = pooled_object.keeped_object + # Reset the object by calling its reset method if it exists + if hasattr(obj, 'reset') and callable(getattr(obj, 'reset')): + obj.reset() + else: + # Fallback: clear all attributes to reset the object + if hasattr(obj, '__dict__'): + obj.__dict__.clear() + return pooled_object + + def validate(self, pooled_object: PooledObject) -> bool: + """Validate if the pooled object is still usable.""" + return pooled_object.keeped_object is not None + +# Global pond instances +_pools: dict[str, Pond] = {} + +def get_object_pool( + pool_name: str, + object_class: Type[T], + pooled_maxsize: Optional[int] = None, # None = unlimited pool with eviction-based memory control + least_one: bool = True, # Always keep at least one + borrowed_timeout: int = 10, # Longer timeout for high concurrency + time_between_eviction_runs: int = 300, # Less frequent eviction to maintain high reuse ratio + eviction_weight: float = 0.3, # Less aggressive eviction for better reuse + prewarm_count: int = 5 # Lower pre-warm count to reduce initial memory usage +) -> Pond: + """Get or create a global object pool instance with balanced eviction-based memory control. + + Memory is controlled through moderate eviction to balance reuse ratio and memory usage: + - Moderate eviction frequency (300s) to maintain high object reuse ratio + - Conservative eviction weight (0.3) to avoid destroying useful objects + - Lower pre-warm count (5) to reduce initial memory footprint + + Args: + pool_name: Unique name for the pool + object_class: The class type to pool + pooled_maxsize: Maximum number of objects in the pool (None = truly unlimited) + least_one: Whether to keep at least one object in the pool (default: True) + borrowed_timeout: Timeout for borrowing objects (seconds, default: 10) + time_between_eviction_runs: Time between eviction runs (seconds, default: 300) + eviction_weight: Weight for eviction algorithm (default: 0.3, conservative) + prewarm_count: Number of objects to pre-warm the pool with (default: 5) + + Returns: + Pond instance for the specified object type + """ + + if pool_name in _pools: + return _pools[pool_name] + + # Create new pond + pond = Pond( + borrowed_timeout=borrowed_timeout, + time_between_eviction_runs=time_between_eviction_runs, + thread_daemon=True, + eviction_weight=eviction_weight + ) + + # Register the factory with user's maxsize preference + factory = GenericPooledObjectFactory( + object_class=object_class, + pooled_maxsize=pooled_maxsize, + least_one=least_one + ) + pond.register(factory, name=f"{pool_name}Factory") + + # Pre-warm the pool + _prewarm_pool(pond, pool_name, prewarm_count) + + _pools[pool_name] = pond + return pond + +def _prewarm_pool(pond: Pond, pool_name: str, prewarm_count: int = 20) -> None: + """Pre-warm the pool with initial objects for high concurrency.""" + for _ in range(prewarm_count): + try: + pooled_obj = pond.borrow(name=f"{pool_name}Factory") + pond.recycle(pooled_obj, name=f"{pool_name}Factory") + except Exception: + # If pre-warming fails, just continue + break \ No newline at end of file diff --git a/litellm/litellm_core_utils/prompt_templates/factory.py b/litellm/litellm_core_utils/prompt_templates/factory.py index 65f49cf08b..b9cc5e50c3 100644 --- a/litellm/litellm_core_utils/prompt_templates/factory.py +++ b/litellm/litellm_core_utils/prompt_templates/factory.py @@ -16,8 +16,8 @@ from litellm import verbose_logger from litellm.llms.custom_httpx.http_handler import HTTPHandler, get_async_httpx_client from litellm.types.files import get_file_extension_from_mime_type from litellm.types.llms.anthropic import * -from litellm.types.llms.bedrock import MessageBlock as BedrockMessageBlock from litellm.types.llms.bedrock import CachePointBlock +from litellm.types.llms.bedrock import MessageBlock as BedrockMessageBlock from litellm.types.llms.custom_http import httpxSpecialProvider from litellm.types.llms.ollama import OllamaVisionModelObject from litellm.types.llms.openai import ( @@ -1067,10 +1067,10 @@ def convert_to_gemini_tool_call_invoke( if tool_calls is not None: for tool in tool_calls: if "function" in tool: - gemini_function_call: Optional[VertexFunctionCall] = ( - _gemini_tool_call_invoke_helper( - function_call_params=tool["function"] - ) + gemini_function_call: Optional[ + VertexFunctionCall + ] = _gemini_tool_call_invoke_helper( + function_call_params=tool["function"] ) if gemini_function_call is not None: _parts_list.append( @@ -1589,9 +1589,9 @@ def anthropic_messages_pt( # noqa: PLR0915 ) if "cache_control" in _content_element: - _anthropic_content_element["cache_control"] = ( - _content_element["cache_control"] - ) + _anthropic_content_element[ + "cache_control" + ] = _content_element["cache_control"] user_content.append(_anthropic_content_element) elif m.get("type", "") == "text": m = cast(ChatCompletionTextObject, m) @@ -1629,9 +1629,9 @@ def anthropic_messages_pt( # noqa: PLR0915 ) if "cache_control" in _content_element: - _anthropic_content_text_element["cache_control"] = ( - _content_element["cache_control"] - ) + _anthropic_content_text_element[ + "cache_control" + ] = _content_element["cache_control"] user_content.append(_anthropic_content_text_element) @@ -2482,8 +2482,7 @@ class BedrockImageProcessor: if is_document: return BedrockImageProcessor._get_document_format( - mime_type=mime_type, - supported_doc_formats=supported_doc_formats + mime_type=mime_type, supported_doc_formats=supported_doc_formats ) else: @@ -2495,12 +2494,9 @@ class BedrockImageProcessor: f"Unsupported image format: {image_format}. Supported formats: {supported_image_and_video_formats}" ) return image_format - + @staticmethod - def _get_document_format( - mime_type: str, - supported_doc_formats: List[str] - ) -> str: + def _get_document_format(mime_type: str, supported_doc_formats: List[str]) -> str: """ Get the document format from the mime type @@ -2519,13 +2515,9 @@ class BedrockImageProcessor: The document format """ valid_extensions: Optional[List[str]] = None - potential_extensions = mimetypes.guess_all_extensions( - mime_type, strict=False - ) + potential_extensions = mimetypes.guess_all_extensions(mime_type, strict=False) valid_extensions = [ - ext[1:] - for ext in potential_extensions - if ext[1:] in supported_doc_formats + ext[1:] for ext in potential_extensions if ext[1:] in supported_doc_formats ] # Fallback to types/files.py if mimetypes doesn't return valid extensions @@ -2689,10 +2681,12 @@ def _convert_to_bedrock_tool_call_invoke( ) bedrock_content_block = BedrockContentBlock(toolUse=bedrock_tool) _parts_list.append(bedrock_content_block) - + # Check for cache_control and add a separate cachePoint block if tool.get("cache_control", None) is not None: - cache_point_block = BedrockContentBlock(cachePoint=CachePointBlock(type="default")) + cache_point_block = BedrockContentBlock( + cachePoint=CachePointBlock(type="default") + ) _parts_list.append(cache_point_block) return _parts_list except Exception as e: @@ -2754,7 +2748,7 @@ def _convert_to_bedrock_tool_call_result( for content in content_list: if content["type"] == "text": content_str += content["text"] - + message.get("name", "") id = str(message.get("tool_call_id", str(uuid.uuid4()))) @@ -2763,7 +2757,7 @@ def _convert_to_bedrock_tool_call_result( content=[tool_result_content_block], toolUseId=id, ) - + content_block = BedrockContentBlock(toolResult=tool_result) return content_block @@ -3128,6 +3122,12 @@ class BedrockConverseMessagesProcessor: if element["type"] == "text": _part = BedrockContentBlock(text=element["text"]) _parts.append(_part) + elif element["type"] == "guarded_text": + # Wrap guarded_text in guardContent block + _part = BedrockContentBlock( + guardContent={"text": {"text": element["text"]}} + ) + _parts.append(_part) elif element["type"] == "image_url": format: Optional[str] = None if isinstance(element["image_url"], dict): @@ -3199,26 +3199,29 @@ class BedrockConverseMessagesProcessor: current_message = messages[msg_i] tool_call_result = _convert_to_bedrock_tool_call_result(current_message) tool_content.append(tool_call_result) - + # Check if we need to add a separate cachePoint block has_cache_control = False - + # Check for message-level cache_control if current_message.get("cache_control", None) is not None: has_cache_control = True # Check for content-level cache_control in list content elif isinstance(current_message.get("content"), list): for content_element in current_message["content"]: - if (isinstance(content_element, dict) and - content_element.get("cache_control", None) is not None): + if ( + isinstance(content_element, dict) + and content_element.get("cache_control", None) is not None + ): has_cache_control = True break - + # Add a separate cachePoint block if cache_control is present if has_cache_control: - cache_point_block = BedrockContentBlock(cachePoint=CachePointBlock(type="default")) + cache_point_block = BedrockContentBlock( + cachePoint=CachePointBlock(type="default") + ) tool_content.append(cache_point_block) - msg_i += 1 if tool_content: @@ -3299,7 +3302,7 @@ class BedrockConverseMessagesProcessor: image_url=image_url ) assistants_parts.append(assistants_part) - # Add cache point block for assistant content elements + # Add cache point block for assistant content elements _cache_point_block = ( litellm.AmazonConverseConfig()._get_cache_point_block( message_block=cast( @@ -3311,8 +3314,12 @@ class BedrockConverseMessagesProcessor: if _cache_point_block is not None: assistants_parts.append(_cache_point_block) assistant_content.extend(assistants_parts) - elif _assistant_content is not None and isinstance(_assistant_content, str): - assistant_content.append(BedrockContentBlock(text=_assistant_content)) + elif _assistant_content is not None and isinstance( + _assistant_content, str + ): + assistant_content.append( + BedrockContentBlock(text=_assistant_content) + ) # Add cache point block for assistant string content _cache_point_block = ( litellm.AmazonConverseConfig()._get_cache_point_block( @@ -3496,6 +3503,12 @@ def _bedrock_converse_messages_pt( # noqa: PLR0915 if element["type"] == "text": _part = BedrockContentBlock(text=element["text"]) _parts.append(_part) + elif element["type"] == "guarded_text": + # Wrap guarded_text in guardContent block + _part = BedrockContentBlock( + guardContent={"text": {"text": element["text"]}} + ) + _parts.append(_part) elif element["type"] == "image_url": format: Optional[str] = None if isinstance(element["image_url"], dict): @@ -3565,29 +3578,33 @@ def _bedrock_converse_messages_pt( # noqa: PLR0915 while msg_i < len(messages) and messages[msg_i]["role"] == "tool": tool_call_result = _convert_to_bedrock_tool_call_result(messages[msg_i]) current_message = messages[msg_i] - + # Add the tool result first tool_content.append(tool_call_result) - + # Check if we need to add a separate cachePoint block has_cache_control = False - + # Check for message-level cache_control if current_message.get("cache_control", None) is not None: has_cache_control = True # Check for content-level cache_control in list content elif isinstance(current_message.get("content"), list): for content_element in current_message["content"]: - if (isinstance(content_element, dict) and - content_element.get("cache_control", None) is not None): + if ( + isinstance(content_element, dict) + and content_element.get("cache_control", None) is not None + ): has_cache_control = True break - + # Add a separate cachePoint block if cache_control is present if has_cache_control: - cache_point_block = BedrockContentBlock(cachePoint=CachePointBlock(type="default")) + cache_point_block = BedrockContentBlock( + cachePoint=CachePointBlock(type="default") + ) tool_content.append(cache_point_block) - + msg_i += 1 if tool_content: # if last message was a 'user' message, then add a blank assistant message (bedrock requires alternating roles) @@ -3852,10 +3869,9 @@ def function_call_prompt(messages: list, functions: list): if isinstance(message["content"], str): message["content"] += f""" {function_prompt}""" else: - message["content"].append({ - "type": "text", - "text": f""" {function_prompt}""" - }) + message["content"].append( + {"type": "text", "text": f""" {function_prompt}"""} + ) function_added_to_prompt = True if function_added_to_prompt is False: diff --git a/litellm/llms/anthropic/chat/transformation.py b/litellm/llms/anthropic/chat/transformation.py index ce874bfde9..e54aeaf995 100644 --- a/litellm/llms/anthropic/chat/transformation.py +++ b/litellm/llms/anthropic/chat/transformation.py @@ -45,7 +45,10 @@ from litellm.types.llms.openai import ( OpenAIMcpServerTool, OpenAIWebSearchOptions, ) -from litellm.types.utils import CompletionTokensDetailsWrapper +from litellm.types.utils import ( + CacheCreationTokenDetails, + CompletionTokensDetailsWrapper, +) from litellm.types.utils import Message as LitellmMessage from litellm.types.utils import PromptTokensDetailsWrapper, ServerToolUse from litellm.utils import ( @@ -200,8 +203,12 @@ class AnthropicConfig(AnthropicModelInfo, BaseConfig): ) _allowed_properties = set(AnthropicInputSchema.__annotations__.keys()) - input_schema_filtered = {k: v for k, v in _input_schema.items() if k in _allowed_properties} - input_anthropic_schema: AnthropicInputSchema = AnthropicInputSchema(**input_schema_filtered) + input_schema_filtered = { + k: v for k, v in _input_schema.items() if k in _allowed_properties + } + input_anthropic_schema: AnthropicInputSchema = AnthropicInputSchema( + **input_schema_filtered + ) _tool = AnthropicMessagesTool( name=tool["function"]["name"], @@ -816,12 +823,14 @@ class AnthropicConfig(AnthropicModelInfo, BaseConfig): _usage = usage_object cache_creation_input_tokens: int = 0 cache_read_input_tokens: int = 0 + cache_creation_token_details: Optional[CacheCreationTokenDetails] = None web_search_requests: Optional[int] = None if ( "cache_creation_input_tokens" in _usage and _usage["cache_creation_input_tokens"] is not None ): cache_creation_input_tokens = _usage["cache_creation_input_tokens"] + prompt_tokens += cache_creation_input_tokens if ( "cache_read_input_tokens" in _usage and _usage["cache_read_input_tokens"] is not None @@ -837,8 +846,20 @@ class AnthropicConfig(AnthropicModelInfo, BaseConfig): int, _usage["server_tool_use"]["web_search_requests"] ) + if "cache_creation" in _usage and _usage["cache_creation"] is not None: + cache_creation_token_details = CacheCreationTokenDetails( + ephemeral_5m_input_tokens=_usage["cache_creation"].get( + "ephemeral_5m_input_tokens" + ), + ephemeral_1h_input_tokens=_usage["cache_creation"].get( + "ephemeral_1h_input_tokens" + ), + ) + prompt_tokens_details = PromptTokensDetailsWrapper( cached_tokens=cache_read_input_tokens, + cache_creation_tokens=cache_read_input_tokens, + cache_creation_token_details=cache_creation_token_details, ) completion_token_details = ( CompletionTokensDetailsWrapper( diff --git a/litellm/llms/base_llm/batches/transformation.py b/litellm/llms/base_llm/batches/transformation.py index 1d3e54fae6..9e67689fcd 100644 --- a/litellm/llms/base_llm/batches/transformation.py +++ b/litellm/llms/base_llm/batches/transformation.py @@ -158,6 +158,48 @@ class BaseBatchesConfig(ABC): """ pass + @abstractmethod + def transform_retrieve_batch_request( + self, + batch_id: str, + optional_params: dict, + litellm_params: dict, + ) -> Union[bytes, str, Dict[str, Any]]: + """ + Transform the batch retrieval request to provider-specific format. + + Args: + batch_id: Batch ID to retrieve + optional_params: Optional parameters + litellm_params: LiteLLM parameters + + Returns: + Transformed request data + """ + pass + + @abstractmethod + def transform_retrieve_batch_response( + self, + model: Optional[str], + raw_response: httpx.Response, + logging_obj: LiteLLMLoggingObj, + litellm_params: dict, + ) -> LiteLLMBatch: + """ + Transform provider-specific batch retrieval response to LiteLLM format. + + Args: + model: Model name + raw_response: Raw HTTP response + logging_obj: Logging object + litellm_params: LiteLLM parameters + + Returns: + LiteLLM batch object + """ + pass + @abstractmethod def get_error_class( self, error_message: str, status_code: int, headers: Union[Dict, Headers] diff --git a/litellm/llms/bedrock/base_aws_llm.py b/litellm/llms/bedrock/base_aws_llm.py index 0ddf8896fd..8211addaf9 100644 --- a/litellm/llms/bedrock/base_aws_llm.py +++ b/litellm/llms/bedrock/base_aws_llm.py @@ -20,7 +20,11 @@ from pydantic import BaseModel from litellm._logging import verbose_logger from litellm.caching.caching import DualCache -from litellm.constants import BEDROCK_INVOKE_PROVIDERS_LITERAL, BEDROCK_MAX_POLICY_SIZE +from litellm.constants import ( + BEDROCK_EMBEDDING_PROVIDERS_LITERAL, + BEDROCK_INVOKE_PROVIDERS_LITERAL, + BEDROCK_MAX_POLICY_SIZE, +) from litellm.litellm_core_utils.dd_tracing import tracer from litellm.secret_managers.main import get_secret, get_secret_str @@ -189,23 +193,32 @@ class BaseAWSLLM: # Check if we're in IRSA and trying to assume the same role we already have current_role_arn = os.getenv("AWS_ROLE_ARN") web_identity_token_file = os.getenv("AWS_WEB_IDENTITY_TOKEN_FILE") - + # In IRSA environments, we should skip role assumption if we're already running as the target role # This is true when: # 1. We have AWS_ROLE_ARN set (current role) # 2. We have AWS_WEB_IDENTITY_TOKEN_FILE set (IRSA environment) # 3. The current role matches the requested role - if (current_role_arn and web_identity_token_file and - current_role_arn == aws_role_name): - verbose_logger.debug("Using IRSA same-role optimization: calling _auth_with_env_vars") + if ( + current_role_arn + and web_identity_token_file + and current_role_arn == aws_role_name + ): + verbose_logger.debug( + "Using IRSA same-role optimization: calling _auth_with_env_vars" + ) # We're already running as this role via IRSA, no need to assume it again # Use the default boto3 credentials (which will use the IRSA credentials) credentials, _cache_ttl = self._auth_with_env_vars() else: - verbose_logger.debug("Using role assumption: calling _auth_with_aws_role") + verbose_logger.debug( + "Using role assumption: calling _auth_with_aws_role" + ) # If aws_session_name is not provided, generate a default one if aws_session_name is None: - aws_session_name = f"litellm-session-{int(datetime.now().timestamp())}" + aws_session_name = ( + f"litellm-session-{int(datetime.now().timestamp())}" + ) credentials, _cache_ttl = self._auth_with_aws_role( aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, @@ -318,6 +331,40 @@ class BaseAWSLLM: return provider return None + @staticmethod + def get_bedrock_embedding_provider( + model: str, + ) -> Optional[BEDROCK_EMBEDDING_PROVIDERS_LITERAL]: + """ + Helper function to get the bedrock embedding provider from the model + + Handles scenarios like: + 1. model=cohere.embed-english-v3:0 -> Returns `cohere` + 2. model=amazon.titan-embed-text-v1 -> Returns `amazon` + 3. model=us.twelvelabs.marengo-embed-2-7-v1:0 -> Returns `twelvelabs` + 4. model=twelvelabs.marengo-embed-2-7-v1:0 -> Returns `twelvelabs` + """ + # Handle regional models like us.twelvelabs.marengo-embed-2-7-v1:0 + if "." in model: + parts = model.split(".") + # Check if the second part (after potential region) is a known provider + if len(parts) >= 2: + potential_provider = parts[1] # e.g., "twelvelabs" from "us.twelvelabs.marengo-embed-2-7-v1:0" + if potential_provider in get_args(BEDROCK_EMBEDDING_PROVIDERS_LITERAL): + return cast(BEDROCK_EMBEDDING_PROVIDERS_LITERAL, potential_provider) + + # Check if the first part is a known provider (standard format) + potential_provider = parts[0] # e.g., "cohere" from "cohere.embed-english-v3:0" + if potential_provider in get_args(BEDROCK_EMBEDDING_PROVIDERS_LITERAL): + return cast(BEDROCK_EMBEDDING_PROVIDERS_LITERAL, potential_provider) + + # Fallback: check if any provider name appears in the model string + for provider in get_args(BEDROCK_EMBEDDING_PROVIDERS_LITERAL): + if provider in model: + return cast(BEDROCK_EMBEDDING_PROVIDERS_LITERAL, provider) + + return None + def _get_aws_region_name( self, optional_params: dict, @@ -479,55 +526,67 @@ class BaseAWSLLM: iam_creds = session.get_credentials() return iam_creds, self._get_default_ttl_for_boto3_credentials() - def _handle_irsa_cross_account(self, irsa_role_arn: str, aws_role_name: str, - aws_session_name: str, region: str, web_identity_token_file: str, - aws_external_id: Optional[str] = None) -> dict: + def _handle_irsa_cross_account( + self, + irsa_role_arn: str, + aws_role_name: str, + aws_session_name: str, + region: str, + web_identity_token_file: str, + aws_external_id: Optional[str] = None, + ) -> dict: """Handle cross-account role assumption for IRSA.""" import boto3 - + verbose_logger.debug("Cross-account role assumption detected") - + # Read the web identity token - with open(web_identity_token_file, 'r') as f: + with open(web_identity_token_file, "r") as f: web_identity_token = f.read().strip() - + # Create an STS client without credentials with tracer.trace("boto3.client(sts) for manual IRSA"): - sts_client = boto3.client('sts', region_name=region) - + sts_client = boto3.client("sts", region_name=region) + # Manually assume the IRSA role with the session name - verbose_logger.debug(f"Manually assuming IRSA role {irsa_role_arn} with session {aws_session_name}") + verbose_logger.debug( + f"Manually assuming IRSA role {irsa_role_arn} with session {aws_session_name}" + ) irsa_response = sts_client.assume_role_with_web_identity( RoleArn=irsa_role_arn, RoleSessionName=aws_session_name, - WebIdentityToken=web_identity_token + WebIdentityToken=web_identity_token, ) - + # Extract the credentials from the IRSA assumption irsa_creds = irsa_response["Credentials"] - + # Create a new STS client with the IRSA credentials with tracer.trace("boto3.client(sts) with manual IRSA credentials"): sts_client_with_creds = boto3.client( - 'sts', + "sts", region_name=region, aws_access_key_id=irsa_creds["AccessKeyId"], aws_secret_access_key=irsa_creds["SecretAccessKey"], - aws_session_token=irsa_creds["SessionToken"] + aws_session_token=irsa_creds["SessionToken"], ) - + # Get current caller identity for debugging try: caller_identity = sts_client_with_creds.get_caller_identity() - verbose_logger.debug(f"Current identity after manual IRSA assumption: {caller_identity.get('Arn', 'unknown')}") + verbose_logger.debug( + f"Current identity after manual IRSA assumption: {caller_identity.get('Arn', 'unknown')}" + ) except Exception as e: verbose_logger.debug(f"Failed to get caller identity: {e}") - + # Now assume the target role - verbose_logger.debug(f"Attempting to assume target role: {aws_role_name} with session: {aws_session_name}") + verbose_logger.debug( + f"Attempting to assume target role: {aws_role_name} with session: {aws_session_name}" + ) assume_role_params = { "RoleArn": aws_role_name, - "RoleSessionName": aws_session_name + "RoleSessionName": aws_session_name, } # Add ExternalId parameter if provided @@ -536,27 +595,36 @@ class BaseAWSLLM: return sts_client_with_creds.assume_role(**assume_role_params) - def _handle_irsa_same_account(self, aws_role_name: str, aws_session_name: str, region: str, - aws_external_id: Optional[str] = None) -> dict: + def _handle_irsa_same_account( + self, + aws_role_name: str, + aws_session_name: str, + region: str, + aws_external_id: Optional[str] = None, + ) -> dict: """Handle same-account role assumption for IRSA.""" import boto3 - + verbose_logger.debug("Same account role assumption, using automatic IRSA") with tracer.trace("boto3.client(sts) with automatic IRSA"): sts_client = boto3.client("sts", region_name=region) - + # Get current caller identity for debugging try: caller_identity = sts_client.get_caller_identity() - verbose_logger.debug(f"Current IRSA identity: {caller_identity.get('Arn', 'unknown')}") + verbose_logger.debug( + f"Current IRSA identity: {caller_identity.get('Arn', 'unknown')}" + ) except Exception as e: verbose_logger.debug(f"Failed to get caller identity: {e}") - + # Assume the role - verbose_logger.debug(f"Attempting to assume role: {aws_role_name} with session: {aws_session_name}") + verbose_logger.debug( + f"Attempting to assume role: {aws_role_name} with session: {aws_session_name}" + ) assume_role_params = { "RoleArn": aws_role_name, - "RoleSessionName": aws_session_name + "RoleSessionName": aws_session_name, } # Add ExternalId parameter if provided @@ -565,20 +633,24 @@ class BaseAWSLLM: return sts_client.assume_role(**assume_role_params) - def _extract_credentials_and_ttl(self, sts_response: dict) -> Tuple[Credentials, Optional[int]]: + def _extract_credentials_and_ttl( + self, sts_response: dict + ) -> Tuple[Credentials, Optional[int]]: """Extract credentials and TTL from STS response.""" from botocore.credentials import Credentials - + sts_credentials = sts_response["Credentials"] credentials = Credentials( access_key=sts_credentials["AccessKeyId"], secret_key=sts_credentials["SecretAccessKey"], token=sts_credentials["SessionToken"], ) - + expiration_time = sts_credentials["Expiration"] - ttl = int((expiration_time - datetime.now(expiration_time.tzinfo)).total_seconds()) - + ttl = int( + (expiration_time - datetime.now(expiration_time.tzinfo)).total_seconds() + ) + return credentials, ttl @tracer.wrap() @@ -600,34 +672,51 @@ class BaseAWSLLM: # Check if we're in an EKS/IRSA environment web_identity_token_file = os.getenv("AWS_WEB_IDENTITY_TOKEN_FILE") irsa_role_arn = os.getenv("AWS_ROLE_ARN") - + # If we have IRSA environment variables and no explicit credentials, # we need to use the web identity token flow - if (web_identity_token_file and irsa_role_arn and - aws_access_key_id is None and aws_secret_access_key is None): + if ( + web_identity_token_file + and irsa_role_arn + and aws_access_key_id is None + and aws_secret_access_key is None + ): # For cross-account role assumption with specific session names, # we need to manually assume the IRSA role first with the correct session name - verbose_logger.debug(f"IRSA detected: using web identity token from {web_identity_token_file}") - + verbose_logger.debug( + f"IRSA detected: using web identity token from {web_identity_token_file}" + ) + try: # Get region from environment - region = os.getenv("AWS_REGION") or os.getenv("AWS_DEFAULT_REGION") or "us-east-1" - + region = ( + os.getenv("AWS_REGION") + or os.getenv("AWS_DEFAULT_REGION") + or "us-east-1" + ) + # Check if we need to do cross-account role assumption if aws_role_name != irsa_role_arn: sts_response = self._handle_irsa_cross_account( - irsa_role_arn, aws_role_name, aws_session_name, region, web_identity_token_file, aws_external_id + irsa_role_arn, + aws_role_name, + aws_session_name, + region, + web_identity_token_file, + aws_external_id, ) else: sts_response = self._handle_irsa_same_account( aws_role_name, aws_session_name, region, aws_external_id ) - + return self._extract_credentials_and_ttl(sts_response) - + except Exception as e: verbose_logger.debug(f"Failed to assume role via IRSA: {e}") - if "AccessDenied" in str(e) and "is not authorized to perform: sts:AssumeRole" in str(e): + if "AccessDenied" in str( + e + ) and "is not authorized to perform: sts:AssumeRole" in str(e): # Provide a more helpful error message for trust policy issues verbose_logger.error( f"Access denied when trying to assume role {aws_role_name}. " @@ -636,7 +725,7 @@ class BaseAWSLLM: ) # Re-raise the exception instead of falling through raise - + # In EKS/IRSA environments, use ambient credentials (no explicit keys needed) # This allows the web identity token to work automatically if aws_access_key_id is None and aws_secret_access_key is None: @@ -653,7 +742,7 @@ class BaseAWSLLM: assume_role_params = { "RoleArn": aws_role_name, - "RoleSessionName": aws_session_name + "RoleSessionName": aws_session_name, } # Add ExternalId parameter if provided @@ -782,14 +871,14 @@ class BaseAWSLLM: ) # Determine proxy_endpoint_url - if env_aws_bedrock_runtime_endpoint and isinstance( - env_aws_bedrock_runtime_endpoint, str - ): - proxy_endpoint_url = env_aws_bedrock_runtime_endpoint - elif aws_bedrock_runtime_endpoint is not None and isinstance( + if aws_bedrock_runtime_endpoint is not None and isinstance( aws_bedrock_runtime_endpoint, str ): proxy_endpoint_url = aws_bedrock_runtime_endpoint + elif env_aws_bedrock_runtime_endpoint and isinstance( + env_aws_bedrock_runtime_endpoint, str + ): + proxy_endpoint_url = env_aws_bedrock_runtime_endpoint else: proxy_endpoint_url = endpoint_url diff --git a/litellm/llms/bedrock/batches/transformation.py b/litellm/llms/bedrock/batches/transformation.py index 3338450f79..2f3d00dddd 100644 --- a/litellm/llms/bedrock/batches/transformation.py +++ b/litellm/llms/bedrock/batches/transformation.py @@ -7,7 +7,6 @@ from httpx import Headers, Response from litellm.llms.base_llm.batches.transformation import BaseBatchesConfig from litellm.llms.base_llm.chat.transformation import BaseLLMException from litellm.types.llms.bedrock import ( - BedrockBatchJobStatus, BedrockCreateBatchRequest, BedrockCreateBatchResponse, BedrockInputDataConfig, @@ -200,19 +199,23 @@ class BedrockBatchesConfig(BaseAWSLLM, BaseBatchesConfig): # Extract information from typed Bedrock response job_arn = response_data.get("jobArn", "") - status: BedrockBatchJobStatus = response_data.get("status", "Submitted") + status_str: str = str(response_data.get("status", "Submitted")) # Map Bedrock status to OpenAI-compatible status - status_mapping: Dict[BedrockBatchJobStatus, str] = { + status_mapping: Dict[str, str] = { "Submitted": "validating", + "Validating": "validating", + "Scheduled": "in_progress", "InProgress": "in_progress", + "PartiallyCompleted": "completed", "Completed": "completed", "Failed": "failed", "Stopping": "cancelling", - "Stopped": "cancelled" + "Stopped": "cancelled", + "Expired": "expired", } - openai_status = cast(Literal["validating", "failed", "in_progress", "finalizing", "completed", "expired", "cancelling", "cancelled"], status_mapping.get(status, "validating")) + openai_status = cast(Literal["validating", "failed", "in_progress", "finalizing", "completed", "expired", "cancelling", "cancelled"], status_mapping.get(status_str, "validating")) # Get original request data from litellm_params if available original_request = litellm_params.get("original_batch_request", {}) @@ -229,7 +232,7 @@ class BedrockBatchesConfig(BaseAWSLLM, BaseBatchesConfig): output_file_id=None, # Will be populated when job completes error_file_id=None, created_at=int(time.time()), - in_progress_at=int(time.time()) if status == "InProgress" else None, + in_progress_at=int(time.time()) if status_str == "InProgress" else None, expires_at=None, finalizing_at=None, completed_at=None, @@ -241,6 +244,203 @@ class BedrockBatchesConfig(BaseAWSLLM, BaseBatchesConfig): metadata=original_request.get("metadata", {}), ) + def transform_retrieve_batch_request( + self, + batch_id: str, + optional_params: dict, + litellm_params: dict, + ) -> Dict[str, Any]: + """ + Transform batch retrieval request for Bedrock. + + Args: + batch_id: Bedrock job ARN + optional_params: Optional parameters + litellm_params: LiteLLM parameters + + Returns: + Transformed request data for Bedrock GetModelInvocationJob API + """ + # For Bedrock, batch_id should be the full job ARN + # The GetModelInvocationJob API expects the full ARN as the identifier + if not batch_id.startswith("arn:aws:bedrock:"): + raise ValueError(f"Invalid batch_id format. Expected ARN, got: {batch_id}") + + # Extract the job identifier from the ARN - use the full ARN path part + # ARN format: arn:aws:bedrock:region:account:model-invocation-job/job-name + arn_parts = batch_id.split(":") + if len(arn_parts) < 6: + raise ValueError(f"Invalid ARN format: {batch_id}") + + region = arn_parts[3] + # arn_parts[5] contains "model-invocation-job/{jobId}" + + # Build the endpoint URL for GetModelInvocationJob + # AWS API format: GET /model-invocation-job/{jobIdentifier} + # Use the FULL ARN as jobIdentifier and URL-encode it (includes ':' and '/') + import urllib.parse as _ul + encoded_arn = _ul.quote(batch_id, safe="") + endpoint_url = f"https://bedrock.{region}.amazonaws.com/model-invocation-job/{encoded_arn}" + + # Use common utility for AWS signing + signed_headers, _ = self.common_utils.sign_aws_request( + service_name="bedrock", + data={}, # GET request has no body + endpoint_url=endpoint_url, + optional_params=optional_params, + method="GET" + ) + + # Return pre-signed request format + return { + "method": "GET", + "url": endpoint_url, + "headers": signed_headers, + "data": None + } + + def _parse_timestamps_and_status(self, response_data, status_str: str): + """Helper to parse timestamps based on status.""" + import datetime + def parse_timestamp(ts_str: Optional[str]) -> Optional[int]: + if not ts_str: + return None + try: + dt = datetime.datetime.fromisoformat(ts_str.replace('Z', '+00:00')) + return int(dt.timestamp()) + except Exception: + return None + + created_at = parse_timestamp(str(response_data.get("submitTime")) if response_data.get("submitTime") is not None else None) + in_progress_states = {"InProgress", "Validating", "Scheduled"} + in_progress_at = ( + parse_timestamp(str(response_data.get("lastModifiedTime")) if response_data.get("lastModifiedTime") is not None else None) + if status_str in in_progress_states + else None + ) + completed_at = parse_timestamp(str(response_data.get("endTime")) if response_data.get("endTime") is not None else None) if status_str in {"Completed", "PartiallyCompleted"} else None + failed_at = parse_timestamp(str(response_data.get("endTime")) if response_data.get("endTime") is not None else None) if status_str == "Failed" else None + cancelled_at = parse_timestamp(str(response_data.get("endTime")) if response_data.get("endTime") is not None else None) if status_str == "Stopped" else None + expires_at = parse_timestamp(str(response_data.get("jobExpirationTime")) if response_data.get("jobExpirationTime") is not None else None) + + return created_at, in_progress_at, completed_at, failed_at, cancelled_at, expires_at + + def _extract_file_configs(self, response_data): + """Helper to extract input and output file configurations.""" + # Extract input file ID + input_file_id = "" + input_data_config = response_data.get("inputDataConfig", {}) + if isinstance(input_data_config, dict): + s3_input_config = input_data_config.get("s3InputDataConfig", {}) + if isinstance(s3_input_config, dict): + input_file_id = s3_input_config.get("s3Uri", "") + + # Extract output file ID + output_file_id = None + output_data_config = response_data.get("outputDataConfig", {}) + if isinstance(output_data_config, dict): + s3_output_config = output_data_config.get("s3OutputDataConfig", {}) + if isinstance(s3_output_config, dict): + output_file_id = s3_output_config.get("s3Uri", "") + + return input_file_id, output_file_id + + def _extract_errors_and_metadata(self, response_data, raw_response): + """Helper to extract errors and enriched metadata.""" + # Extract errors + message = response_data.get("message") + errors = None + if message: + from openai.types.batch import Errors + from openai.types.batch_error import BatchError + errors = Errors( + data=[BatchError(message=message, code=str(raw_response.status_code))], + object="list" + ) + + # Enrich metadata with useful Bedrock fields + enriched_metadata_raw: Dict[str, Any] = { + "jobName": response_data.get("jobName"), + "clientRequestToken": response_data.get("clientRequestToken"), + "modelId": response_data.get("modelId"), + "roleArn": response_data.get("roleArn"), + "timeoutDurationInHours": response_data.get("timeoutDurationInHours"), + "vpcConfig": response_data.get("vpcConfig"), + } + import json as _json + enriched_metadata: Dict[str, str] = {} + for _k, _v in enriched_metadata_raw.items(): + if _v is None: + continue + if isinstance(_v, (dict, list)): + try: + enriched_metadata[_k] = _json.dumps(_v) + except Exception: + enriched_metadata[_k] = str(_v) + else: + enriched_metadata[_k] = str(_v) + + return errors, enriched_metadata + + def transform_retrieve_batch_response( + self, + model: Optional[str], + raw_response: Response, + logging_obj: Any, + litellm_params: dict, + ) -> LiteLLMBatch: + """ + Transform Bedrock batch retrieval response to LiteLLM format. + """ + from litellm.types.llms.bedrock import BedrockGetBatchResponse + try: + response_data: BedrockGetBatchResponse = raw_response.json() + except Exception as e: + raise ValueError(f"Failed to parse Bedrock batch response: {e}") + + job_arn = response_data.get("jobArn", "") + status_str: str = str(response_data.get("status", "Submitted")) + + # Map Bedrock status to OpenAI-compatible status + status_mapping: Dict[str, str] = { + "Submitted": "validating", "Validating": "validating", "Scheduled": "in_progress", + "InProgress": "in_progress", "PartiallyCompleted": "completed", "Completed": "completed", + "Failed": "failed", "Stopping": "cancelling", "Stopped": "cancelled", "Expired": "expired" + } + openai_status = cast(Literal["validating", "failed", "in_progress", "finalizing", "completed", "expired", "cancelling", "cancelled"], status_mapping.get(status_str, "validating")) + + # Parse timestamps + created_at, in_progress_at, completed_at, failed_at, cancelled_at, expires_at = self._parse_timestamps_and_status(response_data, status_str) + + # Extract file configurations + input_file_id, output_file_id = self._extract_file_configs(response_data) + + # Extract errors and metadata + errors, enriched_metadata = self._extract_errors_and_metadata(response_data, raw_response) + + return LiteLLMBatch( + id=job_arn, + object="batch", + endpoint="/v1/chat/completions", + errors=errors, + input_file_id=input_file_id, + completion_window="24h", + status=openai_status, + output_file_id=output_file_id, + error_file_id=None, + created_at=created_at or int(time.time()), + in_progress_at=in_progress_at, + expires_at=expires_at, + finalizing_at=None, + completed_at=completed_at, + failed_at=failed_at, + expired_at=None, + cancelling_at=None, + cancelled_at=cancelled_at, + request_counts=None, + metadata=enriched_metadata, + ) + def get_error_class( self, error_message: str, status_code: int, headers: Union[Dict, Headers] ) -> BaseLLMException: diff --git a/litellm/llms/bedrock/chat/converse_transformation.py b/litellm/llms/bedrock/chat/converse_transformation.py index e3d65be8bb..e809444433 100644 --- a/litellm/llms/bedrock/chat/converse_transformation.py +++ b/litellm/llms/bedrock/chat/converse_transformation.py @@ -102,6 +102,61 @@ class AmazonConverseConfig(BaseConfig): "performanceConfig": PerformanceConfigBlock, } + @staticmethod + def _convert_consecutive_user_messages_to_guarded_text( + messages: List[AllMessageValues], optional_params: dict + ) -> List[AllMessageValues]: + """ + Convert consecutive user messages at the end to guarded_text type if guardrailConfig is present + and no guarded_text is already present in those messages. + """ + # Check if guardrailConfig is present + if "guardrailConfig" not in optional_params: + return messages + + # Find all consecutive user messages at the end + consecutive_user_message_indices = [] + for i in range(len(messages) - 1, -1, -1): + if messages[i].get("role") == "user": + consecutive_user_message_indices.append(i) + else: + break + + if not consecutive_user_message_indices: + return messages + + # Process each consecutive user message + messages_copy = copy.deepcopy(messages) + for user_message_index in consecutive_user_message_indices: + user_message = messages_copy[user_message_index] + content = user_message.get("content", []) + + if isinstance(content, list): + has_guarded_text = any( + isinstance(item, dict) and item.get("type") == "guarded_text" + for item in content + ) + if has_guarded_text: + continue # Skip this message if it already has guarded_text + + # Convert text elements to guarded_text + new_content = [] + for item in content: + if isinstance(item, dict) and item.get("type") == "text": + new_item = {"type": "guarded_text", "text": item["text"]} # type: ignore + new_content.append(new_item) + else: + new_content.append(item) + + messages_copy[user_message_index]["content"] = new_content # type: ignore + elif isinstance(content, str): + # If content is a string, convert it to guarded_text + messages_copy[user_message_index]["content"] = [ # type: ignore + {"type": "guarded_text", "text": content} # type: ignore + ] + + return messages_copy + @classmethod def get_config(cls): return { @@ -120,6 +175,77 @@ class AmazonConverseConfig(BaseConfig): and v is not None } + def _validate_request_metadata(self, metadata: dict) -> None: + """ + Validate requestMetadata according to AWS Bedrock Converse API constraints. + + Constraints: + - Maximum of 16 items + - Keys: 1-256 characters, pattern [a-zA-Z0-9\\s:_@$#=/+,-.]{1,256} + - Values: 0-256 characters, pattern [a-zA-Z0-9\\s:_@$#=/+,-.]{0,256} + """ + import re + + if not isinstance(metadata, dict): + raise litellm.exceptions.BadRequestError( + message="requestMetadata must be a dictionary", + model="bedrock", + llm_provider="bedrock", + ) + + if len(metadata) > 16: + raise litellm.exceptions.BadRequestError( + message="requestMetadata can contain a maximum of 16 items", + model="bedrock", + llm_provider="bedrock", + ) + + key_pattern = re.compile(r'^[a-zA-Z0-9\s:_@$#=/+,.-]{1,256}$') + value_pattern = re.compile(r'^[a-zA-Z0-9\s:_@$#=/+,.-]{0,256}$') + + for key, value in metadata.items(): + if not isinstance(key, str): + raise litellm.exceptions.BadRequestError( + message="requestMetadata keys must be strings", + model="bedrock", + llm_provider="bedrock", + ) + + if not isinstance(value, str): + raise litellm.exceptions.BadRequestError( + message="requestMetadata values must be strings", + model="bedrock", + llm_provider="bedrock", + ) + + if len(key) == 0 or len(key) > 256: + raise litellm.exceptions.BadRequestError( + message="requestMetadata key length must be 1-256 characters", + model="bedrock", + llm_provider="bedrock", + ) + + if len(value) > 256: + raise litellm.exceptions.BadRequestError( + message="requestMetadata value length must be 0-256 characters", + model="bedrock", + llm_provider="bedrock", + ) + + if not key_pattern.match(key): + raise litellm.exceptions.BadRequestError( + message=f"requestMetadata key '{key}' contains invalid characters. Allowed: [a-zA-Z0-9\\s:_@$#=/+,.-]", + model="bedrock", + llm_provider="bedrock", + ) + + if not value_pattern.match(value): + raise litellm.exceptions.BadRequestError( + message=f"requestMetadata value '{value}' contains invalid characters. Allowed: [a-zA-Z0-9\\s:_@$#=/+,.-]", + model="bedrock", + llm_provider="bedrock", + ) + def get_supported_openai_params(self, model: str) -> List[str]: from litellm.utils import supports_function_calling @@ -133,6 +259,7 @@ class AmazonConverseConfig(BaseConfig): "top_p", "extra_headers", "response_format", + "requestMetadata", ] if ( @@ -442,6 +569,10 @@ class AmazonConverseConfig(BaseConfig): optional_params["thinking"] = AnthropicConfig._map_reasoning_effort( value ) + if param == "requestMetadata": + if value is not None and isinstance(value, dict): + self._validate_request_metadata(value) # type: ignore + optional_params["requestMetadata"] = value # Only update thinking tokens for non-GPT-OSS models if "gpt-oss" not in model: @@ -501,7 +632,6 @@ class AmazonConverseConfig(BaseConfig): ) and not is_thinking_enabled ): - optional_params["tool_choice"] = ToolChoiceValuesBlock( tool=SpecificToolChoiceBlock(name=RESPONSE_FORMAT_TOOL_NAME) ) @@ -632,34 +762,8 @@ class AmazonConverseConfig(BaseConfig): return {} - def _transform_request_helper( - self, - model: str, - system_content_blocks: List[SystemContentBlock], - optional_params: dict, - messages: Optional[List[AllMessageValues]] = None, - headers: Optional[dict] = None, - ) -> CommonRequestObject: - ## VALIDATE REQUEST - """ - Bedrock doesn't support tool calling without `tools=` param specified. - """ - if ( - "tools" not in optional_params - and messages is not None - and has_tool_call_blocks(messages) - ): - if litellm.modify_params: - optional_params["tools"] = add_dummy_tool( - custom_llm_provider="bedrock_converse" - ) - else: - raise litellm.UnsupportedParamsError( - message="Bedrock doesn't support tool calling without `tools=` param specified. Pass `tools=` param OR set `litellm.modify_params = True` // `litellm_settings::modify_params: True` to add dummy tool to the request.", - model="", - llm_provider="bedrock", - ) - + def _prepare_request_params(self, optional_params: dict, model: str) -> tuple[dict, dict, dict]: + """Prepare and separate request parameters.""" inference_params = copy.deepcopy(optional_params) supported_converse_params = list( AmazonConverseConfig.__annotations__.keys() @@ -673,6 +777,11 @@ class AmazonConverseConfig(BaseConfig): ) inference_params.pop("json_mode", None) # used for handling json_schema + # Extract requestMetadata before processing other parameters + request_metadata = inference_params.pop("requestMetadata", None) + if request_metadata is not None: + self._validate_request_metadata(request_metadata) + # keep supported params in 'inference_params', and set all model-specific params in 'additional_request_params' additional_request_params = { k: v for k, v in inference_params.items() if k not in total_supported_params @@ -686,9 +795,10 @@ class AmazonConverseConfig(BaseConfig): self._handle_top_k_value(model, inference_params) ) - original_tools = inference_params.pop("tools", []) + return inference_params, additional_request_params, request_metadata - # Initialize bedrock_tools + def _process_tools_and_beta(self, original_tools: list, model: str, headers: Optional[dict], additional_request_params: dict) -> tuple[List[ToolBlock], list]: + """Process tools and collect anthropic_beta values.""" bedrock_tools: List[ToolBlock] = [] # Collect anthropic_beta values from user headers @@ -730,6 +840,44 @@ class AmazonConverseConfig(BaseConfig): seen.add(beta) additional_request_params["anthropic_beta"] = unique_betas + return bedrock_tools, anthropic_beta_list + + def _transform_request_helper( + self, + model: str, + system_content_blocks: List[SystemContentBlock], + optional_params: dict, + messages: Optional[List[AllMessageValues]] = None, + headers: Optional[dict] = None, + ) -> CommonRequestObject: + ## VALIDATE REQUEST + """ + Bedrock doesn't support tool calling without `tools=` param specified. + """ + if ( + "tools" not in optional_params + and messages is not None + and has_tool_call_blocks(messages) + ): + if litellm.modify_params: + optional_params["tools"] = add_dummy_tool( + custom_llm_provider="bedrock_converse" + ) + else: + raise litellm.UnsupportedParamsError( + message="Bedrock doesn't support tool calling without `tools=` param specified. Pass `tools=` param OR set `litellm.modify_params = True` // `litellm_settings::modify_params: True` to add dummy tool to the request.", + model="", + llm_provider="bedrock", + ) + + # Prepare and separate parameters + inference_params, additional_request_params, request_metadata = self._prepare_request_params(optional_params, model) + + original_tools = inference_params.pop("tools", []) + + # Process tools and collect beta values + bedrock_tools, anthropic_beta_list = self._process_tools_and_beta(original_tools, model, headers, additional_request_params) + bedrock_tool_config: Optional[ToolConfigBlock] = None if len(bedrock_tools) > 0: tool_choice_values: ToolChoiceValuesBlock = inference_params.pop( @@ -759,6 +907,10 @@ class AmazonConverseConfig(BaseConfig): if bedrock_tool_config is not None: data["toolConfig"] = bedrock_tool_config + # Request Metadata (top-level field) + if request_metadata is not None: + data["requestMetadata"] = request_metadata + return data async def _async_transform_request( @@ -770,6 +922,11 @@ class AmazonConverseConfig(BaseConfig): headers: Optional[dict] = None, ) -> RequestObject: messages, system_content_blocks = self._transform_system_message(messages) + + # Convert last user message to guarded_text if guardrailConfig is present + messages = self._convert_consecutive_user_messages_to_guarded_text( + messages, optional_params + ) ## TRANSFORMATION ## _data: CommonRequestObject = self._transform_request_helper( @@ -822,6 +979,11 @@ class AmazonConverseConfig(BaseConfig): ) -> RequestObject: messages, system_content_blocks = self._transform_system_message(messages) + # Convert last user message to guarded_text if guardrailConfig is present + messages = self._convert_consecutive_user_messages_to_guarded_text( + messages, optional_params + ) + _data: CommonRequestObject = self._transform_request_helper( model=model, system_content_blocks=system_content_blocks, @@ -995,7 +1157,9 @@ class AmazonConverseConfig(BaseConfig): return message, returned_finish_reason - def _translate_message_content(self, content_blocks: List[ContentBlock]) -> Tuple[ + def _translate_message_content( + self, content_blocks: List[ContentBlock] + ) -> Tuple[ str, List[ChatCompletionToolCallChunk], Optional[List[BedrockConverseReasoningContentBlock]], @@ -1010,9 +1174,9 @@ class AmazonConverseConfig(BaseConfig): """ content_str = "" tools: List[ChatCompletionToolCallChunk] = [] - reasoningContentBlocks: Optional[List[BedrockConverseReasoningContentBlock]] = ( - None - ) + reasoningContentBlocks: Optional[ + List[BedrockConverseReasoningContentBlock] + ] = None for idx, content in enumerate(content_blocks): """ - Content is either a tool response or text @@ -1133,9 +1297,9 @@ class AmazonConverseConfig(BaseConfig): chat_completion_message: ChatCompletionResponseMessage = {"role": "assistant"} content_str = "" tools: List[ChatCompletionToolCallChunk] = [] - reasoningContentBlocks: Optional[List[BedrockConverseReasoningContentBlock]] = ( - None - ) + reasoningContentBlocks: Optional[ + List[BedrockConverseReasoningContentBlock] + ] = None if message is not None: ( @@ -1148,12 +1312,12 @@ class AmazonConverseConfig(BaseConfig): chat_completion_message["provider_specific_fields"] = { "reasoningContentBlocks": reasoningContentBlocks, } - chat_completion_message["reasoning_content"] = ( - self._transform_reasoning_content(reasoningContentBlocks) - ) - chat_completion_message["thinking_blocks"] = ( - self._transform_thinking_blocks(reasoningContentBlocks) - ) + chat_completion_message[ + "reasoning_content" + ] = self._transform_reasoning_content(reasoningContentBlocks) + chat_completion_message[ + "thinking_blocks" + ] = self._transform_thinking_blocks(reasoningContentBlocks) chat_completion_message["content"] = content_str if ( json_mode is True @@ -1171,7 +1335,6 @@ class AmazonConverseConfig(BaseConfig): # Bedrock returns the response wrapped in a "properties" object # We need to extract the actual content from this wrapper try: - response_data = json.loads(json_mode_content_str) # If Bedrock wrapped the response in "properties", extract the content diff --git a/litellm/llms/bedrock/common_utils.py b/litellm/llms/bedrock/common_utils.py index 831a6da93b..c7f7acf331 100644 --- a/litellm/llms/bedrock/common_utils.py +++ b/litellm/llms/bedrock/common_utils.py @@ -738,19 +738,24 @@ class CommonBatchFilesUtils: ) # Prepare the request data - if isinstance(data, dict): - import json - request_data = json.dumps(data) + method_upper = method.upper() + if method_upper == "GET": + # GET requests should be signed with an empty payload + request_data = "" + headers = {} else: - request_data = data - - # Prepare headers - headers = {"Content-Type": "application/json"} + if isinstance(data, dict): + import json + request_data = json.dumps(data) + else: + request_data = data + # Prepare headers for non-GET requests + headers = {"Content-Type": "application/json"} # Create AWS request and sign it sigv4 = SigV4Auth(credentials, service_name, aws_region_name) request = AWSRequest( - method=method.upper(), url=endpoint_url, data=request_data, headers=headers + method=method_upper, url=endpoint_url, data=request_data, headers=headers ) sigv4.add_auth(request) prepped = request.prepare() diff --git a/litellm/llms/bedrock/count_tokens/handler.py b/litellm/llms/bedrock/count_tokens/handler.py new file mode 100644 index 0000000000..d4355c0c36 --- /dev/null +++ b/litellm/llms/bedrock/count_tokens/handler.py @@ -0,0 +1,123 @@ +""" +AWS Bedrock CountTokens API handler. + +Simplified handler leveraging existing LiteLLM Bedrock infrastructure. +""" + +from typing import Any, Dict + +from fastapi import HTTPException + +import litellm +from litellm._logging import verbose_logger +from litellm.llms.bedrock.count_tokens.transformation import BedrockCountTokensConfig +from litellm.llms.custom_httpx.http_handler import get_async_httpx_client + + +class BedrockCountTokensHandler(BedrockCountTokensConfig): + """ + Simplified handler for AWS Bedrock CountTokens API requests. + + Uses existing LiteLLM infrastructure for authentication and request handling. + """ + + async def handle_count_tokens_request( + self, + request_data: Dict[str, Any], + litellm_params: Dict[str, Any], + resolved_model: str, + ) -> Dict[str, Any]: + """ + Handle a CountTokens request using existing LiteLLM patterns. + + Args: + request_data: The incoming request payload + litellm_params: LiteLLM configuration parameters + resolved_model: The actual model ID resolved from router + + Returns: + Dictionary containing token count response + """ + try: + # Validate the request + self.validate_count_tokens_request(request_data) + + verbose_logger.debug( + f"Processing CountTokens request for resolved model: {resolved_model}" + ) + + # Get AWS region using existing LiteLLM function + aws_region_name = self._get_aws_region_name( + optional_params=litellm_params, + model=resolved_model, + model_id=None, + ) + + verbose_logger.debug(f"Retrieved AWS region: {aws_region_name}") + + # Transform request to Bedrock format (supports both Converse and InvokeModel) + bedrock_request = self.transform_anthropic_to_bedrock_count_tokens( + request_data=request_data + ) + + verbose_logger.debug(f"Transformed request: {bedrock_request}") + + # Get endpoint URL using simplified function + endpoint_url = self.get_bedrock_count_tokens_endpoint( + resolved_model, aws_region_name + ) + + verbose_logger.debug(f"Making request to: {endpoint_url}") + + # Use existing _sign_request method from BaseAWSLLM + headers = {"Content-Type": "application/json"} + signed_headers, signed_body = self._sign_request( + service_name="bedrock", + headers=headers, + optional_params=litellm_params, + request_data=bedrock_request, + api_base=endpoint_url, + model=resolved_model, + ) + + async_client = get_async_httpx_client(llm_provider=litellm.LlmProviders.BEDROCK) + + response = await async_client.post( + endpoint_url, + headers=signed_headers, + data=signed_body, + timeout=30.0, + ) + + verbose_logger.debug(f"Response status: {response.status_code}") + + if response.status_code != 200: + error_text = response.text + verbose_logger.error(f"AWS Bedrock error: {error_text}") + raise HTTPException( + status_code=400, + detail={"error": f"AWS Bedrock error: {error_text}"}, + ) + + bedrock_response = response.json() + + verbose_logger.debug(f"Bedrock response: {bedrock_response}") + + # Transform response back to expected format + final_response = self.transform_bedrock_response_to_anthropic( + bedrock_response + ) + + verbose_logger.debug(f"Final response: {final_response}") + + return final_response + + except HTTPException: + # Re-raise HTTP exceptions as-is + raise + except Exception as e: + verbose_logger.error(f"Error in CountTokens handler: {str(e)}") + raise HTTPException( + status_code=500, + detail={"error": f"CountTokens processing error: {str(e)}"}, + ) diff --git a/litellm/llms/bedrock/count_tokens/transformation.py b/litellm/llms/bedrock/count_tokens/transformation.py new file mode 100644 index 0000000000..d46ed3aa45 --- /dev/null +++ b/litellm/llms/bedrock/count_tokens/transformation.py @@ -0,0 +1,213 @@ +""" +AWS Bedrock CountTokens API transformation logic. + +This module handles the transformation of requests from Anthropic Messages API format +to AWS Bedrock's CountTokens API format and vice versa. +""" + +from typing import Any, Dict, List + +from litellm.llms.bedrock.base_aws_llm import BaseAWSLLM +from litellm.llms.bedrock.common_utils import BedrockModelInfo + + +class BedrockCountTokensConfig(BaseAWSLLM): + """ + Configuration and transformation logic for AWS Bedrock CountTokens API. + + AWS Bedrock CountTokens API Specification: + - Endpoint: POST /model/{modelId}/count-tokens + - Input formats: 'invokeModel' or 'converse' + - Response: {"inputTokens": } + """ + + def _detect_input_type(self, request_data: Dict[str, Any]) -> str: + """ + Detect whether to use 'converse' or 'invokeModel' input format. + + Args: + request_data: The original request data + + Returns: + 'converse' or 'invokeModel' + """ + # If the request has messages in the expected Anthropic format, use converse + if "messages" in request_data and isinstance(request_data["messages"], list): + return "converse" + + # For raw text or other formats, use invokeModel + # This handles cases where the input is prompt-based or already in raw Bedrock format + return "invokeModel" + + def transform_anthropic_to_bedrock_count_tokens( + self, + request_data: Dict[str, Any], + ) -> Dict[str, Any]: + """ + Transform request to Bedrock CountTokens format. + Supports both Converse and InvokeModel input types. + + Input (Anthropic format): + { + "model": "claude-3-5-sonnet", + "messages": [{"role": "user", "content": "Hello!"}] + } + + Output (Bedrock CountTokens format for Converse): + { + "input": { + "converse": { + "messages": [...], + "system": [...] (if present) + } + } + } + + Output (Bedrock CountTokens format for InvokeModel): + { + "input": { + "invokeModel": { + "body": "{...raw model input...}" + } + } + } + """ + input_type = self._detect_input_type(request_data) + + if input_type == "converse": + return self._transform_to_converse_format(request_data.get("messages", [])) + else: + return self._transform_to_invoke_model_format(request_data) + + def _transform_to_converse_format( + self, messages: List[Dict[str, Any]] + ) -> Dict[str, Any]: + """Transform to Converse input format.""" + # Extract system messages if present + system_messages = [] + user_messages = [] + + for message in messages: + if message.get("role") == "system": + system_messages.append({"text": message.get("content", "")}) + else: + # Transform message content to Bedrock format + transformed_message: Dict[str, Any] = {"role": message.get("role"), "content": []} + + # Handle content - ensure it's in the correct array format + content = message.get("content", "") + if isinstance(content, str): + # String content -> convert to text block + transformed_message["content"].append({"text": content}) + elif isinstance(content, list): + # Already in blocks format - use as is + transformed_message["content"] = content + + user_messages.append(transformed_message) + + # Build the converse input format + converse_input = {"messages": user_messages} + + # Add system messages if present + if system_messages: + converse_input["system"] = system_messages + + # Build the complete request + return {"input": {"converse": converse_input}} + + def _transform_to_invoke_model_format( + self, request_data: Dict[str, Any] + ) -> Dict[str, Any]: + """Transform to InvokeModel input format.""" + import json + + # For InvokeModel, we need to provide the raw body that would be sent to the model + # Remove the 'model' field from the body as it's not part of the model input + body_data = {k: v for k, v in request_data.items() if k != "model"} + + return {"input": {"invokeModel": {"body": json.dumps(body_data)}}} + + def get_bedrock_count_tokens_endpoint( + self, model: str, aws_region_name: str + ) -> str: + """ + Construct the AWS Bedrock CountTokens API endpoint using existing LiteLLM functions. + + Args: + model: The resolved model ID from router lookup + aws_region_name: AWS region (e.g., "eu-west-1") + + Returns: + Complete endpoint URL for CountTokens API + """ + # Use existing LiteLLM function to get the base model ID (removes region prefix) + model_id = BedrockModelInfo.get_base_model(model) + + # Remove bedrock/ prefix if present + if model_id.startswith("bedrock/"): + model_id = model_id[8:] # Remove "bedrock/" prefix + + base_url = f"https://bedrock-runtime.{aws_region_name}.amazonaws.com" + endpoint = f"{base_url}/model/{model_id}/count-tokens" + + return endpoint + + def transform_bedrock_response_to_anthropic( + self, bedrock_response: Dict[str, Any] + ) -> Dict[str, Any]: + """ + Transform Bedrock CountTokens response to Anthropic format. + + Input (Bedrock response): + { + "inputTokens": 123 + } + + Output (Anthropic format): + { + "input_tokens": 123 + } + """ + input_tokens = bedrock_response.get("inputTokens", 0) + + return {"input_tokens": input_tokens} + + def validate_count_tokens_request(self, request_data: Dict[str, Any]) -> None: + """ + Validate the incoming count tokens request. + Supports both Converse and InvokeModel input formats. + + Args: + request_data: The request payload + + Raises: + ValueError: If the request is invalid + """ + if not request_data.get("model"): + raise ValueError("model parameter is required") + + input_type = self._detect_input_type(request_data) + + if input_type == "converse": + # Validate Converse format (messages-based) + messages = request_data.get("messages", []) + if not messages: + raise ValueError("messages parameter is required for Converse input") + + if not isinstance(messages, list): + raise ValueError("messages must be a list") + + for i, message in enumerate(messages): + if not isinstance(message, dict): + raise ValueError(f"Message {i} must be a dictionary") + + if "role" not in message: + raise ValueError(f"Message {i} must have a 'role' field") + + if "content" not in message: + raise ValueError(f"Message {i} must have a 'content' field") + else: + # For InvokeModel format, we need at least some content to count tokens + # The content structure varies by model, so we do minimal validation + if len(request_data) <= 1: # Only has 'model' field + raise ValueError("Request must contain content to count tokens") diff --git a/litellm/llms/bedrock/embed/amazon_titan_v2_transformation.py b/litellm/llms/bedrock/embed/amazon_titan_v2_transformation.py index 8056e9e9b2..ff748b58e8 100644 --- a/litellm/llms/bedrock/embed/amazon_titan_v2_transformation.py +++ b/litellm/llms/bedrock/embed/amazon_titan_v2_transformation.py @@ -10,7 +10,7 @@ Docs - https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-tit """ import types -from typing import List, Optional +from typing import List, Optional, Union from litellm.types.llms.bedrock import ( AmazonTitanV2EmbeddingRequest, @@ -30,9 +30,7 @@ class AmazonTitanV2Config: normalize: Optional[bool] = None dimensions: Optional[int] = None - def __init__( - self, normalize: Optional[bool] = None, dimensions: Optional[int] = None - ) -> None: + def __init__(self, normalize: Optional[bool] = None, dimensions: Optional[int] = None) -> None: locals_ = locals().copy() for key, value in locals_.items(): if key != "self" and value is not None: @@ -57,32 +55,56 @@ class AmazonTitanV2Config: } def get_supported_openai_params(self) -> List[str]: - return ["dimensions"] + return ["dimensions", "encoding_format"] - def map_openai_params( - self, non_default_params: dict, optional_params: dict - ) -> dict: + def map_openai_params(self, non_default_params: dict, optional_params: dict) -> dict: for k, v in non_default_params.items(): if k == "dimensions": optional_params["dimensions"] = v + elif k == "encoding_format": + # Map OpenAI encoding_format to AWS embeddingTypes + if v == "float": + optional_params["embeddingTypes"] = ["float"] + elif v == "base64": + # base64 maps to binary format in AWS + optional_params["embeddingTypes"] = ["binary"] + else: + # For any other encoding format, default to float + optional_params["embeddingTypes"] = ["float"] return optional_params - def _transform_request( - self, input: str, inference_params: dict - ) -> AmazonTitanV2EmbeddingRequest: + def _transform_request(self, input: str, inference_params: dict) -> AmazonTitanV2EmbeddingRequest: return AmazonTitanV2EmbeddingRequest(inputText=input, **inference_params) # type: ignore - def _transform_response( - self, response_list: List[dict], model: str - ) -> EmbeddingResponse: + def _transform_response(self, response_list: List[dict], model: str) -> EmbeddingResponse: total_prompt_tokens = 0 transformed_responses: List[Embedding] = [] for index, response in enumerate(response_list): _parsed_response = AmazonTitanV2EmbeddingResponse(**response) # type: ignore + + # According to AWS docs, embeddingsByType is always present + # If binary was requested (encoding_format="base64"), use binary data + # Otherwise, use float data from embeddingsByType or fallback to embedding field + embedding_data: Union[List[float], List[int]] + + if ("embeddingsByType" in _parsed_response and + "binary" in _parsed_response["embeddingsByType"]): + # Use binary data if available (for encoding_format="base64") + embedding_data = _parsed_response["embeddingsByType"]["binary"] + elif ("embeddingsByType" in _parsed_response and + "float" in _parsed_response["embeddingsByType"]): + # Use float data from embeddingsByType + embedding_data = _parsed_response["embeddingsByType"]["float"] + elif "embedding" in _parsed_response: + # Fallback to legacy embedding field + embedding_data = _parsed_response["embedding"] + else: + raise ValueError(f"No embedding data found in response: {response}") + transformed_responses.append( Embedding( - embedding=_parsed_response["embedding"], + embedding=embedding_data, index=index, object="embedding", ) diff --git a/litellm/llms/bedrock/embed/embedding.py b/litellm/llms/bedrock/embed/embedding.py index 0824905f51..d4dd716a1f 100644 --- a/litellm/llms/bedrock/embed/embedding.py +++ b/litellm/llms/bedrock/embed/embedding.py @@ -4,12 +4,13 @@ Handles embedding calls to Bedrock's `/invoke` endpoint import copy import json -from typing import Any, Callable, List, Optional, Tuple, Union import urllib.parse +from typing import Any, Callable, List, Optional, Tuple, Union, get_args import httpx import litellm +from litellm.constants import BEDROCK_EMBEDDING_PROVIDERS_LITERAL from litellm.llms.cohere.embed.handler import embedding as cohere_embedding from litellm.llms.custom_httpx.http_handler import ( AsyncHTTPHandler, @@ -18,7 +19,11 @@ from litellm.llms.custom_httpx.http_handler import ( get_async_httpx_client, ) from litellm.secret_managers.main import get_secret -from litellm.types.llms.bedrock import AmazonEmbeddingRequest, CohereEmbeddingRequest +from litellm.types.llms.bedrock import ( + AmazonEmbeddingRequest, + CohereEmbeddingRequest, + TwelveLabsMarengoEmbeddingRequest, +) from litellm.types.utils import EmbeddingResponse from ..base_aws_llm import BaseAWSLLM @@ -29,6 +34,7 @@ from .amazon_titan_multimodal_transformation import ( ) from .amazon_titan_v2_transformation import AmazonTitanV2Config from .cohere_transformation import BedrockCohereEmbeddingConfig +from .twelvelabs_marengo_transformation import TwelveLabsMarengoEmbeddingConfig class BedrockEmbedding(BaseAWSLLM): @@ -145,6 +151,44 @@ class BedrockEmbedding(BaseAWSLLM): raise BedrockError(status_code=408, message="Timeout error occurred.") return response.json() + + def _transform_response( + self, response_list: List[dict], model: str, provider: BEDROCK_EMBEDDING_PROVIDERS_LITERAL + ) -> Optional[EmbeddingResponse]: + """ + Transforms the response from the Bedrock embedding provider to the OpenAI format. + """ + returned_response: Optional[EmbeddingResponse] = None + if model == "amazon.titan-embed-image-v1": + returned_response = ( + AmazonTitanMultimodalEmbeddingG1Config()._transform_response( + response_list=response_list, model=model + ) + ) + elif model == "amazon.titan-embed-text-v1": + returned_response = AmazonTitanG1Config()._transform_response( + response_list=response_list, model=model + ) + elif model == "amazon.titan-embed-text-v2:0": + returned_response = AmazonTitanV2Config()._transform_response( + response_list=response_list, model=model + ) + elif provider == "twelvelabs": + returned_response = TwelveLabsMarengoEmbeddingConfig()._transform_response( + response_list=response_list, model=model + ) + + + ########################################################## + # Validate returned response + ########################################################## + if returned_response is None: + raise Exception( + "Unable to map model response to known provider format. model={}".format( + model + ) + ) + return returned_response def _single_func_embeddings( self, @@ -157,6 +201,7 @@ class BedrockEmbedding(BaseAWSLLM): aws_region_name: str, model: str, logging_obj: Any, + provider: BEDROCK_EMBEDDING_PROVIDERS_LITERAL, api_key: Optional[str] = None, ): responses: List[dict] = [] @@ -164,16 +209,16 @@ class BedrockEmbedding(BaseAWSLLM): headers = {"Content-Type": "application/json"} if extra_headers is not None: headers = {"Content-Type": "application/json", **extra_headers} - + prepped = self.get_request_headers( - credentials=credentials, - aws_region_name=aws_region_name, - extra_headers=extra_headers, - endpoint_url=endpoint_url, - data=json.dumps(data), - headers=headers, - api_key=api_key - ) + credentials=credentials, + aws_region_name=aws_region_name, + extra_headers=extra_headers, + endpoint_url=endpoint_url, + data=json.dumps(data), + headers=headers, + api_key=api_key, + ) ## LOGGING logging_obj.pre_call( @@ -203,32 +248,9 @@ class BedrockEmbedding(BaseAWSLLM): responses.append(response) - returned_response: Optional[EmbeddingResponse] = None - - ## TRANSFORM RESPONSE ## - if model == "amazon.titan-embed-image-v1": - returned_response = ( - AmazonTitanMultimodalEmbeddingG1Config()._transform_response( - response_list=responses, model=model - ) - ) - elif model == "amazon.titan-embed-text-v1": - returned_response = AmazonTitanG1Config()._transform_response( - response_list=responses, model=model - ) - elif model == "amazon.titan-embed-text-v2:0": - returned_response = AmazonTitanV2Config()._transform_response( - response_list=responses, model=model - ) - - if returned_response is None: - raise Exception( - "Unable to map model response to known provider format. model={}".format( - model - ) - ) - - return returned_response + return self._transform_response( + response_list=responses, model=model, provider=provider + ) async def _async_single_func_embeddings( self, @@ -241,6 +263,7 @@ class BedrockEmbedding(BaseAWSLLM): aws_region_name: str, model: str, logging_obj: Any, + provider: BEDROCK_EMBEDDING_PROVIDERS_LITERAL, api_key: Optional[str] = None, ): responses: List[dict] = [] @@ -248,16 +271,16 @@ class BedrockEmbedding(BaseAWSLLM): headers = {"Content-Type": "application/json"} if extra_headers is not None: headers = {"Content-Type": "application/json", **extra_headers} - + prepped = self.get_request_headers( - credentials=credentials, - aws_region_name=aws_region_name, - extra_headers=extra_headers, - endpoint_url=endpoint_url, - data=json.dumps(data), - headers=headers, - api_key=api_key, - ) + credentials=credentials, + aws_region_name=aws_region_name, + extra_headers=extra_headers, + endpoint_url=endpoint_url, + data=json.dumps(data), + headers=headers, + api_key=api_key, + ) ## LOGGING logging_obj.pre_call( @@ -286,33 +309,10 @@ class BedrockEmbedding(BaseAWSLLM): ) responses.append(response) - - returned_response: Optional[EmbeddingResponse] = None - ## TRANSFORM RESPONSE ## - if model == "amazon.titan-embed-image-v1": - returned_response = ( - AmazonTitanMultimodalEmbeddingG1Config()._transform_response( - response_list=responses, model=model - ) - ) - elif model == "amazon.titan-embed-text-v1": - returned_response = AmazonTitanG1Config()._transform_response( - response_list=responses, model=model - ) - elif model == "amazon.titan-embed-text-v2:0": - returned_response = AmazonTitanV2Config()._transform_response( - response_list=responses, model=model - ) - - if returned_response is None: - raise Exception( - "Unable to map model response to known provider format. model={}".format( - model - ) - ) - - return returned_response + return self._transform_response( + response_list=responses, model=model, provider=provider + ) def embeddings( self, @@ -336,7 +336,7 @@ class BedrockEmbedding(BaseAWSLLM): ### TRANSFORMATION ### unencoded_model_id = ( optional_params.pop("model_id", None) or model - ) # default to model if not passed + ) # default to model if not passed modelId = urllib.parse.quote(unencoded_model_id, safe="") aws_region_name = self._get_aws_region_name( optional_params=optional_params, @@ -344,7 +344,12 @@ class BedrockEmbedding(BaseAWSLLM): model_id=unencoded_model_id, ) - provider = model.split(".")[0] + provider = self.get_bedrock_embedding_provider(model) + if provider is None: + raise Exception( + f"Unable to determine bedrock embedding provider for model: {model}. " + f"Supported providers: {list(get_args(BEDROCK_EMBEDDING_PROVIDERS_LITERAL))}" + ) inference_params = copy.deepcopy(optional_params) inference_params = { k: v @@ -394,6 +399,15 @@ class BedrockEmbedding(BaseAWSLLM): ) ) batch_data.append(transformed_request) + elif provider == "twelvelabs": + batch_data = [] + for i in input: + twelvelabs_request: ( + TwelveLabsMarengoEmbeddingRequest + ) = TwelveLabsMarengoEmbeddingConfig()._transform_request( + input=i, inference_params=inference_params + ) + batch_data.append(twelvelabs_request) ### SET RUNTIME ENDPOINT ### endpoint_url, proxy_endpoint_url = self.get_runtime_endpoint( @@ -422,8 +436,9 @@ class BedrockEmbedding(BaseAWSLLM): model=model, logging_obj=logging_obj, api_key=api_key, + provider=provider, ) - return self._single_func_embeddings( + returned_response = self._single_func_embeddings( client=( client if client is not None and isinstance(client, HTTPHandler) @@ -438,14 +453,18 @@ class BedrockEmbedding(BaseAWSLLM): model=model, logging_obj=logging_obj, api_key=api_key, + provider=provider, ) + if returned_response is None: + raise Exception("Unable to map Bedrock request to provider") + return returned_response elif data is None: raise Exception("Unable to map Bedrock request to provider") headers = {"Content-Type": "application/json"} if extra_headers is not None: headers = {"Content-Type": "application/json", **extra_headers} - + prepped = self.get_request_headers( credentials=credentials, aws_region_name=aws_region_name, diff --git a/litellm/llms/bedrock/embed/twelvelabs_marengo_transformation.py b/litellm/llms/bedrock/embed/twelvelabs_marengo_transformation.py new file mode 100644 index 0000000000..fdad8a6504 --- /dev/null +++ b/litellm/llms/bedrock/embed/twelvelabs_marengo_transformation.py @@ -0,0 +1,140 @@ +""" +Transformation logic from OpenAI /v1/embeddings format to Bedrock TwelveLabs Marengo /invoke format. + +Why separate file? Make it easy to see how transformation works + +Docs - https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-marengo.html +""" + +from typing import List + +from litellm.types.llms.bedrock import ( + TwelveLabsMarengoEmbeddingRequest, +) +from litellm.types.utils import Embedding, EmbeddingResponse, Usage +from litellm.utils import get_base64_str, is_base64_encoded + + +class TwelveLabsMarengoEmbeddingConfig: + """ + Reference - https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-marengo.html + + Supports text and image inputs for Phase 1. + Video and audio support will be added in Phase 2. + """ + + def __init__(self) -> None: + pass + + def get_supported_openai_params(self) -> List[str]: + return ["encoding_format", "textTruncate", "embeddingOption"] + + def map_openai_params( + self, non_default_params: dict, optional_params: dict + ) -> dict: + for k, v in non_default_params.items(): + if k == "encoding_format": + # TwelveLabs doesn't have encoding_format, but we can map it to embeddingOption + if v == "float": + optional_params["embeddingOption"] = ["visual-text", "visual-image"] + elif k == "textTruncate": + optional_params["textTruncate"] = v + elif k == "embeddingOption": + optional_params["embeddingOption"] = v + return optional_params + + def _transform_request( + self, input: str, inference_params: dict + ) -> TwelveLabsMarengoEmbeddingRequest: + """ + Transform OpenAI-style input to TwelveLabs Marengo format. + Phase 1: Supports text and image inputs only. + """ + # Check if input is base64 encoded image + is_encoded = is_base64_encoded(input) + + if is_encoded: + # Image input + b64_str = get_base64_str(input) + transformed_request = TwelveLabsMarengoEmbeddingRequest( + inputType="image", mediaSource={"base64String": b64_str} + ) + else: + # Text input + transformed_request = TwelveLabsMarengoEmbeddingRequest( + inputType="text", inputText=input + ) + + # Set default textTruncate if not specified + if "textTruncate" not in inference_params: + transformed_request["textTruncate"] = "end" + + # Apply any additional inference parameters + for k, v in inference_params.items(): + if k not in [ + "inputType", + "inputText", + "mediaSource", + ]: # Don't override core fields + transformed_request[k] = v # type: ignore + + return transformed_request + + def _transform_response( + self, response_list: List[dict], model: str + ) -> EmbeddingResponse: + """ + Transform TwelveLabs response to OpenAI format. + Handles the actual TwelveLabs response format: {"data": [{"embedding": [...]}]} + """ + embeddings: List[Embedding] = [] + total_tokens = 0 + + for response in response_list: + # TwelveLabs response format has a "data" field containing the embeddings + if "data" in response and isinstance(response["data"], list): + for item in response["data"]: + if "embedding" in item: + # Single embedding response + embedding = Embedding( + embedding=item["embedding"], + index=len(embeddings), + object="embedding", + ) + embeddings.append(embedding) + + # Estimate token count (rough approximation) + if "inputTextTokenCount" in item: + total_tokens += item["inputTextTokenCount"] + else: + # Rough estimate: 1 token per 4 characters for text, or use embedding size + total_tokens += len(item["embedding"]) // 4 + elif "embedding" in response: + # Direct embedding response (fallback for other formats) + embedding = Embedding( + embedding=response["embedding"], + index=len(embeddings), + object="embedding", + ) + embeddings.append(embedding) + + # Estimate token count (rough approximation) + if "inputTextTokenCount" in response: + total_tokens += response["inputTextTokenCount"] + else: + # Rough estimate: 1 token per 4 characters for text + total_tokens += len(response.get("inputText", "")) // 4 + elif "embeddings" in response: + # Multiple embeddings response (from video/audio) + for i, emb in enumerate(response["embeddings"]): + embedding = Embedding( + embedding=emb["embedding"], + index=len(embeddings), + object="embedding", + ) + embeddings.append(embedding) + total_tokens += len(emb["embedding"]) // 4 # Rough estimate + + usage = Usage(prompt_tokens=total_tokens, total_tokens=total_tokens) + + return EmbeddingResponse(data=embeddings, model=model, usage=usage) diff --git a/litellm/llms/bedrock/image/amazon_nova_canvas_transformation.py b/litellm/llms/bedrock/image/amazon_nova_canvas_transformation.py index 3ef7a40e9a..cd33e62af1 100644 --- a/litellm/llms/bedrock/image/amazon_nova_canvas_transformation.py +++ b/litellm/llms/bedrock/image/amazon_nova_canvas_transformation.py @@ -7,12 +7,12 @@ from litellm.types.llms.bedrock import ( AmazonNovaCanvasColorGuidedGenerationParams, AmazonNovaCanvasColorGuidedRequest, AmazonNovaCanvasImageGenerationConfig, + AmazonNovaCanvasInpaintingParams, + AmazonNovaCanvasInpaintingRequest, AmazonNovaCanvasRequestBase, AmazonNovaCanvasTextToImageParams, AmazonNovaCanvasTextToImageRequest, AmazonNovaCanvasTextToImageResponse, - AmazonNovaCanvasInpaintingParams, - AmazonNovaCanvasInpaintingRequest, ) from litellm.types.utils import ImageResponse @@ -67,6 +67,11 @@ class AmazonNovaCanvasConfig: """ task_type = optional_params.pop("taskType", "TEXT_IMAGE") image_generation_config = optional_params.pop("imageGenerationConfig", {}) + + # Extract model_id parameter to prevent "extraneous key" error from Bedrock API + # Following the same pattern as chat completions and embeddings + unencoded_model_id = optional_params.pop("model_id", None) # noqa: F841 + image_generation_config = {**image_generation_config, **optional_params} if task_type == "TEXT_IMAGE": text_to_image_params: Dict[str, Any] = image_generation_config.pop( diff --git a/litellm/llms/bedrock/image/image_handler.py b/litellm/llms/bedrock/image/image_handler.py index 55d94675d1..0103f190d3 100644 --- a/litellm/llms/bedrock/image/image_handler.py +++ b/litellm/llms/bedrock/image/image_handler.py @@ -233,7 +233,17 @@ class BedrockImageGeneration(BaseAWSLLM): Returns: dict: The request body to use for the Bedrock Image Generation API """ - provider = model.split(".")[0] + # Use the existing ARN-aware provider detection method + bedrock_provider = self.get_bedrock_invoke_provider(model) + + if bedrock_provider == "amazon" or bedrock_provider == "nova": + # Handle Amazon Nova Canvas models + provider = "amazon" + elif bedrock_provider == "stability": + provider = "stability" + else: + # Fallback to original logic for backward compatibility + provider = model.split(".")[0] inference_params = copy.deepcopy(optional_params) inference_params.pop( "user", None diff --git a/litellm/llms/cohere/completion/handler.py b/litellm/llms/cohere/completion/handler.py deleted file mode 100644 index 6a77951146..0000000000 --- a/litellm/llms/cohere/completion/handler.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -Cohere /generate API - uses `llm_http_handler.py` to make httpx requests - -Request/Response transformation is handled in `transformation.py` -""" diff --git a/litellm/llms/cohere/completion/transformation.py b/litellm/llms/cohere/completion/transformation.py deleted file mode 100644 index f96ef89d3c..0000000000 --- a/litellm/llms/cohere/completion/transformation.py +++ /dev/null @@ -1,265 +0,0 @@ -import time -from typing import TYPE_CHECKING, Any, AsyncIterator, Iterator, List, Optional, Union - -import httpx - -import litellm -from litellm.litellm_core_utils.prompt_templates.common_utils import ( - convert_content_list_to_str, -) -from litellm.llms.base_llm.chat.transformation import BaseConfig, BaseLLMException -from litellm.types.llms.openai import AllMessageValues -from litellm.types.utils import Choices, Message, ModelResponse, Usage - -from ..common_utils import CohereError -from ..common_utils import ModelResponseIterator as CohereModelResponseIterator -from ..common_utils import validate_environment as cohere_validate_environment - -if TYPE_CHECKING: - from litellm.litellm_core_utils.litellm_logging import Logging as _LiteLLMLoggingObj - - LiteLLMLoggingObj = _LiteLLMLoggingObj -else: - LiteLLMLoggingObj = Any - - -class CohereTextConfig(BaseConfig): - """ - Reference: https://docs.cohere.com/reference/generate - - The class `CohereConfig` provides configuration for the Cohere's API interface. Below are the parameters: - - - `num_generations` (integer): Maximum number of generations returned. Default is 1, with a minimum value of 1 and a maximum value of 5. - - - `max_tokens` (integer): Maximum number of tokens the model will generate as part of the response. Default value is 20. - - - `truncate` (string): Specifies how the API handles inputs longer than maximum token length. Options include NONE, START, END. Default is END. - - - `temperature` (number): A non-negative float controlling the randomness in generation. Lower temperatures result in less random generations. Default is 0.75. - - - `preset` (string): Identifier of a custom preset, a combination of parameters such as prompt, temperature etc. - - - `end_sequences` (array of strings): The generated text gets cut at the beginning of the earliest occurrence of an end sequence, which will be excluded from the text. - - - `stop_sequences` (array of strings): The generated text gets cut at the end of the earliest occurrence of a stop sequence, which will be included in the text. - - - `k` (integer): Limits generation at each step to top `k` most likely tokens. Default is 0. - - - `p` (number): Limits generation at each step to most likely tokens with total probability mass of `p`. Default is 0. - - - `frequency_penalty` (number): Reduces repetitiveness of generated tokens. Higher values apply stronger penalties to previously occurred tokens. - - - `presence_penalty` (number): Reduces repetitiveness of generated tokens. Similar to frequency_penalty, but this penalty applies equally to all tokens that have already appeared. - - - `return_likelihoods` (string): Specifies how and if token likelihoods are returned with the response. Options include GENERATION, ALL and NONE. - - - `logit_bias` (object): Used to prevent the model from generating unwanted tokens or to incentivize it to include desired tokens. e.g. {"hello_world": 1233} - """ - - num_generations: Optional[int] = None - max_tokens: Optional[int] = None - truncate: Optional[str] = None - temperature: Optional[int] = None - preset: Optional[str] = None - end_sequences: Optional[list] = None - stop_sequences: Optional[list] = None - k: Optional[int] = None - p: Optional[int] = None - frequency_penalty: Optional[int] = None - presence_penalty: Optional[int] = None - return_likelihoods: Optional[str] = None - logit_bias: Optional[dict] = None - - def __init__( - self, - num_generations: Optional[int] = None, - max_tokens: Optional[int] = None, - truncate: Optional[str] = None, - temperature: Optional[int] = None, - preset: Optional[str] = None, - end_sequences: Optional[list] = None, - stop_sequences: Optional[list] = None, - k: Optional[int] = None, - p: Optional[int] = None, - frequency_penalty: Optional[int] = None, - presence_penalty: Optional[int] = None, - return_likelihoods: Optional[str] = None, - logit_bias: Optional[dict] = None, - ) -> None: - locals_ = locals().copy() - for key, value in locals_.items(): - if key != "self" and value is not None: - setattr(self.__class__, key, value) - - @classmethod - def get_config(cls): - return super().get_config() - - def validate_environment( - self, - headers: dict, - model: str, - messages: List[AllMessageValues], - optional_params: dict, - litellm_params: dict, - api_key: Optional[str] = None, - api_base: Optional[str] = None, - ) -> dict: - return cohere_validate_environment( - headers=headers, - model=model, - messages=messages, - optional_params=optional_params, - api_key=api_key, - ) - - def get_error_class( - self, error_message: str, status_code: int, headers: Union[dict, httpx.Headers] - ) -> BaseLLMException: - return CohereError(status_code=status_code, message=error_message) - - def get_supported_openai_params(self, model: str) -> List: - return [ - "stream", - "temperature", - "max_tokens", - "logit_bias", - "top_p", - "frequency_penalty", - "presence_penalty", - "stop", - "n", - "extra_headers", - ] - - def map_openai_params( - self, - non_default_params: dict, - optional_params: dict, - model: str, - drop_params: bool, - ) -> dict: - for param, value in non_default_params.items(): - if param == "stream": - optional_params["stream"] = value - elif param == "temperature": - optional_params["temperature"] = value - elif param == "max_tokens": - optional_params["max_tokens"] = value - elif param == "n": - optional_params["num_generations"] = value - elif param == "logit_bias": - optional_params["logit_bias"] = value - elif param == "top_p": - optional_params["p"] = value - elif param == "frequency_penalty": - optional_params["frequency_penalty"] = value - elif param == "presence_penalty": - optional_params["presence_penalty"] = value - elif param == "stop": - optional_params["stop_sequences"] = value - return optional_params - - def transform_request( - self, - model: str, - messages: List[AllMessageValues], - optional_params: dict, - litellm_params: dict, - headers: dict, - ) -> dict: - prompt = " ".join( - convert_content_list_to_str(message=message) for message in messages - ) - - ## Load Config - config = litellm.CohereConfig.get_config() - for k, v in config.items(): - if ( - k not in optional_params - ): # completion(top_k=3) > cohere_config(top_k=3) <- allows for dynamic variables to be passed in - optional_params[k] = v - - ## Handle Tool Calling - if "tools" in optional_params: - _is_function_call = True - tool_calling_system_prompt = self._construct_cohere_tool_for_completion_api( - tools=optional_params["tools"] - ) - optional_params["tools"] = tool_calling_system_prompt - - data = { - "model": model, - "prompt": prompt, - **optional_params, - } - - return data - - def transform_response( - self, - model: str, - raw_response: httpx.Response, - model_response: ModelResponse, - logging_obj: LiteLLMLoggingObj, - request_data: dict, - messages: List[AllMessageValues], - optional_params: dict, - litellm_params: dict, - encoding: Any, - api_key: Optional[str] = None, - json_mode: Optional[bool] = None, - ) -> ModelResponse: - prompt = " ".join( - convert_content_list_to_str(message=message) for message in messages - ) - completion_response = raw_response.json() - choices_list = [] - for idx, item in enumerate(completion_response["generations"]): - if len(item["text"]) > 0: - message_obj = Message(content=item["text"]) - else: - message_obj = Message(content=None) - choice_obj = Choices( - finish_reason=item["finish_reason"], - index=idx + 1, - message=message_obj, - ) - choices_list.append(choice_obj) - model_response.choices = choices_list # type: ignore - - ## CALCULATING USAGE - prompt_tokens = len(encoding.encode(prompt)) - completion_tokens = len( - encoding.encode(model_response["choices"][0]["message"].get("content", "")) - ) - - model_response.created = int(time.time()) - model_response.model = model - usage = Usage( - prompt_tokens=prompt_tokens, - completion_tokens=completion_tokens, - total_tokens=prompt_tokens + completion_tokens, - ) - setattr(model_response, "usage", usage) - return model_response - - def _construct_cohere_tool_for_completion_api( - self, - tools: Optional[List] = None, - ) -> dict: - if tools is None: - tools = [] - return {"tools": tools} - - def get_model_response_iterator( - self, - streaming_response: Union[Iterator[str], AsyncIterator[str], ModelResponse], - sync_stream: bool, - json_mode: Optional[bool] = False, - ): - return CohereModelResponseIterator( - streaming_response=streaming_response, - sync_stream=sync_stream, - json_mode=json_mode, - ) diff --git a/litellm/llms/custom_httpx/llm_http_handler.py b/litellm/llms/custom_httpx/llm_http_handler.py index 8b925a375a..dc64fea1a3 100644 --- a/litellm/llms/custom_httpx/llm_http_handler.py +++ b/litellm/llms/custom_httpx/llm_http_handler.py @@ -2520,6 +2520,95 @@ class BaseLLMHTTPHandler: litellm_params=litellm_params_with_request, ) + def retrieve_batch( + self, + batch_id: str, + litellm_params: dict, + provider_config: "BaseBatchesConfig", + headers: dict, + api_base: Optional[str], + api_key: Optional[str], + logging_obj: "LiteLLMLoggingObj", + _is_async: bool = False, + client: Optional[Union["HTTPHandler", "AsyncHTTPHandler"]] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + model: Optional[str] = None, + ) -> Union["LiteLLMBatch", Coroutine[Any, Any, "LiteLLMBatch"]]: + """ + Retrieve a batch using provider-specific configuration. + """ + # Transform the request using provider config + transformed_request = provider_config.transform_retrieve_batch_request( + batch_id=batch_id, + optional_params=litellm_params, + litellm_params=litellm_params, + ) + + if _is_async: + return self.async_retrieve_batch( + transformed_request=transformed_request, + litellm_params=litellm_params, + provider_config=provider_config, + headers=headers, + api_base=api_base, + logging_obj=logging_obj, + client=client, + timeout=timeout, + batch_id=batch_id, + model=model, + ) + + if client is None or not isinstance(client, HTTPHandler): + sync_httpx_client = _get_httpx_client() + else: + sync_httpx_client = client + + try: + if ( + isinstance(transformed_request, dict) + and "method" in transformed_request + ): + # Handle pre-signed requests (e.g., from Bedrock with AWS auth) + method = transformed_request["method"].lower() + request_kwargs = { + "url": transformed_request["url"], + "headers": transformed_request["headers"], + } + + # Only add data for non-GET requests + if method != "get" and transformed_request.get("data") is not None: + request_kwargs["data"] = transformed_request["data"] + + batch_response = getattr(sync_httpx_client, method)(**request_kwargs) + elif isinstance(transformed_request, dict) and api_base: + # For other providers that use JSON requests + batch_response = sync_httpx_client.get( + url=api_base, + headers={**headers, "Content-Type": "application/json"}, + params=transformed_request, + ) + else: + # Handle other request types if needed + if not api_base: + raise ValueError("api_base is required for non-pre-signed requests") + batch_response = sync_httpx_client.get( + url=api_base, + headers=headers, + ) + except Exception as e: + verbose_logger.exception(f"Error retrieving batch: {e}") + raise self._handle_error( + e=e, + provider_config=provider_config, + ) + + return provider_config.transform_retrieve_batch_response( + model=model, + raw_response=batch_response, + logging_obj=logging_obj, + litellm_params=litellm_params, + ) + async def async_create_batch( self, transformed_request: Union[bytes, str, dict], @@ -2606,6 +2695,89 @@ class BaseLLMHTTPHandler: litellm_params=litellm_params_with_request, ) + async def async_retrieve_batch( + self, + transformed_request: Union[bytes, str, dict], + litellm_params: dict, + provider_config: "BaseBatchesConfig", + headers: dict, + api_base: Optional[str], + logging_obj: "LiteLLMLoggingObj", + client: Optional[Union["HTTPHandler", "AsyncHTTPHandler"]] = None, + timeout: Optional[Union[float, httpx.Timeout]] = None, + batch_id: Optional[str] = None, + model: Optional[str] = None, + ): + """ + Async version of retrieve_batch + """ + if client is None or not isinstance(client, AsyncHTTPHandler): + async_httpx_client = get_async_httpx_client( + llm_provider=provider_config.custom_llm_provider + ) + else: + async_httpx_client = client + + ######################################################### + # Debug Logging + ######################################################### + logging_obj.pre_call( + input="", + api_key="", + additional_args={ + "complete_input_dict": transformed_request, + "api_base": api_base, + "headers": headers, + "batch_id": batch_id, + }, + ) + + try: + if ( + isinstance(transformed_request, dict) + and "method" in transformed_request + ): + # Handle pre-signed requests (e.g., from Bedrock with AWS auth) + method = transformed_request["method"].lower() + request_kwargs = { + "url": transformed_request["url"], + "headers": transformed_request["headers"], + } + + # Only add data for non-GET requests + if method != "get" and transformed_request.get("data") is not None: + request_kwargs["data"] = transformed_request["data"] + + batch_response = await getattr(async_httpx_client, method)(**request_kwargs) + elif isinstance(transformed_request, dict) and api_base: + # For other providers that use JSON requests + batch_response = await async_httpx_client.get( + url=api_base, + headers={**headers, "Content-Type": "application/json"}, + params=transformed_request, + ) + else: + # Handle other request types if needed + if not api_base: + raise ValueError("api_base is required for non-pre-signed requests") + batch_response = await async_httpx_client.get( + url=api_base, + headers=headers, + ) + except Exception as e: + verbose_logger.exception(f"Error retrieving batch: {e}") + raise self._handle_error( + e=e, + provider_config=provider_config, + ) + + return provider_config.transform_retrieve_batch_response( + model=model, + raw_response=batch_response, + logging_obj=logging_obj, + litellm_params=litellm_params, + ) + def cancel_response_api_handler( self, response_id: str, diff --git a/litellm/llms/gemini/google_genai/transformation.py b/litellm/llms/gemini/google_genai/transformation.py index 28142f7273..f38c772e35 100644 --- a/litellm/llms/gemini/google_genai/transformation.py +++ b/litellm/llms/gemini/google_genai/transformation.py @@ -121,7 +121,8 @@ class GoogleGenAIConfig(BaseGoogleGenAIGenerateContentConfig, VertexLLM): default_headers = { "Content-Type": "application/json", } - gemini_api_key = self._get_google_ai_studio_api_key(dict(litellm_params or {})) + # Use the passed api_key first, then fall back to litellm_params and environment + gemini_api_key = api_key or self._get_google_ai_studio_api_key(dict(litellm_params or {})) if gemini_api_key is not None: default_headers[self.XGOOGLE_API_KEY] = gemini_api_key if headers is not None: diff --git a/litellm/llms/gemini/image_generation/transformation.py b/litellm/llms/gemini/image_generation/transformation.py index e57364fd28..f136bd0a40 100644 --- a/litellm/llms/gemini/image_generation/transformation.py +++ b/litellm/llms/gemini/image_generation/transformation.py @@ -85,17 +85,25 @@ class GoogleImageGenConfig(BaseImageGenerationConfig): ) -> str: """ Get the complete url for the request - - Google AI API format: https://generativelanguage.googleapis.com/v1beta/models/{model}:predict + + Gemini 2.5 Flash Image Preview: :generateContent + Other Imagen models: :predict """ complete_url: str = ( - api_base - or get_secret_str("GEMINI_API_BASE") + api_base + or get_secret_str("GEMINI_API_BASE") or self.DEFAULT_BASE_URL ) complete_url = complete_url.rstrip("/") - complete_url = f"{complete_url}/models/{model}:predict" + + # Gemini 2.5 Flash Image Preview uses generateContent endpoint + if "2.5-flash-image-preview" in model: + complete_url = f"{complete_url}/models/{model}:generateContent" + else: + # All other Imagen models use predict endpoint + complete_url = f"{complete_url}/models/{model}:predict" + return complete_url def validate_environment( @@ -128,35 +136,52 @@ class GoogleImageGenConfig(BaseImageGenerationConfig): headers: dict, ) -> dict: """ - Transform the image generation request to Google AI Imagen format - - Google AI API format: + Transform the image generation request to Gemini format + + For Gemini 2.5 Flash Image Preview, use the standard Gemini format with response_modalities: { - "instances": [ + "contents": [ { - "prompt": "Robot holding a red skateboard" + "parts": [ + {"text": "Generate an image of..."} + ] } ], - "parameters": { - "sampleCount": 4, - "aspectRatio": "1:1", - "personGeneration": "allow_adult" + "generationConfig": { + "response_modalities": ["IMAGE", "TEXT"] } } """ - from litellm.types.llms.gemini import ( - GeminiImageGenerationInstance, - GeminiImageGenerationParameters, - ) - request_body: GeminiImageGenerationRequest = GeminiImageGenerationRequest( - instances=[ - GeminiImageGenerationInstance( - prompt=prompt - ) - ], - parameters=GeminiImageGenerationParameters(**optional_params) - ) - return request_body.model_dump(exclude_none=True) + # For Gemini 2.5 Flash Image Preview, use standard Gemini format + if "2.5-flash-image-preview" in model: + request_body: dict = { + "contents": [ + { + "parts": [ + {"text": prompt} + ] + } + ], + "generationConfig": { + "response_modalities": ["IMAGE", "TEXT"] + } + } + return request_body + else: + # For other Imagen models, use the original Imagen format + from litellm.types.llms.gemini import ( + GeminiImageGenerationInstance, + GeminiImageGenerationParameters, + ) + request_body_obj: GeminiImageGenerationRequest = GeminiImageGenerationRequest( + instances=[ + GeminiImageGenerationInstance( + prompt=prompt + ) + ], + parameters=GeminiImageGenerationParameters(**optional_params) + ) + return request_body_obj.model_dump(exclude_none=True) def transform_image_generation_response( self, @@ -185,14 +210,30 @@ class GoogleImageGenConfig(BaseImageGenerationConfig): if not model_response.data: model_response.data = [] - - # Google AI returns predictions with generated images - predictions = response_data.get("predictions", []) - for prediction in predictions: - # Google AI returns base64 encoded images in the prediction - model_response.data.append(ImageObject( - b64_json=prediction.get("bytesBase64Encoded", None), - url=None, # Google AI returns base64, not URLs - )) - + + # Handle different response formats based on model + if "2.5-flash-image-preview" in model: + # Gemini 2.5 Flash Image Preview returns in candidates format + candidates = response_data.get("candidates", []) + for candidate in candidates: + content = candidate.get("content", {}) + parts = content.get("parts", []) + for part in parts: + # Look for inlineData with image + if "inlineData" in part: + inline_data = part["inlineData"] + if "data" in inline_data: + model_response.data.append(ImageObject( + b64_json=inline_data["data"], + url=None, + )) + else: + # Original Imagen format - predictions with generated images + predictions = response_data.get("predictions", []) + for prediction in predictions: + # Google AI returns base64 encoded images in the prediction + model_response.data.append(ImageObject( + b64_json=prediction.get("bytesBase64Encoded", None), + url=None, # Google AI returns base64, not URLs + )) return model_response \ No newline at end of file diff --git a/litellm/llms/oci/chat/transformation.py b/litellm/llms/oci/chat/transformation.py index 3be373ca5e..6755cab22e 100644 --- a/litellm/llms/oci/chat/transformation.py +++ b/litellm/llms/oci/chat/transformation.py @@ -378,7 +378,7 @@ class OCIChatConfig(BaseConfig): or not oci_compartment_id ): raise Exception( - "Missing required parameters: oci_user, oci_fingerprint, oci_tenancy, " + "Missing required parameters: oci_user, oci_fingerprint, oci_tenancy, oci_compartment_id " "and at least one of oci_key or oci_key_file." ) diff --git a/litellm/llms/vertex_ai/batches/transformation.py b/litellm/llms/vertex_ai/batches/transformation.py index a97f312d48..5b6d21b594 100644 --- a/litellm/llms/vertex_ai/batches/transformation.py +++ b/litellm/llms/vertex_ai/batches/transformation.py @@ -114,7 +114,14 @@ class VertexAIBatchTransformation: """ Gets the output file id from the Vertex AI Batch response """ - output_file_id: str = "" + + output_file_id: str = ( + response.get("outputInfo", OutputInfo()).get("gcsOutputDirectory", "") + + "/predictions.jsonl" + ) + if output_file_id != "/predictions.jsonl": + return output_file_id + output_config = response.get("outputConfig") if output_config is None: return output_file_id diff --git a/litellm/llms/vertex_ai/files/handler.py b/litellm/llms/vertex_ai/files/handler.py index a666a2c37f..6636bccd6a 100644 --- a/litellm/llms/vertex_ai/files/handler.py +++ b/litellm/llms/vertex_ai/files/handler.py @@ -1,5 +1,6 @@ import asyncio -from typing import Any, Coroutine, Optional, Union +import urllib.parse +from typing import Any, Coroutine, Optional, Tuple, Union import httpx @@ -9,7 +10,12 @@ from litellm.integrations.gcs_bucket.gcs_bucket_base import ( GCSLoggingConfig, ) from litellm.llms.custom_httpx.http_handler import get_async_httpx_client -from litellm.types.llms.openai import CreateFileRequest, OpenAIFileObject +from litellm.types.llms.openai import ( + CreateFileRequest, + FileContentRequest, + HttpxBinaryResponseContent, + OpenAIFileObject, +) from litellm.types.llms.vertex_ai import VERTEX_CREDENTIALS_TYPES from .transformation import VertexAIJsonlFilesTransformation @@ -105,3 +111,136 @@ class VertexAIFilesHandler(GCSBucketBase): max_retries=max_retries, ) ) + + def _extract_bucket_and_object_from_file_id(self, file_id: str) -> Tuple[str, str]: + """ + Extract bucket name and object path from URL-encoded file_id. + + Expected format: gs%3A%2F%2Fbucket-name%2Fpath%2Fto%2Ffile + Which decodes to: gs://bucket-name/path/to/file + + Returns: + tuple: (bucket_name, url_encoded_object_path) + - bucket_name: "bucket-name" + - url_encoded_object_path: "path%2Fto%2Ffile" + """ + decoded_path = urllib.parse.unquote(file_id) + + if decoded_path.startswith("gs://"): + full_path = decoded_path[5:] # Remove 'gs://' prefix + else: + full_path = decoded_path + + if "/" in full_path: + bucket_name, object_path = full_path.split("/", 1) + else: + bucket_name = full_path + object_path = "" + + encoded_object_path = urllib.parse.quote(object_path, safe="") + + return bucket_name, encoded_object_path + + async def afile_content( + self, + file_content_request: FileContentRequest, + vertex_credentials: Optional[VERTEX_CREDENTIALS_TYPES], + vertex_project: Optional[str], + vertex_location: Optional[str], + timeout: Union[float, httpx.Timeout], + max_retries: Optional[int], + ) -> HttpxBinaryResponseContent: + """ + Download file content from GCS bucket for VertexAI files. + + Args: + file_content_request: Contains file_id (URL-encoded GCS path) + vertex_credentials: VertexAI credentials + vertex_project: VertexAI project ID + vertex_location: VertexAI location + timeout: Request timeout + max_retries: Max retry attempts + + Returns: + HttpxBinaryResponseContent: Binary content wrapped in compatible response format + """ + file_id = file_content_request.get("file_id") + if not file_id: + raise ValueError("file_id is required in file_content_request") + + bucket_name, encoded_object_path = self._extract_bucket_and_object_from_file_id( + file_id + ) + + download_kwargs = { + "standard_callback_dynamic_params": {"gcs_bucket_name": bucket_name} + } + + file_content = await self.download_gcs_object( + object_name=encoded_object_path, **download_kwargs + ) + + if file_content is None: + decoded_path = urllib.parse.unquote(file_id) + raise ValueError(f"Failed to download file from GCS: {decoded_path}") + + decoded_path = urllib.parse.unquote(file_id) + mock_response = httpx.Response( + status_code=200, + content=file_content, + headers={"content-type": "application/octet-stream"}, + request=httpx.Request(method="GET", url=decoded_path), + ) + + return HttpxBinaryResponseContent(response=mock_response) + + def file_content( + self, + _is_async: bool, + file_content_request: FileContentRequest, + api_base: Optional[str], + vertex_credentials: Optional[VERTEX_CREDENTIALS_TYPES], + vertex_project: Optional[str], + vertex_location: Optional[str], + timeout: Union[float, httpx.Timeout], + max_retries: Optional[int], + ) -> Union[ + HttpxBinaryResponseContent, Coroutine[Any, Any, HttpxBinaryResponseContent] + ]: + """ + Download file content from GCS bucket for VertexAI files. + Supports both sync and async operations. + + Args: + _is_async: Whether to run asynchronously + file_content_request: Contains file_id (URL-encoded GCS path) + api_base: API base (unused for GCS operations) + vertex_credentials: VertexAI credentials + vertex_project: VertexAI project ID + vertex_location: VertexAI location + timeout: Request timeout + max_retries: Max retry attempts + + Returns: + HttpxBinaryResponseContent or Coroutine: Binary content wrapped in compatible response format + """ + if _is_async: + return self.afile_content( + file_content_request=file_content_request, + vertex_credentials=vertex_credentials, + vertex_project=vertex_project, + vertex_location=vertex_location, + timeout=timeout, + max_retries=max_retries, + ) + else: + return asyncio.run( + self.afile_content( + file_content_request=file_content_request, + vertex_credentials=vertex_credentials, + vertex_project=vertex_project, + vertex_location=vertex_location, + timeout=timeout, + max_retries=max_retries, + ) + ) diff --git a/litellm/llms/vertex_ai/files/transformation.py b/litellm/llms/vertex_ai/files/transformation.py index 1066a8f036..f2e5a5b5d2 100644 --- a/litellm/llms/vertex_ai/files/transformation.py +++ b/litellm/llms/vertex_ai/files/transformation.py @@ -261,10 +261,10 @@ class VertexAIFilesConfig(VertexBase, BaseFilesConfig): raise ValueError("file is required") extracted_file_data = extract_file_data(file_data) extracted_file_data_content = extracted_file_data.get("content") - + if extracted_file_data_content is None: raise ValueError("file content is required") - + if FilesAPIUtils.is_batch_jsonl_file( create_file_data=create_file_data, extracted_file_data=extracted_file_data, @@ -283,7 +283,7 @@ class VertexAIFilesConfig(VertexBase, BaseFilesConfig): openai_jsonl_content ) ) - return json.dumps(vertex_jsonl_content) + return "\n".join(json.dumps(item) for item in vertex_jsonl_content) elif isinstance(extracted_file_data_content, bytes): return extracted_file_data_content else: diff --git a/litellm/llms/vertex_ai/vertex_llm_base.py b/litellm/llms/vertex_ai/vertex_llm_base.py index 76998e7669..0f0bc776cc 100644 --- a/litellm/llms/vertex_ai/vertex_llm_base.py +++ b/litellm/llms/vertex_ai/vertex_llm_base.py @@ -239,6 +239,7 @@ class VertexBase: stream=stream, auth_header=None, url=default_api_base, + model=model, ) return api_base @@ -292,6 +293,7 @@ class VertexBase: stream: Optional[bool], auth_header: Optional[str], url: str, + model: Optional[str] = None, ) -> Tuple[Optional[str], str]: """ for cloudflare ai gateway - https://github.com/BerriAI/litellm/issues/4317 @@ -301,7 +303,12 @@ class VertexBase: """ if api_base: if custom_llm_provider == "gemini": - url = "{}:{}".format(api_base, endpoint) + # For Gemini (Google AI Studio), construct the full path like other providers + if model is None: + raise ValueError( + "Model parameter is required for Gemini custom API base URLs" + ) + url = "{}/models/{}:{}".format(api_base, model, endpoint) if gemini_api_key is None: raise ValueError( "Missing gemini_api_key, please set `GEMINI_API_KEY`" @@ -373,6 +380,7 @@ class VertexBase: endpoint=endpoint, stream=stream, url=url, + model=model, ) def _handle_reauthentication( @@ -384,19 +392,19 @@ class VertexBase: ) -> Tuple[str, str]: """ Handle reauthentication when credentials refresh fails. - + This method clears the cached credentials and attempts to reload them once. It should only be called when "Reauthentication is needed" error occurs. - + Args: credentials: The original credentials project_id: The project ID credential_cache_key: The cache key to clear error: The original error that triggered reauthentication - + Returns: Tuple of (access_token, project_id) - + Raises: The original error if reauthentication fails """ @@ -404,11 +412,11 @@ class VertexBase: f"Handling reauthentication for project_id: {project_id}. " f"Clearing cache and retrying once." ) - + # Clear the cached credentials if credential_cache_key in self._credentials_project_mapping: del self._credentials_project_mapping[credential_cache_key] - + # Retry once with _retry_reauth=True to prevent infinite recursion try: return self.get_access_token( @@ -438,12 +446,12 @@ class VertexBase: 3. Check if loaded credentials have expired 4. If expired, refresh credentials 5. Return access token and project id - + Args: credentials: The credentials to use for authentication project_id: The Google Cloud project ID _retry_reauth: Internal flag to prevent infinite recursion during reauthentication - + Returns: Tuple of (access_token, project_id) """ diff --git a/litellm/main.py b/litellm/main.py index 70dbdde887..5493c7e34e 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -116,6 +116,7 @@ from litellm.utils import ( from ._logging import verbose_logger from .caching.caching import disable_cache, enable_cache, update_cache +from .litellm_core_utils.core_helpers import safe_deep_copy from .litellm_core_utils.fallback_utils import ( async_completion_with_fallbacks, completion_with_fallbacks, @@ -1003,7 +1004,15 @@ def completion( # type: ignore # noqa: PLR0915 provider_specific_header = cast( Optional[ProviderSpecificHeader], kwargs.get("provider_specific_header", None) ) - headers = kwargs.get("headers", None) or extra_headers + # Properly merge headers with priority: request headers > extra_headers > global litellm.headers + headers = {} + if litellm.headers is not None and isinstance(litellm.headers, dict): + headers.update(litellm.headers) + if extra_headers is not None and isinstance(extra_headers, dict): + headers.update(extra_headers) + request_headers = kwargs.get("headers", None) + if request_headers is not None and isinstance(request_headers, dict): + headers.update(request_headers) ensure_alternating_roles: Optional[bool] = kwargs.get( "ensure_alternating_roles", None @@ -1014,10 +1023,6 @@ def completion( # type: ignore # noqa: PLR0915 assistant_continue_message: Optional[ChatCompletionAssistantMessage] = kwargs.get( "assistant_continue_message", None ) - if headers is None: - headers = {} - if extra_headers is not None: - headers.update(extra_headers) num_retries = kwargs.get( "num_retries", None ) ## alt. param for 'max_retries'. Use this to pass retries w/ instructor. @@ -1074,7 +1079,6 @@ def completion( # type: ignore # noqa: PLR0915 prompt_id=prompt_id, non_default_params=non_default_params ) ): - ( model, messages, @@ -1427,8 +1431,7 @@ def completion( # type: ignore # noqa: PLR0915 "azure_ad_token_provider", None ) - headers = headers or litellm.headers - + # Use the consolidated headers that were already merged at the top of the function if extra_headers is not None: optional_params["extra_headers"] = extra_headers if max_retries is not None: @@ -1693,8 +1696,7 @@ def completion( # type: ignore # noqa: PLR0915 or get_secret("OPENAI_API_KEY") ) - headers = headers or litellm.headers - + # Use the consolidated headers that were already merged at the top of the function if extra_headers is not None: optional_params["extra_headers"] = extra_headers @@ -2032,7 +2034,6 @@ def completion( # type: ignore # noqa: PLR0915 try: if use_base_llm_http_handler: - response = base_llm_http_handler.completion( model=model, messages=messages, @@ -2395,47 +2396,7 @@ def completion( # type: ignore # noqa: PLR0915 ) return response response = model_response - elif custom_llm_provider == "cohere": - cohere_key = ( - api_key - or litellm.cohere_key - or get_secret("COHERE_API_KEY") - or get_secret("CO_API_KEY") - or litellm.api_key - ) - - api_base = ( - api_base - or litellm.api_base - or get_secret("COHERE_API_BASE") - or "https://api.cohere.ai/v1/generate" - ) - - headers = headers or litellm.headers or {} - if headers is None: - headers = {} - - if extra_headers is not None: - headers.update(extra_headers) - - response = base_llm_http_handler.completion( - model=model, - stream=stream, - messages=messages, - acompletion=acompletion, - api_base=api_base, - model_response=model_response, - optional_params=optional_params, - litellm_params=litellm_params, - custom_llm_provider="cohere", - timeout=timeout, - headers=headers, - encoding=encoding, - api_key=cohere_key, - logging_obj=logging, # model call logging done inside the class as we make need to modify I/O to fit aleph alpha's requirements - client=client, - ) - elif custom_llm_provider == "cohere_chat": + elif custom_llm_provider == "cohere_chat" or custom_llm_provider == "cohere": cohere_key = ( api_key or litellm.cohere_key @@ -2451,12 +2412,8 @@ def completion( # type: ignore # noqa: PLR0915 or "https://api.cohere.ai/v1/chat" ) - headers = headers or litellm.headers or {} - if headers is None: - headers = {} - - if extra_headers is not None: - headers.update(extra_headers) + # Use the consolidated headers that were already merged at the top of the function + # No need for additional merging here as it's already done response = base_llm_http_handler.completion( model=model, @@ -2552,15 +2509,10 @@ def completion( # type: ignore # noqa: PLR0915 ) elif custom_llm_provider == "compactifai": api_key = ( - api_key - or get_secret_str("COMPACTIFAI_API_KEY") - or litellm.api_key + api_key or get_secret_str("COMPACTIFAI_API_KEY") or litellm.api_key ) - api_base = ( - api_base - or "https://api.compactif.ai/v1" - ) + api_base = api_base or "https://api.compactif.ai/v1" ## COMPLETION CALL response = base_llm_http_handler.completion( @@ -2848,8 +2800,7 @@ def completion( # type: ignore # noqa: PLR0915 ) api_base = api_base or litellm.api_base or get_secret("GEMINI_API_BASE") - - new_params = deepcopy(optional_params) + new_params = safe_deep_copy(optional_params or {}) response = vertex_chat_completion.completion( # type: ignore model=model, messages=messages, @@ -2893,7 +2844,7 @@ def completion( # type: ignore # noqa: PLR0915 api_base = api_base or litellm.api_base or get_secret("VERTEXAI_API_BASE") - new_params = deepcopy(optional_params) + new_params = safe_deep_copy(optional_params or {}) if vertex_partner_models_chat_completion.is_vertex_partner_model(model): model_response = vertex_partner_models_chat_completion.completion( model=model, @@ -3147,9 +3098,9 @@ def completion( # type: ignore # noqa: PLR0915 "aws_region_name" not in optional_params or optional_params["aws_region_name"] is None ): - optional_params["aws_region_name"] = ( - aws_bedrock_client.meta.region_name - ) + optional_params[ + "aws_region_name" + ] = aws_bedrock_client.meta.region_name bedrock_route = BedrockModelInfo.get_bedrock_route(model) if bedrock_route == "converse": @@ -3491,7 +3442,6 @@ def completion( # type: ignore # noqa: PLR0915 ) raise e elif custom_llm_provider == "gradient_ai": - api_base = litellm.api_base or api_base response = base_llm_http_handler.completion( model=model, @@ -3851,7 +3801,7 @@ def embedding( *, aembedding: Literal[True], **kwargs, -) -> Coroutine[Any, Any, EmbeddingResponse]: +) -> Coroutine[Any, Any, EmbeddingResponse]: ... @@ -3877,7 +3827,7 @@ def embedding( *, aembedding: Literal[False] = False, **kwargs, -) -> EmbeddingResponse: +) -> EmbeddingResponse: ... # fmt: on @@ -4188,10 +4138,8 @@ def embedding( # noqa: PLR0915 or litellm.api_key ) - if extra_headers is not None and isinstance(extra_headers, dict): - headers = extra_headers - else: - headers = {} + # Use the consolidated headers that were already merged at the top of the function + # No need for additional merging here as it's already done response = base_llm_http_handler.embedding( model=model, @@ -5151,9 +5099,9 @@ def adapter_completion( new_kwargs = translation_obj.translate_completion_input_params(kwargs=kwargs) response: Union[ModelResponse, CustomStreamWrapper] = completion(**new_kwargs) # type: ignore - translated_response: Optional[Union[BaseModel, AdapterCompletionStreamWrapper]] = ( - None - ) + translated_response: Optional[ + Union[BaseModel, AdapterCompletionStreamWrapper] + ] = None if isinstance(response, ModelResponse): translated_response = translation_obj.translate_completion_output_params( response=response @@ -6141,9 +6089,9 @@ def stream_chunk_builder( # noqa: PLR0915 ] if len(content_chunks) > 0: - response["choices"][0]["message"]["content"] = ( - processor.get_combined_content(content_chunks) - ) + response["choices"][0]["message"][ + "content" + ] = processor.get_combined_content(content_chunks) thinking_blocks = [ chunk @@ -6154,9 +6102,9 @@ def stream_chunk_builder( # noqa: PLR0915 ] if len(thinking_blocks) > 0: - response["choices"][0]["message"]["thinking_blocks"] = ( - processor.get_combined_thinking_content(thinking_blocks) - ) + response["choices"][0]["message"][ + "thinking_blocks" + ] = processor.get_combined_thinking_content(thinking_blocks) reasoning_chunks = [ chunk @@ -6167,9 +6115,9 @@ def stream_chunk_builder( # noqa: PLR0915 ] if len(reasoning_chunks) > 0: - response["choices"][0]["message"]["reasoning_content"] = ( - processor.get_combined_reasoning_content(reasoning_chunks) - ) + response["choices"][0]["message"][ + "reasoning_content" + ] = processor.get_combined_reasoning_content(reasoning_chunks) audio_chunks = [ chunk diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 96e19d022c..43ea3af320 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1,2570 +1,881 @@ { - "sample_spec": { - "max_tokens": "LEGACY parameter. set to max_output_tokens if provider specifies it. IF not set to max_input_tokens, if provider specifies it.", - "max_input_tokens": "max input tokens, if the provider specifies it. if not default to max_tokens", - "max_output_tokens": "max output tokens, if the provider specifies it. if not default to max_tokens", - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "output_cost_per_reasoning_token": 0.0, - "input_cost_per_audio_token": 0.0, - "litellm_provider": "one of https://docs.litellm.ai/docs/providers", - "mode": "one of: chat, embedding, completion, image_generation, audio_transcription, audio_speech, image_generation, moderation, rerank", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_system_messages": true, - "supports_reasoning": true, - "supports_web_search": true, - "search_context_cost_per_query": { - "search_context_size_low": 0.0, - "search_context_size_medium": 0.0, - "search_context_size_high": 0.0 - }, - "file_search_cost_per_1k_calls": 0.0, - "file_search_cost_per_gb_per_day": 0.0, - "vector_store_cost_per_gb_per_day": 0.0, - "computer_use_input_cost_per_1k_tokens": 0.0, - "computer_use_output_cost_per_1k_tokens": 0.0, - "code_interpreter_cost_per_session": 0.0, - "supported_regions": [ - "global", - "us-west-2", - "eu-west-1", - "ap-southeast-1", - "ap-northeast-1" - ], - "deprecation_date": "date when the model becomes deprecated in the format YYYY-MM-DD" - }, - "omni-moderation-latest": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 0, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "moderation" - }, - "omni-moderation-latest-intents": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 0, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "moderation" - }, - "omni-moderation-2024-09-26": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 0, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "moderation" - }, - "gpt-4": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4.1": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 4e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "gpt-4.1-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 4e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "gpt-4.1-mini": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "input_cost_per_token_batches": 2e-07, - "output_cost_per_token_batches": 8e-07, - "cache_read_input_token_cost": 1e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "gpt-4.1-mini-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "input_cost_per_token_batches": 2e-07, - "output_cost_per_token_batches": 8e-07, - "cache_read_input_token_cost": 1e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "gpt-4.1-nano": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "input_cost_per_token_batches": 5e-08, - "output_cost_per_token_batches": 2e-07, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "gpt-4.1-nano-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "input_cost_per_token_batches": 5e-08, - "output_cost_per_token_batches": 2e-07, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "gpt-4o": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "input_cost_per_token_batches": 1.25e-06, - "output_cost_per_token_batches": 5e-06, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "watsonx/ibm/granite-3-8b-instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 0.0002, - "output_cost_per_token": 0.0002, - "litellm_provider": "watsonx", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_parallel_function_calling": false, - "supports_vision": false, - "supports_audio_input": false, - "supports_audio_output": false, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_system_messages": true - }, - "watsonx/mistralai/mistral-large": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 16384, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "watsonx", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_parallel_function_calling": false, - "supports_vision": false, - "supports_audio_input": false, - "supports_audio_output": false, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_system_messages": true - }, - "gpt-4o-search-preview-2025-03-11": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "input_cost_per_token_batches": 1.25e-06, - "output_cost_per_token_batches": 5e-06, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-search-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "input_cost_per_token_batches": 1.25e-06, - "output_cost_per_token_batches": 5e-06, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_web_search": true, - "search_context_cost_per_query": { - "search_context_size_low": 0.03, - "search_context_size_medium": 0.035, - "search_context_size_high": 0.05 - } - }, - "gpt-4.5-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 7.5e-05, - "output_cost_per_token": 0.00015, - "input_cost_per_token_batches": 3.75e-05, - "output_cost_per_token_batches": 7.5e-05, - "cache_read_input_token_cost": 3.75e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4.5-preview-2025-02-27": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 7.5e-05, - "output_cost_per_token": 0.00015, - "input_cost_per_token_batches": 3.75e-05, - "output_cost_per_token_batches": 7.5e-05, - "cache_read_input_token_cost": 3.75e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "deprecation_date": "2025-07-14" - }, - "gpt-4o-audio-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 0.0001, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 0.0002, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-audio-preview-2024-12-17": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 4e-05, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-audio-preview-2024-10-01": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 0.0001, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 0.0002, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-audio-preview-2025-06-03": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 4e-05, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini-audio-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "input_cost_per_audio_token": 1e-05, - "output_cost_per_token": 6e-07, - "output_cost_per_audio_token": 2e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini-audio-preview-2024-12-17": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "input_cost_per_audio_token": 1e-05, - "output_cost_per_token": 6e-07, - "output_cost_per_audio_token": 2e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "input_cost_per_token_batches": 7.5e-08, - "output_cost_per_token_batches": 3e-07, - "cache_read_input_token_cost": 7.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini-search-preview-2025-03-11": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "input_cost_per_token_batches": 7.5e-08, - "output_cost_per_token_batches": 3e-07, - "cache_read_input_token_cost": 7.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini-search-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "input_cost_per_token_batches": 7.5e-08, - "output_cost_per_token_batches": 3e-07, - "cache_read_input_token_cost": 7.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_web_search": true, - "search_context_cost_per_query": { - "search_context_size_low": 0.025, - "search_context_size_medium": 0.0275, - "search_context_size_high": 0.03 - } - }, - "gpt-4o-mini-2024-07-18": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "input_cost_per_token_batches": 7.5e-08, - "output_cost_per_token_batches": 3e-07, - "cache_read_input_token_cost": 7.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "search_context_cost_per_query": { - "search_context_size_low": 0.025, - "search_context_size_medium": 0.0275, - "search_context_size_high": 0.03 - } - }, - "gpt-5": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-mini": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2e-06, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-nano": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 5e-09, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-chat": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": false, - "supports_parallel_function_calling": false, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": false, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-chat-latest": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": false, - "supports_parallel_function_calling": false, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": false, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-2025-08-07": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-mini-2025-08-07": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2e-06, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "gpt-5-nano-2025-08-07": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 5e-09, - "litellm_provider": "openai", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "codex-mini-latest": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 6e-06, - "cache_read_input_token_cost": 3.75e-07, - "litellm_provider": "openai", - "mode": "responses", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supported_endpoints": [ - "/v1/responses" - ] - }, - "o1-pro": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.00015, - "output_cost_per_token": 0.0006, - "input_cost_per_token_batches": 7.5e-05, - "output_cost_per_token_batches": 0.0003, - "litellm_provider": "openai", - "mode": "responses", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_native_streaming": false, - "supports_reasoning": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supported_endpoints": [ - "/v1/responses", - "/v1/batch" - ] - }, - "o1-pro-2025-03-19": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.00015, - "output_cost_per_token": 0.0006, - "input_cost_per_token_batches": 7.5e-05, - "output_cost_per_token_batches": 0.0003, - "litellm_provider": "openai", - "mode": "responses", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_native_streaming": false, - "supports_reasoning": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supported_endpoints": [ - "/v1/responses", - "/v1/batch" - ] - }, - "o1": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "o1-mini": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 5.5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true - }, - "computer-use-preview": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.2e-05, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": false, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "o3-deep-research": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 4e-05, - "input_cost_per_token_batches": 5e-06, - "output_cost_per_token_batches": 2e-05, - "cache_read_input_token_cost": 2.5e-06, - "litellm_provider": "openai", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "o3-deep-research-2025-06-26": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 4e-05, - "input_cost_per_token_batches": 5e-06, - "output_cost_per_token_batches": 2e-05, - "cache_read_input_token_cost": 2.5e-06, - "litellm_provider": "openai", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "o3-pro": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-05, - "input_cost_per_token_batches": 1e-05, - "output_cost_per_token_batches": 4e-05, - "output_cost_per_token": 8e-05, - "litellm_provider": "openai", - "mode": "responses", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/responses", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ] - }, - "o3-pro-2025-06-10": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-05, - "input_cost_per_token_batches": 1e-05, - "output_cost_per_token_batches": 4e-05, - "output_cost_per_token": 8e-05, - "litellm_provider": "openai", - "mode": "responses", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/responses", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ] - }, - "o3": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/responses", - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ] - }, - "o3-2025-04-16": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/responses", - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ] - }, - "o3-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 5.5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": false, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "o3-mini-2025-01-31": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 5.5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": false, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "o4-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 2.75e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "o4-mini-deep-research": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 4e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openai", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "o4-mini-deep-research-2025-06-26": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 4e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openai", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "o4-mini-2025-04-16": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 2.75e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "o1-mini-2024-09-12": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.2e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "o1-preview": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "o1-preview-2024-09-12": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "o1-2024-12-17": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "chatgpt-4o-latest": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-2024-05-13": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_token_batches": 2.5e-06, - "output_cost_per_token_batches": 7.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "input_cost_per_token_batches": 1.25e-06, - "output_cost_per_token_batches": 5e-06, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-2024-11-20": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "input_cost_per_token_batches": 1.25e-06, - "output_cost_per_token_batches": 5e-06, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-realtime": { - "max_tokens": 4096, - "max_input_tokens": 32000, - "max_output_tokens": 4096, - "input_cost_per_token": 4e-06, - "cache_read_input_token_cost": 0.4e-06, - "output_cost_per_token": 16e-06, - "input_cost_per_audio_token": 32e-06, - "output_cost_per_audio_token": 64e-06, - "cache_creation_input_audio_token_cost": 0.4e-06, - "input_cost_per_image": 5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/realtime" - ], - "supported_modalities": [ - "text", - "image", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ] - }, - "gpt-realtime-2025-08-28": { - "max_tokens": 4096, - "max_input_tokens": 32000, - "max_output_tokens": 4096, - "input_cost_per_token": 4e-06, - "cache_read_input_token_cost": 0.4e-06, - "output_cost_per_token": 16e-06, - "input_cost_per_audio_token": 32e-06, - "output_cost_per_audio_token": 64e-06, - "cache_creation_input_audio_token_cost": 0.4e-06, - "input_cost_per_image": 5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/realtime" - ], - "supported_modalities": [ - "text", - "image", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ] - }, - "gpt-4o-realtime-preview-2024-10-01": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "input_cost_per_audio_token": 0.0001, - "cache_read_input_token_cost": 2.5e-06, - "cache_creation_input_audio_token_cost": 2e-05, - "output_cost_per_token": 2e-05, - "output_cost_per_audio_token": 0.0002, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-realtime-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "input_cost_per_audio_token": 4e-05, - "cache_read_input_token_cost": 2.5e-06, - "output_cost_per_token": 2e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "input_cost_per_audio_token": 4e-05, - "cache_read_input_token_cost": 2.5e-06, - "output_cost_per_token": 2e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-realtime-preview-2025-06-03": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "input_cost_per_audio_token": 4e-05, - "cache_read_input_token_cost": 2.5e-06, - "output_cost_per_token": 2e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini-realtime-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-07, - "input_cost_per_audio_token": 1e-05, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_audio_token_cost": 3e-07, - "output_cost_per_token": 2.4e-06, - "output_cost_per_audio_token": 2e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4o-mini-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-07, - "input_cost_per_audio_token": 1e-05, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_audio_token_cost": 3e-07, - "output_cost_per_token": 2.4e-06, - "output_cost_per_audio_token": 2e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-turbo-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-0314": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-0613": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "deprecation_date": "2025-06-06", - "supports_tool_choice": true - }, - "gpt-4-32k": { - "max_tokens": 4096, - "max_input_tokens": 32768, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-05, - "output_cost_per_token": 0.00012, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-32k-0314": { - "max_tokens": 4096, - "max_input_tokens": 32768, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-05, - "output_cost_per_token": 0.00012, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-32k-0613": { - "max_tokens": 4096, - "max_input_tokens": 32768, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-05, - "output_cost_per_token": 0.00012, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-turbo": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-turbo-2024-04-09": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-1106-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-0125-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-4-vision-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "deprecation_date": "2024-12-06", - "supports_tool_choice": true - }, - "gpt-4-1106-vision-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "deprecation_date": "2024-12-06", - "supports_tool_choice": true - }, - "gpt-3.5-turbo": { - "max_tokens": 4097, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-3.5-turbo-0301": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-3.5-turbo-0613": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-3.5-turbo-1106": { - "max_tokens": 16385, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-3.5-turbo-0125": { - "max_tokens": 16385, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-3.5-turbo-16k": { - "max_tokens": 16385, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 4e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "gpt-3.5-turbo-16k-0613": { - "max_tokens": 16385, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 4e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-3.5-turbo": { - "max_tokens": 4096, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 6e-06, - "input_cost_per_token_batches": 1.5e-06, - "output_cost_per_token_batches": 3e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-3.5-turbo-0125": { - "max_tokens": 4096, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-3.5-turbo-1106": { - "max_tokens": 4096, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-3.5-turbo-0613": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-4-0613": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "source": "OpenAI needs to add pricing for this ft model, will be updated when added by OpenAI. Defaulting to base model pricing", - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 3.75e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_token_batches": 1.875e-06, - "output_cost_per_token_batches": 7.5e-06, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-4o-2024-11-20": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 3.75e-06, - "cache_creation_input_token_cost": 1.875e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openai", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:gpt-4o-mini-2024-07-18": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.2e-06, - "input_cost_per_token_batches": 1.5e-07, - "output_cost_per_token_batches": 6e-07, - "cache_read_input_token_cost": 1.5e-07, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "ft:davinci-002": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 1e-06, - "litellm_provider": "text-completion-openai", - "mode": "completion" - }, - "ft:babbage-002": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 4096, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 4e-07, - "input_cost_per_token_batches": 2e-07, - "output_cost_per_token_batches": 2e-07, - "litellm_provider": "text-completion-openai", - "mode": "completion" - }, - "text-embedding-3-large": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "output_vector_size": 3072, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 0.0, - "input_cost_per_token_batches": 6.5e-08, - "output_cost_per_token_batches": 0.0, - "litellm_provider": "openai", - "mode": "embedding" - }, - "text-embedding-3-small": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "output_vector_size": 1536, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 0.0, - "input_cost_per_token_batches": 1e-08, - "output_cost_per_token_batches": 0.0, - "litellm_provider": "openai", - "mode": "embedding" - }, - "text-embedding-ada-002": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "output_vector_size": 1536, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "embedding" - }, - "text-embedding-ada-002-v2": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "input_cost_per_token_batches": 5e-08, - "output_cost_per_token_batches": 0.0, - "litellm_provider": "openai", - "mode": "embedding" - }, - "text-moderation-stable": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 0, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "moderation" - }, - "text-moderation-007": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 0, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "moderation" - }, - "text-moderation-latest": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 0, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openai", - "mode": "moderation" - }, - "256-x-256/dall-e-2": { + "1024-x-1024/50-steps/bedrock/amazon.nova-canvas-v1:0": { + "litellm_provider": "bedrock", + "max_input_tokens": 2600, "mode": "image_generation", - "input_cost_per_pixel": 2.4414e-07, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" + "output_cost_per_image": 0.06 }, - "512-x-512/dall-e-2": { + "1024-x-1024/50-steps/stability.stable-diffusion-xl-v1": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, "mode": "image_generation", - "input_cost_per_pixel": 6.86e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" + "output_cost_per_image": 0.04 }, "1024-x-1024/dall-e-2": { - "mode": "image_generation", "input_cost_per_pixel": 1.9e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "hd/1024-x-1792/dall-e-3": { - "mode": "image_generation", - "input_cost_per_pixel": 6.539e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "hd/1792-x-1024/dall-e-3": { - "mode": "image_generation", - "input_cost_per_pixel": 6.539e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "hd/1024-x-1024/dall-e-3": { - "mode": "image_generation", - "input_cost_per_pixel": 7.629e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "standard/1024-x-1792/dall-e-3": { - "mode": "image_generation", - "input_cost_per_pixel": 4.359e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "standard/1792-x-1024/dall-e-3": { - "mode": "image_generation", - "input_cost_per_pixel": 4.359e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "standard/1024-x-1024/dall-e-3": { - "mode": "image_generation", - "input_cost_per_pixel": 3.81469e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai" - }, - "gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "low/1024-x-1024/gpt-image-1": { "mode": "image_generation", - "input_cost_per_pixel": 1.0490417e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] + "output_cost_per_pixel": 0.0 }, - "medium/1024-x-1024/gpt-image-1": { + "1024-x-1024/max-steps/stability.stable-diffusion-xl-v1": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] + "output_cost_per_image": 0.08 }, - "high/1024-x-1024/gpt-image-1": { + "256-x-256/dall-e-2": { + "input_cost_per_pixel": 2.4414e-07, + "litellm_provider": "openai", "mode": "image_generation", - "input_cost_per_pixel": 1.59263611e-07, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] + "output_cost_per_pixel": 0.0 }, - "low/1024-x-1536/gpt-image-1": { + "512-x-512/50-steps/stability.stable-diffusion-xl-v0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, "mode": "image_generation", - "input_cost_per_pixel": 1.0172526e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] + "output_cost_per_image": 0.018 }, - "medium/1024-x-1536/gpt-image-1": { + "512-x-512/dall-e-2": { + "input_cost_per_pixel": 6.86e-08, + "litellm_provider": "openai", "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] + "output_cost_per_pixel": 0.0 }, - "high/1024-x-1536/gpt-image-1": { + "512-x-512/max-steps/stability.stable-diffusion-xl-v0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, "mode": "image_generation", - "input_cost_per_pixel": 1.58945719e-07, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] + "output_cost_per_image": 0.036 }, - "low/1536-x-1024/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 1.0172526e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "medium/1536-x-1024/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "high/1536-x-1024/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 1.58945719e-07, - "output_cost_per_pixel": 0.0, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "gpt-4o-transcribe": { - "mode": "audio_transcription", - "max_input_tokens": 16000, - "max_output_tokens": 2000, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 6e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ] - }, - "gpt-4o-mini-transcribe": { - "mode": "audio_transcription", - "max_input_tokens": 16000, - "max_output_tokens": 2000, - "input_cost_per_token": 1.25e-06, - "input_cost_per_audio_token": 3e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ] - }, - "whisper-1": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0001, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ] - }, - "tts-1": { - "mode": "audio_speech", - "input_cost_per_character": 1.5e-05, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/audio/speech" - ] - }, - "tts-1-hd": { - "mode": "audio_speech", - "input_cost_per_character": 3e-05, - "litellm_provider": "openai", - "supported_endpoints": [ - "/v1/audio/speech" - ] - }, - "gpt-4o-mini-tts": { - "mode": "audio_speech", - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 1.2e-05, - "output_cost_per_second": 0.00025, - "litellm_provider": "openai", - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "audio" - ], - "supported_endpoints": [ - "/v1/audio/speech" - ] - }, - "azure/gpt-5": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "azure", + "ai21.j2-mid-v1": { + "input_cost_per_token": 1.25e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 8191, + "max_output_tokens": 8191, + "max_tokens": 8191, "mode": "chat", + "output_cost_per_token": 1.25e-05 + }, + "ai21.j2-ultra-v1": { + "input_cost_per_token": 1.88e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 8191, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 1.88e-05 + }, + "ai21.jamba-1-5-large-v1:0": { + "input_cost_per_token": 2e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06 + }, + "ai21.jamba-1-5-mini-v1:0": { + "input_cost_per_token": 2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07 + }, + "ai21.jamba-instruct-v1:0": { + "input_cost_per_token": 5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 70000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7e-07, + "supports_system_messages": true + }, + "aiml/dall-e-2": { + "litellm_provider": "aiml", + "metadata": { + "notes": "DALL-E 2 via AI/ML API - Reliable text-to-image generation" + }, + "mode": "image_generation", + "output_cost_per_image": 0.021, + "source": "https://docs.aimlapi.com/", "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, + "/v1/images/generations" + ] + }, + "aiml/dall-e-3": { + "litellm_provider": "aiml", + "metadata": { + "notes": "DALL-E 3 via AI/ML API - High-quality text-to-image generation" + }, + "mode": "image_generation", + "output_cost_per_image": 0.042, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux-pro": { + "litellm_provider": "aiml", + "metadata": { + "notes": "Flux Dev - Development version optimized for experimentation" + }, + "mode": "image_generation", + "output_cost_per_image": 0.053, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux-pro/v1.1": { + "litellm_provider": "aiml", + "mode": "image_generation", + "output_cost_per_image": 0.042, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux-pro/v1.1-ultra": { + "litellm_provider": "aiml", + "mode": "image_generation", + "output_cost_per_image": 0.063, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux-realism": { + "litellm_provider": "aiml", + "metadata": { + "notes": "Flux Pro - Professional-grade image generation model" + }, + "mode": "image_generation", + "output_cost_per_image": 0.037, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux/dev": { + "litellm_provider": "aiml", + "metadata": { + "notes": "Flux Dev - Development version optimized for experimentation" + }, + "mode": "image_generation", + "output_cost_per_image": 0.026, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux/kontext-max/text-to-image": { + "litellm_provider": "aiml", + "metadata": { + "notes": "Flux Pro v1.1 - Enhanced version with improved capabilities and 6x faster inference speed" + }, + "mode": "image_generation", + "output_cost_per_image": 0.084, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux/kontext-pro/text-to-image": { + "litellm_provider": "aiml", + "metadata": { + "notes": "Flux Pro v1.1 - Enhanced version with improved capabilities and 6x faster inference speed" + }, + "mode": "image_generation", + "output_cost_per_image": 0.042, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "aiml/flux/schnell": { + "litellm_provider": "aiml", + "metadata": { + "notes": "Flux Schnell - Fast generation model optimized for speed" + }, + "mode": "image_generation", + "output_cost_per_image": 0.003, + "source": "https://docs.aimlapi.com/", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "amazon.nova-lite-v1:0": { + "input_cost_per_token": 6e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 2.4e-07, "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, + "supports_pdf_input": true, "supports_prompt_caching": true, - "supports_system_messages": true, + "supports_response_schema": true, + "supports_vision": true + }, + "amazon.nova-micro-v1:0": { + "input_cost_per_token": 3.5e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 1.4e-07, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "amazon.nova-pro-v1:0": { + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 3.2e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "amazon.rerank-v1:0": { + "input_cost_per_query": 0.001, + "input_cost_per_token": 0.0, + "litellm_provider": "bedrock", + "max_document_chunks_per_query": 100, + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_query_tokens": 32000, + "max_tokens": 32000, + "max_tokens_per_document_chunk": 512, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "amazon.titan-embed-image-v1": { + "input_cost_per_image": 6e-05, + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128, + "max_tokens": 128, + "metadata": { + "notes": "'supports_image_input' is a deprecated field. Use 'supports_embedding_image_input' instead." + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024, + "source": "https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=amazon.titan-image-generator-v1", + "supports_embedding_image_input": true, + "supports_image_input": true + }, + "amazon.titan-embed-text-v1": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1536 + }, + "amazon.titan-embed-text-v2:0": { + "input_cost_per_token": 2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024 + }, + "twelvelabs.marengo-embed-2-7-v1:0": { + "input_cost_per_token": 7e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024, + "supports_embedding_image_input": true, + "supports_image_input": true + }, + "us.twelvelabs.marengo-embed-2-7-v1:0": { + "input_cost_per_token": 7e-05, + "input_cost_per_video_per_second": 0.0007, + "input_cost_per_audio_per_second": 0.00014, + "input_cost_per_image": 0.0001, + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024, + "supports_embedding_image_input": true, + "supports_image_input": true + }, + "eu.twelvelabs.marengo-embed-2-7-v1:0": { + "input_cost_per_token": 7e-05, + "input_cost_per_video_per_second": 0.0007, + "input_cost_per_audio_per_second": 0.00014, + "input_cost_per_image": 0.0001, + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024, + "supports_embedding_image_input": true, + "supports_image_input": true + }, + "twelvelabs.pegasus-1-2-v1:0": { + "input_cost_per_video_per_second": 0.00049, + "output_cost_per_token": 7.5e-06, + "litellm_provider": "bedrock", + "mode": "chat", + "supports_video_input": true + }, + "us.twelvelabs.pegasus-1-2-v1:0": { + "input_cost_per_video_per_second": 0.00049, + "output_cost_per_token": 7.5e-06, + "litellm_provider": "bedrock", + "mode": "chat", + "supports_video_input": true + }, + "eu.twelvelabs.pegasus-1-2-v1:0": { + "input_cost_per_video_per_second": 0.00049, + "output_cost_per_token": 7.5e-06, + "litellm_provider": "bedrock", + "mode": "chat", + "supports_video_input": true + }, + "amazon.titan-text-express-v1": { + "input_cost_per_token": 1.3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 8000, + "max_tokens": 8000, + "mode": "chat", + "output_cost_per_token": 1.7e-06 + }, + "amazon.titan-text-lite-v1": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 4000, + "max_tokens": 4000, + "mode": "chat", + "output_cost_per_token": 4e-07 + }, + "amazon.titan-text-premier-v1:0": { + "input_cost_per_token": 5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 1.5e-06 + }, + "anthropic.claude-3-5-haiku-20241022-v1:0": { + "cache_creation_input_token_cost": 1e-06, + "cache_read_input_token_cost": 8e-08, + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true + "supports_vision": true }, - "azure/gpt-5-2025-08-07": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "azure", + "anthropic.claude-3-5-sonnet-20241022-v2:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, + "supports_pdf_input": true, "supports_prompt_caching": true, - "supports_system_messages": true, + "supports_response_schema": true, "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true + "supports_vision": true }, - "azure/gpt-5-mini": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2e-06, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "azure", + "anthropic.claude-3-7-sonnet-20250219-v1:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "azure/gpt-5-mini-2025-08-07": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2e-06, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "azure/gpt-5-nano-2025-08-07": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 5e-09, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "azure/gpt-5-nano": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 5e-09, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": true - }, - "azure/gpt-5-chat": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": false, - "supports_native_streaming": true, "supports_reasoning": true, - "source": "https://azure.microsoft.com/en-us/blog/gpt-5-in-azure-ai-foundry-the-future-of-ai-apps-and-agents-starts-here/" + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/gpt-5-chat-latest": { - "max_tokens": 128000, - "max_input_tokens": 272000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "azure", + "anthropic.claude-3-haiku-20240307-v1:0": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "anthropic.claude-3-opus-20240229-v1:0": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "anthropic.claude-3-sonnet-20240229-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "anthropic.claude-instant-v1": { + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-06, + "supports_tool_choice": true + }, + "anthropic.claude-opus-4-1-20250805-v1:0": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "anthropic.claude-opus-4-20250514-v1:0": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "anthropic.claude-sonnet-4-20250514-v1:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "anthropic.claude-v1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05 + }, + "anthropic.claude-v2:1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "anyscale/HuggingFaceH4/zephyr-7b-beta": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.5e-07 + }, + "anyscale/codellama/CodeLlama-34b-Instruct-hf": { + "input_cost_per_token": 1e-06, + "litellm_provider": "anyscale", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "anyscale/codellama/CodeLlama-70b-Instruct-hf": { + "input_cost_per_token": 1e-06, + "litellm_provider": "anyscale", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-06, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/codellama-CodeLlama-70b-Instruct-hf" + }, + "anyscale/google/gemma-7b-it": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/google-gemma-7b-it" + }, + "anyscale/meta-llama/Llama-2-13b-chat-hf": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.5e-07 + }, + "anyscale/meta-llama/Llama-2-70b-chat-hf": { + "input_cost_per_token": 1e-06, + "litellm_provider": "anyscale", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "anyscale/meta-llama/Llama-2-7b-chat-hf": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-07 + }, + "anyscale/meta-llama/Meta-Llama-3-70B-Instruct": { + "input_cost_per_token": 1e-06, + "litellm_provider": "anyscale", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1e-06, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/meta-llama-Meta-Llama-3-70B-Instruct" + }, + "anyscale/meta-llama/Meta-Llama-3-8B-Instruct": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/meta-llama-Meta-Llama-3-8B-Instruct" + }, + "anyscale/mistralai/Mistral-7B-Instruct-v0.1": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/mistralai-Mistral-7B-Instruct-v0.1", + "supports_function_calling": true + }, + "anyscale/mistralai/Mixtral-8x22B-Instruct-v0.1": { + "input_cost_per_token": 9e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/mistralai-Mixtral-8x22B-Instruct-v0.1", + "supports_function_calling": true + }, + "anyscale/mistralai/Mixtral-8x7B-Instruct-v0.1": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "anyscale", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/mistralai-Mixtral-8x7B-Instruct-v0.1", + "supports_function_calling": true + }, + "apac.amazon.nova-lite-v1:0": { + "input_cost_per_token": 6.3e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 2.52e-07, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "apac.amazon.nova-micro-v1:0": { + "input_cost_per_token": 3.7e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 1.48e-07, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "apac.amazon.nova-pro-v1:0": { + "input_cost_per_token": 8.4e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 3.36e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "apac.anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "apac.anthropic.claude-3-5-sonnet-20241022-v2:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "apac.anthropic.claude-3-haiku-20240307-v1:0": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "apac.anthropic.claude-3-sonnet-20240229-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "apac.anthropic.claude-sonnet-4-20250514-v1:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "assemblyai/best": { + "input_cost_per_second": 3.333e-05, + "litellm_provider": "assemblyai", + "mode": "audio_transcription", + "output_cost_per_second": 0.0 + }, + "assemblyai/nano": { + "input_cost_per_second": 0.00010278, + "litellm_provider": "assemblyai", + "mode": "audio_transcription", + "output_cost_per_second": 0.0 + }, + "azure/ada": { + "input_cost_per_token": 1e-07, + "litellm_provider": "azure", + "max_input_tokens": 8191, + "max_tokens": 8191, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "azure/codex-mini": { + "cache_read_input_token_cost": 3.75e-07, + "input_cost_per_token": 1.5e-06, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 6e-06, "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", "/v1/responses" ], "supported_modalities": [ @@ -2574,43 +885,34 @@ "supported_output_modalities": [ "text" ], - "supports_pdf_input": true, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, + "supports_pdf_input": true, "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, "supports_system_messages": true, - "supports_tool_choice": false, - "supports_native_streaming": true, - "supports_reasoning": true + "supports_tool_choice": true, + "supports_vision": true }, - "azure/gpt-4o-mini-tts": { - "mode": "audio_speech", - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 1.2e-05, - "output_cost_per_second": 0.00025, + "azure/command-r-plus": { + "input_cost_per_token": 3e-06, "litellm_provider": "azure", - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "audio" - ], - "supported_endpoints": [ - "/v1/audio/speech" - ] + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true }, "azure/computer-use-preview": { - "max_tokens": 1024, + "input_cost_per_token": 3e-06, + "litellm_provider": "azure", "max_input_tokens": 8192, "max_output_tokens": 1024, - "input_cost_per_token": 3e-06, + "max_tokens": 1024, + "mode": "chat", "output_cost_per_token": 1.2e-05, - "litellm_provider": "azure", - "mode": "chat", "supported_endpoints": [ "/v1/responses" ], @@ -2623,2209 +925,2284 @@ ], "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, "supports_prompt_caching": false, + "supports_reasoning": true, + "supports_response_schema": true, "supports_system_messages": true, "supports_tool_choice": true, - "supports_reasoning": true + "supports_vision": true }, - "azure/gpt-4o-audio-preview-2024-12-17": { - "max_tokens": 16384, + "azure/eu/gpt-4o-2024-08-06": { + "cache_read_input_token_cost": 1.375e-06, + "input_cost_per_token": 2.75e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 4e-05, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "azure", + "max_tokens": 16384, "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions" - ], - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ], + "output_cost_per_token": 1.1e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_response_schema": false, - "supports_vision": false, - "supports_prompt_caching": false, - "supports_system_messages": true, + "supports_prompt_caching": true, + "supports_response_schema": true, "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": false + "supports_vision": true }, - "azure/gpt-4o-mini-audio-preview-2024-12-17": { - "max_tokens": 16384, + "azure/eu/gpt-4o-2024-11-20": { + "cache_creation_input_token_cost": 1.38e-06, + "input_cost_per_token": 2.75e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 4e-05, - "output_cost_per_token": 1e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "azure", + "max_tokens": 16384, "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions" - ], - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": false, - "supports_vision": false, - "supports_prompt_caching": false, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_reasoning": false - }, - "azure/gpt-4.1": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 4e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], + "output_cost_per_token": 1.1e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_web_search": false + "supports_vision": true }, - "azure/gpt-4.1-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "input_cost_per_token_batches": 1e-06, - "output_cost_per_token_batches": 4e-06, - "cache_read_input_token_cost": 5e-07, + "azure/eu/gpt-4o-mini-2024-07-18": { + "cache_read_input_token_cost": 8.3e-08, + "input_cost_per_token": 1.65e-07, "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_web_search": false - }, - "azure/gpt-4.1-mini": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "input_cost_per_token_batches": 2e-07, - "output_cost_per_token_batches": 8e-07, - "cache_read_input_token_cost": 1e-07, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_web_search": false - }, - "azure/gpt-4.1-mini-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "input_cost_per_token_batches": 2e-07, - "output_cost_per_token_batches": 8e-07, - "cache_read_input_token_cost": 1e-07, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true, - "supports_web_search": false - }, - "azure/gpt-4.1-nano": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "input_cost_per_token_batches": 5e-08, - "output_cost_per_token_batches": 2e-07, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "azure/gpt-4.1-nano-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "input_cost_per_token_batches": 5e-08, - "output_cost_per_token_batches": 2e-07, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_native_streaming": true - }, - "azure/o3-pro": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-05, - "output_cost_per_token": 8e-05, - "input_cost_per_token_batches": 1e-05, - "output_cost_per_token_batches": 4e-05, - "litellm_provider": "azure", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": false, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "azure/o3-pro-2025-06-10": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-05, - "output_cost_per_token": 8e-05, - "input_cost_per_token_batches": 1e-05, - "output_cost_per_token_batches": 4e-05, - "litellm_provider": "azure", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": false, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "azure/o3": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "azure/o3-2025-04-16": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 4e-05, - "cache_read_input_token_cost": 2.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "azure/o3-deep-research": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 4e-05, - "cache_read_input_token_cost": 2.5e-06, - "litellm_provider": "azure", - "mode": "responses", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_web_search": true - }, - "azure/o4-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 2.75e-07, - "litellm_provider": "azure", - "mode": "chat", - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/batch", - "/v1/responses" - ], - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "azure/gpt-4o-mini-realtime-preview-2024-12-17": { - "max_tokens": 4096, "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-07, - "input_cost_per_audio_token": 1e-05, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_audio_token_cost": 3e-07, - "output_cost_per_token": 2.4e-06, - "output_cost_per_audio_token": 2e-05, - "litellm_provider": "azure", + "max_output_tokens": 16384, + "max_tokens": 16384, "mode": "chat", + "output_cost_per_token": 6.6e-07, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, "azure/eu/gpt-4o-mini-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 6.6e-07, - "input_cost_per_audio_token": 1.1e-05, - "cache_read_input_token_cost": 3.3e-07, "cache_creation_input_audio_token_cost": 3.3e-07, - "output_cost_per_token": 2.64e-06, - "output_cost_per_audio_token": 2.2e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "azure/us/gpt-4o-mini-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 6.6e-07, - "input_cost_per_audio_token": 1.1e-05, "cache_read_input_token_cost": 3.3e-07, - "cache_creation_input_audio_token_cost": 3.3e-07, - "output_cost_per_token": 2.64e-06, + "input_cost_per_audio_token": 1.1e-05, + "input_cost_per_token": 6.6e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", "output_cost_per_audio_token": 2.2e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, + "output_cost_per_token": 2.64e-06, "supports_audio_input": true, "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "azure/gpt-4o-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "input_cost_per_audio_token": 4e-05, - "cache_read_input_token_cost": 2.5e-06, - "output_cost_per_token": 2e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "azure", - "mode": "chat", - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ], "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "azure/us/gpt-4o-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5.5e-06, - "input_cost_per_audio_token": 4.4e-05, - "cache_read_input_token_cost": 2.75e-06, - "cache_read_input_audio_token_cost": 2.5e-06, - "output_cost_per_token": 2.2e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "azure", - "mode": "chat", - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "azure/eu/gpt-4o-realtime-preview-2024-12-17": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5.5e-06, - "input_cost_per_audio_token": 4.4e-05, - "cache_read_input_token_cost": 2.75e-06, - "cache_read_input_audio_token_cost": 2.5e-06, - "output_cost_per_token": 2.2e-05, - "output_cost_per_audio_token": 8e-05, - "litellm_provider": "azure", - "mode": "chat", - "supported_modalities": [ - "text", - "audio" - ], - "supported_output_modalities": [ - "text", - "audio" - ], - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "azure/gpt-4o-realtime-preview-2024-10-01": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "input_cost_per_audio_token": 0.0001, - "cache_read_input_token_cost": 2.5e-06, - "cache_creation_input_audio_token_cost": 2e-05, - "output_cost_per_token": 2e-05, - "output_cost_per_audio_token": 0.0002, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "azure/us/gpt-4o-realtime-preview-2024-10-01": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5.5e-06, - "input_cost_per_audio_token": 0.00011, - "cache_read_input_token_cost": 2.75e-06, - "cache_creation_input_audio_token_cost": 2.2e-05, - "output_cost_per_token": 2.2e-05, - "output_cost_per_audio_token": 0.00022, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_audio_input": true, - "supports_audio_output": true, "supports_system_messages": true, "supports_tool_choice": true }, "azure/eu/gpt-4o-realtime-preview-2024-10-01": { - "max_tokens": 4096, + "cache_creation_input_audio_token_cost": 2.2e-05, + "cache_read_input_token_cost": 2.75e-06, + "input_cost_per_audio_token": 0.00011, + "input_cost_per_token": 5.5e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 5.5e-06, - "input_cost_per_audio_token": 0.00011, - "cache_read_input_token_cost": 2.75e-06, - "cache_creation_input_audio_token_cost": 2.2e-05, - "output_cost_per_token": 2.2e-05, - "output_cost_per_audio_token": 0.00022, - "litellm_provider": "azure", + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, + "output_cost_per_audio_token": 0.00022, + "output_cost_per_token": 2.2e-05, "supports_audio_input": true, "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, "supports_system_messages": true, "supports_tool_choice": true }, - "azure/o4-mini-2025-04-16": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 2.75e-07, + "azure/eu/gpt-4o-realtime-preview-2024-12-17": { + "cache_read_input_audio_token_cost": 2.5e-06, + "cache_read_input_token_cost": 2.75e-06, + "input_cost_per_audio_token": 4.4e-05, + "input_cost_per_token": 5.5e-06, "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "azure/o3-mini-2025-01-31": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 5.5e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_reasoning": true, - "supports_vision": false, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/us/o3-mini-2025-01-31": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.21e-06, - "input_cost_per_token_batches": 6.05e-07, - "output_cost_per_token": 4.84e-06, - "output_cost_per_token_batches": 2.42e-06, - "cache_read_input_token_cost": 6.05e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_vision": false, - "supports_reasoning": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/eu/o3-mini-2025-01-31": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.21e-06, - "input_cost_per_token_batches": 6.05e-07, - "output_cost_per_token": 4.84e-06, - "output_cost_per_token_batches": 2.42e-06, - "cache_read_input_token_cost": 6.05e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_vision": false, - "supports_reasoning": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/tts-1": { - "mode": "audio_speech", - "input_cost_per_character": 1.5e-05, - "litellm_provider": "azure" - }, - "azure/tts-1-hd": { - "mode": "audio_speech", - "input_cost_per_character": 3e-05, - "litellm_provider": "azure" - }, - "azure/whisper-1": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0001, - "litellm_provider": "azure" - }, - "azure/gpt-4o-transcribe": { - "mode": "audio_transcription", - "max_input_tokens": 16000, - "max_output_tokens": 2000, - "input_cost_per_token": 2.5e-06, - "input_cost_per_audio_token": 6e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ] - }, - "azure/gpt-4o-mini-transcribe": { - "mode": "audio_transcription", - "max_input_tokens": 16000, - "max_output_tokens": 2000, - "input_cost_per_token": 1.25e-06, - "input_cost_per_audio_token": 3e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ] - }, - "azure/o3-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 5.5e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_vision": false, - "supports_prompt_caching": true, - "supports_reasoning": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "azure/o1-mini": { - "max_tokens": 65536, "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.21e-06, - "output_cost_per_token": 4.84e-06, - "cache_read_input_token_cost": 6.05e-07, - "litellm_provider": "azure", + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 2.2e-05, + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "azure/o1-mini-2024-09-12": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "cache_read_input_token_cost": 5.5e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "azure/us/o1-mini-2024-09-12": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.21e-06, - "input_cost_per_token_batches": 6.05e-07, - "output_cost_per_token": 4.84e-06, - "output_cost_per_token_batches": 2.42e-06, - "cache_read_input_token_cost": 6.05e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_prompt_caching": true - }, - "azure/eu/o1-mini-2024-09-12": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.21e-06, - "input_cost_per_token_batches": 6.05e-07, - "output_cost_per_token": 4.84e-06, - "output_cost_per_token_batches": 2.42e-06, - "cache_read_input_token_cost": 6.05e-07, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_prompt_caching": true - }, - "azure/o1": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/o1-2024-12-17": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/us/o1-2024-12-17": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.65e-05, - "output_cost_per_token": 6.6e-05, - "cache_read_input_token_cost": 8.25e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, + "supports_system_messages": true, "supports_tool_choice": true }, "azure/eu/o1-2024-12-17": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.65e-05, - "output_cost_per_token": 6.6e-05, "cache_read_input_token_cost": 8.25e-06, + "input_cost_per_token": 1.65e-05, "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/codex-mini": { - "max_tokens": 100000, "max_input_tokens": 200000, "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 6e-06, - "cache_read_input_token_cost": 3.75e-07, - "litellm_provider": "azure", - "mode": "responses", - "supports_pdf_input": true, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6.6e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_vision": true, "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, "supports_tool_choice": true, - "supports_reasoning": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supported_endpoints": [ - "/v1/responses" - ] + "supports_vision": true }, - "azure/o1-preview": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, + "azure/eu/o1-mini-2024-09-12": { + "cache_read_input_token_cost": 6.05e-07, + "input_cost_per_token": 1.21e-06, + "input_cost_per_token_batches": 6.05e-07, "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, "mode": "chat", + "output_cost_per_token": 4.84e-06, + "output_cost_per_token_batches": 2.42e-06, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "azure/o1-preview-2024-09-12": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "azure/us/o1-preview-2024-09-12": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.65e-05, - "output_cost_per_token": 6.6e-05, - "cache_read_input_token_cost": 8.25e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "supports_vision": false }, "azure/eu/o1-preview-2024-09-12": { - "max_tokens": 32768, + "cache_read_input_token_cost": 8.25e-06, + "input_cost_per_token": 1.65e-05, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 32768, - "input_cost_per_token": 1.65e-05, + "max_tokens": 32768, + "mode": "chat", "output_cost_per_token": 6.6e-05, - "cache_read_input_token_cost": 8.25e-06, - "litellm_provider": "azure", - "mode": "chat", "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_prompt_caching": true - }, - "azure/gpt-4.5-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 7.5e-05, - "output_cost_per_token": 0.00015, - "input_cost_per_token_batches": 3.75e-05, - "output_cost_per_token_batches": 7.5e-05, - "cache_read_input_token_cost": 3.75e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true + "supports_vision": false }, - "azure/gpt-4o": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-06, + "azure/eu/o3-mini-2025-01-31": { + "cache_read_input_token_cost": 6.05e-07, + "input_cost_per_token": 1.21e-06, + "input_cost_per_token_batches": 6.05e-07, "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, + "output_cost_per_token": 4.84e-06, + "output_cost_per_token_batches": 2.42e-06, "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/global/gpt-4o-2024-11-20": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/global/gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/gpt-4o-2024-11-20": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.75e-06, - "output_cost_per_token": 1.1e-05, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/us/gpt-4o-2024-11-20": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.75e-06, - "cache_creation_input_token_cost": 1.38e-06, - "output_cost_per_token": 1.1e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "azure/eu/gpt-4o-2024-11-20": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.75e-06, - "cache_creation_input_token_cost": 1.38e-06, - "output_cost_per_token": 1.1e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "azure/gpt-4o-2024-05-13": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": false }, "azure/global-standard/gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, "cache_read_input_token_cost": 1.25e-06, + "deprecation_date": "2025-08-20", + "input_cost_per_token": 2.5e-06, "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, "mode": "chat", + "output_cost_per_token": 1e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, "supports_prompt_caching": true, + "supports_response_schema": true, "supports_tool_choice": true, - "deprecation_date": "2025-08-20" - }, - "azure/us/gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.75e-06, - "output_cost_per_token": 1.1e-05, - "cache_read_input_token_cost": 1.375e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/eu/gpt-4o-2024-08-06": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 2.75e-06, - "output_cost_per_token": 1.1e-05, - "cache_read_input_token_cost": 1.375e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true + "supports_vision": true }, "azure/global-standard/gpt-4o-2024-11-20": { - "max_tokens": 16384, + "cache_read_input_token_cost": 1.25e-06, + "deprecation_date": "2025-12-20", + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 16384, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-06, - "litellm_provider": "azure", + "max_tokens": 16384, "mode": "chat", + "output_cost_per_token": 1e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, "supports_response_schema": true, - "supports_vision": true, "supports_tool_choice": true, - "deprecation_date": "2025-12-20" + "supports_vision": true }, "azure/global-standard/gpt-4o-mini": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, "input_cost_per_token": 1.5e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", "output_cost_per_token": 6e-07, - "litellm_provider": "azure", - "mode": "chat", "supports_function_calling": true, "supports_parallel_function_calling": true, "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_vision": true }, - "azure/gpt-4o-mini": { - "max_tokens": 16384, + "azure/global/gpt-4o-2024-08-06": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 16384, - "input_cost_per_token": 1.65e-07, - "output_cost_per_token": 6.6e-07, - "cache_read_input_token_cost": 7.5e-08, - "litellm_provider": "azure", + "max_tokens": 16384, "mode": "chat", + "output_cost_per_token": 1e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, "supports_prompt_caching": true, - "supports_tool_choice": true + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/gpt-4o-mini-2024-07-18": { - "max_tokens": 16384, + "azure/global/gpt-4o-2024-11-20": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 16384, - "input_cost_per_token": 1.65e-07, - "output_cost_per_token": 6.6e-07, - "cache_read_input_token_cost": 7.5e-08, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/us/gpt-4o-mini-2024-07-18": { "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.65e-07, - "output_cost_per_token": 6.6e-07, - "cache_read_input_token_cost": 8.3e-08, - "litellm_provider": "azure", "mode": "chat", + "output_cost_per_token": 1e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, "supports_prompt_caching": true, - "supports_tool_choice": true + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/eu/gpt-4o-mini-2024-07-18": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 1.65e-07, - "output_cost_per_token": 6.6e-07, - "cache_read_input_token_cost": 8.3e-08, + "azure/gpt-3.5-turbo": { + "input_cost_per_token": 5e-07, "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "azure/gpt-4-turbo-2024-04-09": { - "max_tokens": 4096, - "max_input_tokens": 128000, + "max_input_tokens": 4097, "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "azure", + "max_tokens": 4096, "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-3.5-turbo-0125": { + "deprecation_date": "2025-03-31", + "input_cost_per_token": 5e-07, + "litellm_provider": "azure", + "max_input_tokens": 16384, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_vision": true, + "supports_tool_choice": true + }, + "azure/gpt-3.5-turbo-instruct-0914": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "azure_text", + "max_input_tokens": 4097, + "max_tokens": 4097, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "azure/gpt-35-turbo": { + "input_cost_per_token": 5e-07, + "litellm_provider": "azure", + "max_input_tokens": 4097, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-0125": { + "deprecation_date": "2025-05-31", + "input_cost_per_token": 5e-07, + "litellm_provider": "azure", + "max_input_tokens": 16384, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-0301": { + "deprecation_date": "2025-02-13", + "input_cost_per_token": 2e-07, + "litellm_provider": "azure", + "max_input_tokens": 4097, + "max_output_tokens": 4096, + "max_tokens": 4097, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-0613": { + "deprecation_date": "2025-02-13", + "input_cost_per_token": 1.5e-06, + "litellm_provider": "azure", + "max_input_tokens": 4097, + "max_output_tokens": 4096, + "max_tokens": 4097, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-1106": { + "deprecation_date": "2025-03-31", + "input_cost_per_token": 1e-06, + "litellm_provider": "azure", + "max_input_tokens": 16384, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-16k": { + "input_cost_per_token": 3e-06, + "litellm_provider": "azure", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-16k-0613": { + "input_cost_per_token": 3e-06, + "litellm_provider": "azure", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure/gpt-35-turbo-instruct": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "azure_text", + "max_input_tokens": 4097, + "max_tokens": 4097, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "azure/gpt-35-turbo-instruct-0914": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "azure_text", + "max_input_tokens": 4097, + "max_tokens": 4097, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "azure/gpt-4": { + "input_cost_per_token": 3e-05, + "litellm_provider": "azure", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, "supports_tool_choice": true }, "azure/gpt-4-0125-preview": { - "max_tokens": 4096, + "input_cost_per_token": 1e-05, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_tool_choice": true - }, - "azure/gpt-4-1106-preview": { "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "azure", "mode": "chat", + "output_cost_per_token": 3e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, "supports_tool_choice": true }, "azure/gpt-4-0613": { - "max_tokens": 4096, + "input_cost_per_token": 3e-05, + "litellm_provider": "azure", "max_input_tokens": 8192, "max_output_tokens": 4096, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "azure", + "max_tokens": 4096, "mode": "chat", + "output_cost_per_token": 6e-05, "supports_function_calling": true, "supports_tool_choice": true }, - "azure/gpt-4-32k-0613": { - "max_tokens": 4096, - "max_input_tokens": 32768, - "max_output_tokens": 4096, - "input_cost_per_token": 6e-05, - "output_cost_per_token": 0.00012, + "azure/gpt-4-1106-preview": { + "input_cost_per_token": 1e-05, "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, "supports_tool_choice": true }, "azure/gpt-4-32k": { - "max_tokens": 4096, + "input_cost_per_token": 6e-05, + "litellm_provider": "azure", "max_input_tokens": 32768, "max_output_tokens": 4096, - "input_cost_per_token": 6e-05, - "output_cost_per_token": 0.00012, - "litellm_provider": "azure", + "max_tokens": 4096, "mode": "chat", + "output_cost_per_token": 0.00012, "supports_tool_choice": true }, - "azure/gpt-4": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, + "azure/gpt-4-32k-0613": { + "input_cost_per_token": 6e-05, "litellm_provider": "azure", + "max_input_tokens": 32768, + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true, + "output_cost_per_token": 0.00012, "supports_tool_choice": true }, "azure/gpt-4-turbo": { - "max_tokens": 4096, + "input_cost_per_token": 1e-05, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "azure", + "max_tokens": 4096, "mode": "chat", + "output_cost_per_token": 3e-05, "supports_function_calling": true, "supports_parallel_function_calling": true, "supports_tool_choice": true }, + "azure/gpt-4-turbo-2024-04-09": { + "input_cost_per_token": 1e-05, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, "azure/gpt-4-turbo-vision-preview": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, "litellm_provider": "azure", - "mode": "chat", - "supports_vision": true, - "supports_tool_choice": true - }, - "azure/gpt-35-turbo-16k-0613": { - "max_tokens": 4096, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 4e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "azure/gpt-35-turbo-1106": { - "max_tokens": 4096, - "max_input_tokens": 16384, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "deprecation_date": "2025-03-31", - "supports_tool_choice": true - }, - "azure/gpt-35-turbo-0613": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "deprecation_date": "2025-02-13", - "supports_tool_choice": true - }, - "azure/gpt-35-turbo-0301": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "deprecation_date": "2025-02-13", - "supports_tool_choice": true - }, - "azure/gpt-35-turbo-0125": { - "max_tokens": 4096, - "max_input_tokens": 16384, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "deprecation_date": "2025-05-31", - "supports_tool_choice": true - }, - "azure/gpt-3.5-turbo-0125": { - "max_tokens": 4096, - "max_input_tokens": 16384, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "deprecation_date": "2025-03-31", - "supports_tool_choice": true - }, - "azure/gpt-35-turbo-16k": { - "max_tokens": 4096, - "max_input_tokens": 16385, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 4e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_tool_choice": true - }, - "azure/gpt-35-turbo": { - "max_tokens": 4096, - "max_input_tokens": 4097, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "azure/gpt-3.5-turbo": { - "max_tokens": 4096, - "max_input_tokens": 4097, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "azure/gpt-3.5-turbo-instruct-0914": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure_text", - "mode": "completion" - }, - "azure/gpt-35-turbo-instruct": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure_text", - "mode": "completion" - }, - "azure/gpt-35-turbo-instruct-0914": { - "max_tokens": 4097, - "max_input_tokens": 4097, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure_text", - "mode": "completion" - }, - "azure/mistral-large-latest": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true - }, - "azure/mistral-large-2402": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "azure", - "mode": "chat", - "supports_function_calling": true - }, - "azure/command-r-plus": { - "max_tokens": 4096, "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "azure", + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true + "output_cost_per_token": 3e-05, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/ada": { - "max_tokens": 8191, - "max_input_tokens": 8191, + "azure/gpt-4.1": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "azure", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-06, + "output_cost_per_token_batches": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": false + }, + "azure/gpt-4.1-2025-04-14": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "azure", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-06, + "output_cost_per_token_batches": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": false + }, + "azure/gpt-4.1-mini": { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "input_cost_per_token_batches": 2e-07, + "litellm_provider": "azure", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "output_cost_per_token_batches": 8e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": false + }, + "azure/gpt-4.1-mini-2025-04-14": { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "input_cost_per_token_batches": 2e-07, + "litellm_provider": "azure", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "output_cost_per_token_batches": 8e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": false + }, + "azure/gpt-4.1-nano": { + "cache_read_input_token_cost": 2.5e-08, "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, + "input_cost_per_token_batches": 5e-08, "litellm_provider": "azure", - "mode": "embedding" + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "output_cost_per_token_batches": 2e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/text-embedding-ada-002": { - "max_tokens": 8191, - "max_input_tokens": 8191, + "azure/gpt-4.1-nano-2025-04-14": { + "cache_read_input_token_cost": 2.5e-08, "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, + "input_cost_per_token_batches": 5e-08, "litellm_provider": "azure", - "mode": "embedding" + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "output_cost_per_token_batches": 2e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/text-embedding-3-large": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 0.0, + "azure/gpt-4.5-preview": { + "cache_read_input_token_cost": 3.75e-05, + "input_cost_per_token": 7.5e-05, + "input_cost_per_token_batches": 3.75e-05, "litellm_provider": "azure", - "mode": "embedding" + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 0.00015, + "output_cost_per_token_batches": 7.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure/text-embedding-3-small": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 0.0, + "azure/gpt-4o": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, "litellm_provider": "azure", - "mode": "embedding" + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-4o-2024-05-13": { + "input_cost_per_token": 5e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-4o-2024-08-06": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-4o-2024-11-20": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.75e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.1e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-4o-audio-preview-2024-12-17": { + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": false, + "supports_reasoning": false, + "supports_response_schema": false, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "azure/gpt-4o-mini": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.65e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6.6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-4o-mini-2024-07-18": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.65e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6.6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-4o-mini-audio-preview-2024-12-17": { + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": false, + "supports_reasoning": false, + "supports_response_schema": false, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "azure/gpt-4o-mini-realtime-preview-2024-12-17": { + "cache_creation_input_audio_token_cost": 3e-07, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 6e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "azure/gpt-4o-mini-transcribe": { + "input_cost_per_audio_token": 3e-06, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "azure", + "max_input_tokens": 16000, + "max_output_tokens": 2000, + "mode": "audio_transcription", + "output_cost_per_token": 5e-06, + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "azure/gpt-4o-mini-tts": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", + "mode": "audio_speech", + "output_cost_per_audio_token": 1.2e-05, + "output_cost_per_second": 0.00025, + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/audio/speech" + ], + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "audio" + ] + }, + "azure/gpt-4o-realtime-preview-2024-10-01": { + "cache_creation_input_audio_token_cost": 2e-05, + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_audio_token": 0.0001, + "input_cost_per_token": 5e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 0.0002, + "output_cost_per_token": 2e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "azure/gpt-4o-realtime-preview-2024-12-17": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 5e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 2e-05, + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "azure/gpt-4o-transcribe": { + "input_cost_per_audio_token": 6e-06, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "azure", + "max_input_tokens": 16000, + "max_output_tokens": 2000, + "mode": "audio_transcription", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "azure/gpt-5": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-5-2025-08-07": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-5-chat": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "source": "https://azure.microsoft.com/en-us/blog/gpt-5-in-azure-ai-foundry-the-future-of-ai-apps-and-agents-starts-here/", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "azure/gpt-5-chat-latest": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "azure/gpt-5-mini": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-5-mini-2025-08-07": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-5-nano": { + "cache_read_input_token_cost": 5e-09, + "input_cost_per_token": 5e-08, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/gpt-5-nano-2025-08-07": { + "cache_read_input_token_cost": 5e-09, + "input_cost_per_token": 5e-08, + "litellm_provider": "azure", + "max_input_tokens": 272000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true }, "azure/gpt-image-1": { - "mode": "image_generation", "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, "litellm_provider": "azure", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, "supported_endpoints": [ "/v1/images/generations" ] }, - "azure/low/1024-x-1024/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 1.0490417e-08, - "output_cost_per_pixel": 0.0, + "azure/hd/1024-x-1024/dall-e-3": { + "input_cost_per_pixel": 7.629e-08, "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/images/generations" - ] + "mode": "image_generation", + "output_cost_per_token": 0.0 }, - "azure/medium/1024-x-1024/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, + "azure/hd/1024-x-1792/dall-e-3": { + "input_cost_per_pixel": 6.539e-08, "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/images/generations" - ] + "mode": "image_generation", + "output_cost_per_token": 0.0 + }, + "azure/hd/1792-x-1024/dall-e-3": { + "input_cost_per_pixel": 6.539e-08, + "litellm_provider": "azure", + "mode": "image_generation", + "output_cost_per_token": 0.0 }, "azure/high/1024-x-1024/gpt-image-1": { - "mode": "image_generation", "input_cost_per_pixel": 1.59263611e-07, - "output_cost_per_pixel": 0.0, "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "azure/low/1024-x-1536/gpt-image-1": { "mode": "image_generation", - "input_cost_per_pixel": 1.0172526e-08, "output_cost_per_pixel": 0.0, - "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "azure/medium/1024-x-1536/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "azure", "supported_endpoints": [ "/v1/images/generations" ] }, "azure/high/1024-x-1536/gpt-image-1": { - "mode": "image_generation", "input_cost_per_pixel": 1.58945719e-07, - "output_cost_per_pixel": 0.0, "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "azure/low/1536-x-1024/gpt-image-1": { "mode": "image_generation", - "input_cost_per_pixel": 1.0172526e-08, "output_cost_per_pixel": 0.0, - "litellm_provider": "azure", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "azure/medium/1536-x-1024/gpt-image-1": { - "mode": "image_generation", - "input_cost_per_pixel": 4.0054321e-08, - "output_cost_per_pixel": 0.0, - "litellm_provider": "azure", "supported_endpoints": [ "/v1/images/generations" ] }, "azure/high/1536-x-1024/gpt-image-1": { - "mode": "image_generation", "input_cost_per_pixel": 1.58945719e-07, - "output_cost_per_pixel": 0.0, "litellm_provider": "azure", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, "supported_endpoints": [ "/v1/images/generations" ] }, - "azure/standard/1024-x-1024/dall-e-3": { - "input_cost_per_pixel": 3.81469e-08, - "output_cost_per_token": 0.0, + "azure/low/1024-x-1024/gpt-image-1": { + "input_cost_per_pixel": 1.0490417e-08, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "azure/hd/1024-x-1024/dall-e-3": { - "input_cost_per_pixel": 7.629e-08, - "output_cost_per_token": 0.0, + "azure/low/1024-x-1536/gpt-image-1": { + "input_cost_per_pixel": 1.0172526e-08, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "azure/standard/1024-x-1792/dall-e-3": { - "input_cost_per_pixel": 4.359e-08, - "output_cost_per_token": 0.0, + "azure/low/1536-x-1024/gpt-image-1": { + "input_cost_per_pixel": 1.0172526e-08, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "azure/standard/1792-x-1024/dall-e-3": { - "input_cost_per_pixel": 4.359e-08, - "output_cost_per_token": 0.0, + "azure/medium/1024-x-1024/gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "azure/hd/1024-x-1792/dall-e-3": { - "input_cost_per_pixel": 6.539e-08, - "output_cost_per_token": 0.0, + "azure/medium/1024-x-1536/gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "azure/hd/1792-x-1024/dall-e-3": { - "input_cost_per_pixel": 6.539e-08, - "output_cost_per_token": 0.0, + "azure/medium/1536-x-1024/gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "azure/mistral-large-2402": { + "input_cost_per_token": 8e-06, + "litellm_provider": "azure", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_function_calling": true + }, + "azure/mistral-large-latest": { + "input_cost_per_token": 8e-06, + "litellm_provider": "azure", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_function_calling": true + }, + "azure/o1": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o1-2024-12-17": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o1-mini": { + "cache_read_input_token_cost": 6.05e-07, + "input_cost_per_token": 1.21e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.84e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": false + }, + "azure/o1-mini-2024-09-12": { + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": false + }, + "azure/o1-preview": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": false + }, + "azure/o1-preview-2024-09-12": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": false + }, + "azure/o3": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o3-2025-04-16": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_token": 1e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o3-deep-research": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_token": 1e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 4e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "azure/o3-mini": { + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "azure/o3-mini-2025-01-31": { + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "azure/o3-pro": { + "input_cost_per_token": 2e-05, + "input_cost_per_token_batches": 1e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 8e-05, + "output_cost_per_token_batches": 4e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o3-pro-2025-06-10": { + "input_cost_per_token": 2e-05, + "input_cost_per_token_batches": 1e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 8e-05, + "output_cost_per_token_batches": 4e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o4-mini": { + "cache_read_input_token_cost": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/o4-mini-2025-04-16": { + "cache_read_input_token_cost": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, "azure/standard/1024-x-1024/dall-e-2": { "input_cost_per_pixel": 0.0, - "output_cost_per_token": 0.0, "litellm_provider": "azure", - "mode": "image_generation" + "mode": "image_generation", + "output_cost_per_token": 0.0 }, - "azure_ai/grok-3": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3.3e-06, - "output_cost_per_token": 1.65e-05, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", - "supports_web_search": true + "azure/standard/1024-x-1024/dall-e-3": { + "input_cost_per_pixel": 3.81469e-08, + "litellm_provider": "azure", + "mode": "image_generation", + "output_cost_per_token": 0.0 }, - "azure_ai/global/grok-3": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", - "supports_web_search": true + "azure/standard/1024-x-1792/dall-e-3": { + "input_cost_per_pixel": 4.359e-08, + "litellm_provider": "azure", + "mode": "image_generation", + "output_cost_per_token": 0.0 }, - "azure_ai/global/grok-3-mini": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.27e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", - "supports_web_search": true + "azure/standard/1792-x-1024/dall-e-3": { + "input_cost_per_pixel": 4.359e-08, + "litellm_provider": "azure", + "mode": "image_generation", + "output_cost_per_token": 0.0 }, - "azure_ai/grok-3-mini": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.75e-07, - "output_cost_per_token": 1.38e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", - "supports_web_search": true - }, - "azure_ai/deepseek-r1": { - "max_tokens": 8192, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "input_cost_per_token": 1.35e-06, - "output_cost_per_token": 5.4e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/deepseek-r1-improved-performance-higher-limits-and-transparent-pricing/4386367" - }, - "azure_ai/deepseek-v3": { - "max_tokens": 8192, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "input_cost_per_token": 1.14e-06, - "output_cost_per_token": 4.56e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_tool_choice": true, - "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/announcing-deepseek-v3-on-azure-ai-foundry-and-github/4390438" - }, - "azure_ai/deepseek-v3-0324": { - "max_tokens": 8192, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "input_cost_per_token": 1.14e-06, - "output_cost_per_token": 4.56e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/announcing-deepseek-v3-on-azure-ai-foundry-and-github/4390438" - }, - "azure_ai/jamba-instruct": { - "max_tokens": 4096, - "max_input_tokens": 70000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_tool_choice": true - }, - "azure_ai/jais-30b-chat": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0032, - "output_cost_per_token": 0.00971, - "litellm_provider": "azure_ai", - "mode": "chat", - "source": "https://azure.microsoft.com/en-us/products/ai-services/ai-foundry/models/jais-30b-chat" - }, - "azure_ai/mistral-nemo": { - "max_tokens": 4096, - "max_input_tokens": 131072, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.mistral-nemo-12b-2407?tab=PlansAndPrice" - }, - "azure_ai/mistral-medium-2505": { + "azure/text-embedding-3-large": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "azure", + "max_input_tokens": 8191, "max_tokens": 8191, - "max_input_tokens": 131072, - "max_output_tokens": 8191, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true + "mode": "embedding", + "output_cost_per_token": 0.0 }, - "azure_ai/mistral-large": { + "azure/text-embedding-3-small": { + "input_cost_per_token": 2e-08, + "litellm_provider": "azure", + "max_input_tokens": 8191, "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 4e-06, - "output_cost_per_token": 1.2e-05, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true + "mode": "embedding", + "output_cost_per_token": 0.0 }, - "azure_ai/mistral-small": { + "azure/text-embedding-ada-002": { + "input_cost_per_token": 1e-07, + "litellm_provider": "azure", + "max_input_tokens": 8191, "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "azure_ai", - "supports_function_calling": true, - "mode": "chat", - "supports_tool_choice": true + "mode": "embedding", + "output_cost_per_token": 0.0 }, - "azure_ai/mistral-small-2503": { - "max_tokens": 128000, + "azure/tts-1": { + "input_cost_per_character": 1.5e-05, + "litellm_provider": "azure", + "mode": "audio_speech" + }, + "azure/tts-1-hd": { + "input_cost_per_character": 3e-05, + "litellm_provider": "azure", + "mode": "audio_speech" + }, + "azure/us/gpt-4o-2024-08-06": { + "cache_read_input_token_cost": 1.375e-06, + "input_cost_per_token": 2.75e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "azure_ai", + "max_output_tokens": 16384, + "max_tokens": 16384, "mode": "chat", + "output_cost_per_token": 1.1e-05, "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, - "azure_ai/mistral-large-2407": { - "max_tokens": 4096, + "azure/us/gpt-4o-2024-11-20": { + "cache_creation_input_token_cost": 1.38e-06, + "input_cost_per_token": 2.75e-06, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.1e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/us/gpt-4o-mini-2024-07-18": { + "cache_read_input_token_cost": 8.3e-08, + "input_cost_per_token": 1.65e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6.6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/us/gpt-4o-mini-realtime-preview-2024-12-17": { + "cache_creation_input_audio_token_cost": 3.3e-07, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_audio_token": 1.1e-05, + "input_cost_per_token": 6.6e-07, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "azure_ai", - "supports_function_calling": true, + "max_tokens": 4096, "mode": "chat", - "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.mistral-ai-large-2407-offer?tab=Overview", + "output_cost_per_audio_token": 2.2e-05, + "output_cost_per_token": 2.64e-06, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, "supports_tool_choice": true }, - "azure_ai/mistral-large-latest": { - "max_tokens": 4096, + "azure/us/gpt-4o-realtime-preview-2024-10-01": { + "cache_creation_input_audio_token_cost": 2.2e-05, + "cache_read_input_token_cost": 2.75e-06, + "input_cost_per_audio_token": 0.00011, + "input_cost_per_token": 5.5e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "azure_ai", - "supports_function_calling": true, + "max_tokens": 4096, "mode": "chat", - "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.mistral-ai-large-2407-offer?tab=Overview", + "output_cost_per_audio_token": 0.00022, + "output_cost_per_token": 2.2e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, "supports_tool_choice": true }, - "azure_ai/ministral-3b": { - "max_tokens": 4096, + "azure/us/gpt-4o-realtime-preview-2024-12-17": { + "cache_read_input_audio_token_cost": 2.5e-06, + "cache_read_input_token_cost": 2.75e-06, + "input_cost_per_audio_token": 4.4e-05, + "input_cost_per_token": 5.5e-06, + "litellm_provider": "azure", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 4e-08, - "litellm_provider": "azure_ai", - "supports_function_calling": true, + "max_tokens": 4096, "mode": "chat", - "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.ministral-3b-2410-offer?tab=Overview", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 2.2e-05, + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, "supports_tool_choice": true }, + "azure/us/o1-2024-12-17": { + "cache_read_input_token_cost": 8.25e-06, + "input_cost_per_token": 1.65e-05, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6.6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure/us/o1-mini-2024-09-12": { + "cache_read_input_token_cost": 6.05e-07, + "input_cost_per_token": 1.21e-06, + "input_cost_per_token_batches": 6.05e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.84e-06, + "output_cost_per_token_batches": 2.42e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_vision": false + }, + "azure/us/o1-preview-2024-09-12": { + "cache_read_input_token_cost": 8.25e-06, + "input_cost_per_token": 1.65e-05, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6.6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_vision": false + }, + "azure/us/o3-mini-2025-01-31": { + "cache_read_input_token_cost": 6.05e-07, + "input_cost_per_token": 1.21e-06, + "input_cost_per_token_batches": 6.05e-07, + "litellm_provider": "azure", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.84e-06, + "output_cost_per_token_batches": 2.42e-06, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "azure/whisper-1": { + "input_cost_per_second": 0.0001, + "litellm_provider": "azure", + "mode": "audio_transcription", + "output_cost_per_second": 0.0001 + }, + "azure_ai/Cohere-embed-v3-english": { + "input_cost_per_token": 1e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024, + "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/cohere.cohere-embed-v3-english-offer?tab=PlansAndPrice", + "supports_embedding_image_input": true + }, + "azure_ai/Cohere-embed-v3-multilingual": { + "input_cost_per_token": 1e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024, + "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/cohere.cohere-embed-v3-english-offer?tab=PlansAndPrice", + "supports_embedding_image_input": true + }, + "azure_ai/FLUX-1.1-pro": { + "litellm_provider": "azure_ai", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/black-forest-labs-flux-1-kontext-pro-and-flux1-1-pro-now-available-in-azure-ai-f/4434659", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "azure_ai/FLUX.1-Kontext-pro": { + "litellm_provider": "azure_ai", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://azuremarketplace.microsoft.com/pt-br/marketplace/apps/cohere.cohere-embed-4-offer?tab=PlansAndPrice", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, "azure_ai/Llama-3.2-11B-Vision-Instruct": { - "max_tokens": 2048, + "input_cost_per_token": 3.7e-07, + "litellm_provider": "azure_ai", "max_input_tokens": 128000, "max_output_tokens": 2048, - "input_cost_per_token": 3.7e-07, - "output_cost_per_token": 3.7e-07, - "litellm_provider": "azure_ai", - "supports_function_calling": true, - "supports_vision": true, + "max_tokens": 2048, "mode": "chat", + "output_cost_per_token": 3.7e-07, "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/metagenai.meta-llama-3-2-11b-vision-instruct-offer?tab=Overview", - "supports_tool_choice": true + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure_ai/Llama-3.2-90B-Vision-Instruct": { + "input_cost_per_token": 2.04e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 2.04e-06, + "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/metagenai.meta-llama-3-2-90b-vision-instruct-offer?tab=Overview", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true }, "azure_ai/Llama-3.3-70B-Instruct": { - "max_tokens": 2048, + "input_cost_per_token": 7.1e-07, + "litellm_provider": "azure_ai", "max_input_tokens": 128000, "max_output_tokens": 2048, - "input_cost_per_token": 7.1e-07, + "max_tokens": 2048, + "mode": "chat", "output_cost_per_token": 7.1e-07, - "litellm_provider": "azure_ai", - "supports_function_calling": true, - "mode": "chat", "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/metagenai.llama-3-3-70b-instruct-offer?tab=Overview", - "supports_tool_choice": true - }, - "azure_ai/Llama-4-Scout-17B-16E-Instruct": { - "max_tokens": 16384, - "max_input_tokens": 10000000, - "max_output_tokens": 16384, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 7.8e-07, - "litellm_provider": "azure_ai", "supports_function_calling": true, - "supports_vision": true, - "mode": "chat", - "source": "https://azure.microsoft.com/en-us/blog/introducing-the-llama-4-herd-in-azure-ai-foundry-and-azure-databricks/", "supports_tool_choice": true }, "azure_ai/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "max_tokens": 16384, + "input_cost_per_token": 1.41e-06, + "litellm_provider": "azure_ai", "max_input_tokens": 1000000, "max_output_tokens": 16384, - "input_cost_per_token": 1.41e-06, + "max_tokens": 16384, + "mode": "chat", "output_cost_per_token": 3.5e-07, - "litellm_provider": "azure_ai", - "supports_function_calling": true, - "supports_vision": true, - "mode": "chat", "source": "https://azure.microsoft.com/en-us/blog/introducing-the-llama-4-herd-in-azure-ai-foundry-and-azure-databricks/", - "supports_tool_choice": true - }, - "azure_ai/Llama-3.2-90B-Vision-Instruct": { - "max_tokens": 2048, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 2.04e-06, - "output_cost_per_token": 2.04e-06, - "litellm_provider": "azure_ai", "supports_function_calling": true, - "supports_vision": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "azure_ai/Llama-4-Scout-17B-16E-Instruct": { + "input_cost_per_token": 2e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 10000000, + "max_output_tokens": 16384, + "max_tokens": 16384, "mode": "chat", - "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/metagenai.meta-llama-3-2-90b-vision-instruct-offer?tab=Overview", - "supports_tool_choice": true + "output_cost_per_token": 7.8e-07, + "source": "https://azure.microsoft.com/en-us/blog/introducing-the-llama-4-herd-in-azure-ai-foundry-and-azure-databricks/", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true }, "azure_ai/Meta-Llama-3-70B-Instruct": { - "max_tokens": 2048, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "azure_ai", "max_input_tokens": 8192, "max_output_tokens": 2048, - "input_cost_per_token": 1.1e-06, + "max_tokens": 2048, + "mode": "chat", "output_cost_per_token": 3.7e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_tool_choice": true - }, - "azure_ai/Meta-Llama-3.1-8B-Instruct": { - "max_tokens": 2048, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 6.1e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/metagenai.meta-llama-3-1-8b-instruct-offer?tab=PlansAndPrice", - "supports_tool_choice": true - }, - "azure_ai/Meta-Llama-3.1-70B-Instruct": { - "max_tokens": 2048, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 2.68e-06, - "output_cost_per_token": 3.54e-06, - "litellm_provider": "azure_ai", - "mode": "chat", - "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/metagenai.meta-llama-3-1-70b-instruct-offer?tab=PlansAndPrice", "supports_tool_choice": true }, "azure_ai/Meta-Llama-3.1-405B-Instruct": { - "max_tokens": 2048, + "input_cost_per_token": 5.33e-06, + "litellm_provider": "azure_ai", "max_input_tokens": 128000, "max_output_tokens": 2048, - "input_cost_per_token": 5.33e-06, - "output_cost_per_token": 1.6e-05, - "litellm_provider": "azure_ai", + "max_tokens": 2048, "mode": "chat", + "output_cost_per_token": 1.6e-05, "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/metagenai.meta-llama-3-1-405b-instruct-offer?tab=PlansAndPrice", "supports_tool_choice": true }, - "azure_ai/Phi-4-mini-instruct": { - "max_tokens": 4096, - "max_input_tokens": 131072, - "max_output_tokens": 4096, - "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 3e-07, + "azure_ai/Meta-Llama-3.1-70B-Instruct": { + "input_cost_per_token": 2.68e-06, "litellm_provider": "azure_ai", - "mode": "chat", - "supports_function_calling": true, - "source": "https://techcommunity.microsoft.com/blog/Azure-AI-Services-blog/announcing-new-phi-pricing-empowering-your-business-with-small-language-models/4395112" - }, - "azure_ai/Phi-4-multimodal-instruct": { - "max_tokens": 4096, - "max_input_tokens": 131072, - "max_output_tokens": 4096, - "input_cost_per_token": 8e-08, - "input_cost_per_audio_token": 4e-06, - "output_cost_per_token": 3.2e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_audio_input": true, - "supports_function_calling": true, - "supports_vision": true, - "source": "https://techcommunity.microsoft.com/blog/Azure-AI-Services-blog/announcing-new-phi-pricing-empowering-your-business-with-small-language-models/4395112" - }, - "azure_ai/Phi-4": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/affordable-innovation-unveiling-the-pricing-of-phi-3-slms-on-models-as-a-service/4156495", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "azure_ai/Phi-3.5-mini-instruct": { - "max_tokens": 4096, "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 5.2e-07, - "litellm_provider": "azure_ai", + "max_output_tokens": 2048, + "max_tokens": 2048, "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "output_cost_per_token": 3.54e-06, + "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/metagenai.meta-llama-3-1-70b-instruct-offer?tab=PlansAndPrice", "supports_tool_choice": true }, - "azure_ai/Phi-3.5-vision-instruct": { - "max_tokens": 4096, + "azure_ai/Meta-Llama-3.1-8B-Instruct": { + "input_cost_per_token": 3e-07, + "litellm_provider": "azure_ai", "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 5.2e-07, - "litellm_provider": "azure_ai", + "max_output_tokens": 2048, + "max_tokens": 2048, "mode": "chat", - "supports_vision": true, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true - }, - "azure_ai/Phi-3.5-MoE-instruct": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.6e-07, - "output_cost_per_token": 6.4e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true - }, - "azure_ai/Phi-3-mini-4k-instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 5.2e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true - }, - "azure_ai/Phi-3-mini-128k-instruct": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 5.2e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true - }, - "azure_ai/Phi-3-small-8k-instruct": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true - }, - "azure_ai/Phi-3-small-128k-instruct": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true - }, - "azure_ai/Phi-3-medium-4k-instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1.7e-07, - "output_cost_per_token": 6.8e-07, - "litellm_provider": "azure_ai", - "mode": "chat", - "supports_vision": false, - "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "output_cost_per_token": 6.1e-07, + "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/metagenai.meta-llama-3-1-8b-instruct-offer?tab=PlansAndPrice", "supports_tool_choice": true }, "azure_ai/Phi-3-medium-128k-instruct": { - "max_tokens": 4096, + "input_cost_per_token": 1.7e-07, + "litellm_provider": "azure_ai", "max_input_tokens": 128000, "max_output_tokens": 4096, - "input_cost_per_token": 1.7e-07, - "output_cost_per_token": 6.8e-07, - "litellm_provider": "azure_ai", + "max_tokens": 4096, "mode": "chat", - "supports_vision": false, + "output_cost_per_token": 6.8e-07, "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_vision": false }, - "azure_ai/cohere-rerank-v3.5": { - "max_tokens": 4096, + "azure_ai/Phi-3-medium-4k-instruct": { + "input_cost_per_token": 1.7e-07, + "litellm_provider": "azure_ai", "max_input_tokens": 4096, "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "azure_ai", - "mode": "rerank" - }, - "azure_ai/cohere-rerank-v3-multilingual": { "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6.8e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3-mini-128k-instruct": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5.2e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3-mini-4k-instruct": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "azure_ai", "max_input_tokens": 4096, "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5.2e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3-small-128k-instruct": { + "input_cost_per_token": 1.5e-07, "litellm_provider": "azure_ai", - "mode": "rerank" + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3-small-8k-instruct": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3.5-MoE-instruct": { + "input_cost_per_token": 1.6e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6.4e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3.5-mini-instruct": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5.2e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-3.5-vision-instruct": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5.2e-07, + "source": "https://azure.microsoft.com/en-us/pricing/details/phi-3/", + "supports_tool_choice": true, + "supports_vision": true + }, + "azure_ai/Phi-4": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 5e-07, + "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/affordable-innovation-unveiling-the-pricing-of-phi-3-slms-on-models-as-a-service/4156495", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "azure_ai/Phi-4-mini-instruct": { + "input_cost_per_token": 7.5e-08, + "litellm_provider": "azure_ai", + "max_input_tokens": 131072, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://techcommunity.microsoft.com/blog/Azure-AI-Services-blog/announcing-new-phi-pricing-empowering-your-business-with-small-language-models/4395112", + "supports_function_calling": true + }, + "azure_ai/Phi-4-multimodal-instruct": { + "input_cost_per_audio_token": 4e-06, + "input_cost_per_token": 8e-08, + "litellm_provider": "azure_ai", + "max_input_tokens": 131072, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3.2e-07, + "source": "https://techcommunity.microsoft.com/blog/Azure-AI-Services-blog/announcing-new-phi-pricing-empowering-your-business-with-small-language-models/4395112", + "supports_audio_input": true, + "supports_function_calling": true, + "supports_vision": true }, "azure_ai/cohere-rerank-v3-english": { - "max_tokens": 4096, + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "azure_ai", "max_input_tokens": 4096, "max_output_tokens": 4096, "max_query_tokens": 2048, - "input_cost_per_token": 0.0, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "azure_ai/cohere-rerank-v3-multilingual": { "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, + "input_cost_per_token": 0.0, "litellm_provider": "azure_ai", - "mode": "rerank" + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 }, - "azure_ai/Cohere-embed-v3-english": { - "max_tokens": 512, - "max_input_tokens": 512, - "output_vector_size": 1024, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, + "azure_ai/cohere-rerank-v3.5": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, "litellm_provider": "azure_ai", - "mode": "embedding", - "supports_embedding_image_input": true, - "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/cohere.cohere-embed-v3-english-offer?tab=PlansAndPrice" + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 }, - "azure_ai/Cohere-embed-v3-multilingual": { - "max_tokens": 512, - "max_input_tokens": 512, - "output_vector_size": 1024, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, + "azure_ai/deepseek-r1": { + "input_cost_per_token": 1.35e-06, "litellm_provider": "azure_ai", - "mode": "embedding", - "supports_embedding_image_input": true, - "source": "https://azuremarketplace.microsoft.com/en-us/marketplace/apps/cohere.cohere-embed-v3-english-offer?tab=PlansAndPrice" + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5.4e-06, + "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/deepseek-r1-improved-performance-higher-limits-and-transparent-pricing/4386367", + "supports_reasoning": true, + "supports_tool_choice": true + }, + "azure_ai/deepseek-v3": { + "input_cost_per_token": 1.14e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4.56e-06, + "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/announcing-deepseek-v3-on-azure-ai-foundry-and-github/4390438", + "supports_tool_choice": true + }, + "azure_ai/deepseek-v3-0324": { + "input_cost_per_token": 1.14e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4.56e-06, + "source": "https://techcommunity.microsoft.com/blog/machinelearningblog/announcing-deepseek-v3-on-azure-ai-foundry-and-github/4390438", + "supports_function_calling": true, + "supports_tool_choice": true }, "azure_ai/embed-v-4-0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "output_vector_size": 3072, "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_tokens": 128000, "mode": "embedding", - "supports_embedding_image_input": true, + "output_cost_per_token": 0.0, + "output_vector_size": 3072, + "source": "https://azuremarketplace.microsoft.com/pt-br/marketplace/apps/cohere.cohere-embed-4-offer?tab=PlansAndPrice", "supported_endpoints": [ "/v1/embeddings" ], @@ -4833,3766 +3210,5459 @@ "text", "image" ], - "source": "https://azuremarketplace.microsoft.com/pt-br/marketplace/apps/cohere.cohere-embed-4-offer?tab=PlansAndPrice" + "supports_embedding_image_input": true }, - "azure_ai/FLUX-1.1-pro": { - "output_cost_per_image": 0.04, + "azure_ai/global/grok-3": { + "input_cost_per_token": 3e-06, "litellm_provider": "azure_ai", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/black-forest-labs-flux-1-kontext-pro-and-flux1-1-pro-now-available-in-azure-ai-f/4434659" + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true }, - "azure_ai/FLUX.1-Kontext-pro": { - "output_cost_per_image": 0.04, + "azure_ai/global/grok-3-mini": { + "input_cost_per_token": 2.5e-07, "litellm_provider": "azure_ai", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://azuremarketplace.microsoft.com/pt-br/marketplace/apps/cohere.cohere-embed-4-offer?tab=PlansAndPrice" + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.27e-06, + "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "azure_ai/grok-3": { + "input_cost_per_token": 3.3e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "azure_ai/grok-3-mini": { + "input_cost_per_token": 2.75e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.38e-06, + "source": "https://devblogs.microsoft.com/foundry/announcing-grok-3-and-grok-3-mini-on-azure-ai-foundry/", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "azure_ai/jais-30b-chat": { + "input_cost_per_token": 0.0032, + "litellm_provider": "azure_ai", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.00971, + "source": "https://azure.microsoft.com/en-us/products/ai-services/ai-foundry/models/jais-30b-chat" + }, + "azure_ai/jamba-instruct": { + "input_cost_per_token": 5e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 70000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7e-07, + "supports_tool_choice": true + }, + "azure_ai/ministral-3b": { + "input_cost_per_token": 4e-08, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 4e-08, + "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.ministral-3b-2410-offer?tab=Overview", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure_ai/mistral-large": { + "input_cost_per_token": 4e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 1.2e-05, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure_ai/mistral-large-2407": { + "input_cost_per_token": 2e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-06, + "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.mistral-ai-large-2407-offer?tab=Overview", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure_ai/mistral-large-latest": { + "input_cost_per_token": 2e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-06, + "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.mistral-ai-large-2407-offer?tab=Overview", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure_ai/mistral-medium-2505": { + "input_cost_per_token": 4e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 131072, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure_ai/mistral-nemo": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "azure_ai", + "max_input_tokens": 131072, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://azuremarketplace.microsoft.com/en/marketplace/apps/000-000.mistral-nemo-12b-2407?tab=PlansAndPrice", + "supports_function_calling": true + }, + "azure_ai/mistral-small": { + "input_cost_per_token": 1e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "azure_ai/mistral-small-2503": { + "input_cost_per_token": 1e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true }, "babbage-002": { - "max_tokens": 16384, + "input_cost_per_token": 4e-07, + "litellm_provider": "text-completion-openai", "max_input_tokens": 16384, "max_output_tokens": 4096, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "text-completion-openai", - "mode": "completion" - }, - "davinci-002": { "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "text-completion-openai", - "mode": "completion" - }, - "gpt-3.5-turbo-instruct": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "text-completion-openai", - "mode": "completion" - }, - "gpt-3.5-turbo-instruct-0914": { - "max_tokens": 4097, - "max_input_tokens": 8192, - "max_output_tokens": 4097, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "text-completion-openai", - "mode": "completion" - }, - "mistral/mistral-tiny": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "mistral", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-small": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "mistral", - "supports_function_calling": true, - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-small-latest": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "mistral", - "supports_function_calling": true, - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-medium": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 2.7e-06, - "output_cost_per_token": 8.1e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-medium-latest": { - "max_tokens": 8191, - "max_input_tokens": 131072, - "max_output_tokens": 8191, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-medium-2505": { - "max_tokens": 8191, - "max_input_tokens": 131072, - "max_output_tokens": 8191, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-medium-2312": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 2.7e-06, - "output_cost_per_token": 8.1e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-large-latest": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-large-2411": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-large-2402": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 4e-06, - "output_cost_per_token": 1.2e-05, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/mistral-large-2407": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 9e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/pixtral-large-latest": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/pixtral-large-2411": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/pixtral-12b-2409": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/open-mistral-7b": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "mistral", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/open-mixtral-8x7b": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/open-mixtral-8x22b": { - "max_tokens": 8191, - "max_input_tokens": 65336, - "max_output_tokens": 8191, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/codestral-latest": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/codestral-2405": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "mistral", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/open-mistral-nemo": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/technology/", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/open-mistral-nemo-2407": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/technology/", - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/open-codestral-mamba": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/technology/", - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "mistral/codestral-mamba-latest": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/technology/", - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "mistral/devstral-small-2505": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/news/devstral", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/devstral-small-2507": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/news/devstral", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/devstral-medium-2507": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/news/devstral", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_response_schema": true - }, - "mistral/magistral-medium-latest": { - "max_tokens": 40000, - "max_input_tokens": 40000, - "max_output_tokens": 40000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/news/magistral", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": true - }, - "mistral/magistral-medium-2506": { - "max_tokens": 40000, - "max_input_tokens": 40000, - "max_output_tokens": 40000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/news/magistral", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": true - }, - "mistral/magistral-small-latest": { - "max_tokens": 40000, - "max_input_tokens": 40000, - "max_output_tokens": 40000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/pricing#api-pricing", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": true - }, - "mistral/magistral-small-2506": { - "max_tokens": 40000, - "max_input_tokens": 40000, - "max_output_tokens": 40000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "mistral", - "mode": "chat", - "source": "https://mistral.ai/pricing#api-pricing", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": true - }, - "mistral/mistral-embed": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "input_cost_per_token": 1e-07, - "litellm_provider": "mistral", - "mode": "embedding" - }, - "deepseek/deepseek-reasoner": { - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 5.5e-07, - "input_cost_per_token_cache_hit": 1.4e-07, - "output_cost_per_token": 2.19e-06, - "litellm_provider": "deepseek", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "deepseek/deepseek-chat": { - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 2.7e-07, - "input_cost_per_token_cache_hit": 7e-08, - "cache_read_input_token_cost": 7e-08, - "cache_creation_input_token_cost": 0.0, - "output_cost_per_token": 1.1e-06, - "litellm_provider": "deepseek", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "deepseek/deepseek-r1": { - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 5.5e-07, - "input_cost_per_token_cache_hit": 1.4e-07, - "output_cost_per_token": 2.19e-06, - "litellm_provider": "deepseek", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_prompt_caching": true - }, - "deepseek/deepseek-v3": { - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 2.7e-07, - "input_cost_per_token_cache_hit": 7e-08, - "cache_read_input_token_cost": 7e-08, - "cache_creation_input_token_cost": 0.0, - "output_cost_per_token": 1.1e-06, - "litellm_provider": "deepseek", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "codestral/codestral-latest": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "codestral", - "mode": "chat", - "source": "https://docs.mistral.ai/capabilities/code_generation/", - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "codestral/codestral-2405": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "codestral", - "mode": "chat", - "source": "https://docs.mistral.ai/capabilities/code_generation/", - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "text-completion-codestral/codestral-latest": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "text-completion-codestral", "mode": "completion", - "source": "https://docs.mistral.ai/capabilities/code_generation/" + "output_cost_per_token": 4e-07 }, - "text-completion-codestral/codestral-2405": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "text-completion-codestral", - "mode": "completion", - "source": "https://docs.mistral.ai/capabilities/code_generation/" - }, - "xai/grok-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-2-vision-1212": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "input_cost_per_image": 2e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-2-vision-latest": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "input_cost_per_image": 2e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-2-vision": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "input_cost_per_image": 2e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-3": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-latest": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-fast-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 2.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-fast-latest": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 2.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-mini": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-mini-latest": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-mini-fast": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 4e-06, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-mini-fast-latest": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 4e-06, - "litellm_provider": "xai", - "mode": "chat", - "supports_reasoning": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-mini-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-3-mini-fast-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 4e-06, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_response_schema": false, - "source": "https://x.ai/api#pricing", - "supports_web_search": true - }, - "xai/grok-vision-beta": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-06, - "input_cost_per_image": 5e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-2-1212": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-2": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-2-latest": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_web_search": true - }, - "xai/grok-code-fast-1": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 0.2e-06, - "output_cost_per_token": 1.5e-06, - "cache_read_input_token_cost": 0.02e-06, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://docs.x.ai/docs/models" - }, - "xai/grok-code-fast": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 0.2e-06, - "output_cost_per_token": 1.5e-06, - "cache_read_input_token_cost": 0.02e-06, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://docs.x.ai/docs/models" - }, - "xai/grok-code-fast-1-0825": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 0.2e-06, - "output_cost_per_token": 1.5e-06, - "cache_read_input_token_cost": 0.02e-06, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://docs.x.ai/docs/models" - }, - "xai/grok-4": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://docs.x.ai/docs/models", - "supports_web_search": true - }, - "xai/grok-4-0709": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://docs.x.ai/docs/models", - "supports_web_search": true - }, - "xai/grok-4-latest": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "xai", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://docs.x.ai/docs/models", - "supports_web_search": true - }, - "deepseek/deepseek-coder": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.4e-07, - "input_cost_per_token_cache_hit": 1.4e-08, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "deepseek", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "groq/deepseek-r1-distill-llama-70b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 7.5e-07, - "output_cost_per_token": 9.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "groq/llama-3.3-70b-versatile": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 7.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "groq/llama-3.3-70b-specdec": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 9.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_tool_choice": true, - "deprecation_date": "2025-04-14" - }, - "groq/llama-guard-3-8b": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "groq", - "mode": "chat" - }, - "groq/llama2-70b-4096": { - "max_tokens": 4096, + "bedrock/*/1-month-commitment/cohere.command-light-text-v14": { + "input_cost_per_second": 0.001902, + "litellm_provider": "bedrock", "max_input_tokens": 4096, "max_output_tokens": 4096, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "groq", + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, + "output_cost_per_second": 0.001902, "supports_tool_choice": true }, - "groq/llama-3.2-1b-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 4e-08, - "litellm_provider": "groq", + "bedrock/*/1-month-commitment/cohere.command-text-v14": { + "input_cost_per_second": 0.011, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2025-04-14" - }, - "groq/llama-3.2-3b-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 6e-08, - "output_cost_per_token": 6e-08, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2025-04-14" - }, - "groq/llama-3.2-11b-text-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 1.8e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2024-10-28" - }, - "groq/llama-3.2-11b-vision-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 1.8e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true, - "deprecation_date": "2025-04-14" - }, - "groq/llama-3.2-90b-text-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2024-11-25" - }, - "groq/llama-3.2-90b-vision-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true, - "deprecation_date": "2025-04-14" - }, - "groq/llama-3.1-8b-instant": { - "max_tokens": 8192, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 8e-08, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, + "output_cost_per_second": 0.011, "supports_tool_choice": true }, - "groq/llama-3.1-70b-versatile": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 7.9e-07, - "litellm_provider": "groq", + "bedrock/*/6-month-commitment/cohere.command-light-text-v14": { + "input_cost_per_second": 0.0011416, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2025-01-24" - }, - "groq/llama-3.1-405b-reasoning": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 7.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, + "output_cost_per_second": 0.0011416, "supports_tool_choice": true }, - "groq/meta-llama/llama-4-scout-17b-16e-instruct": { - "max_tokens": 8192, - "max_input_tokens": 131072, - "max_output_tokens": 8192, - "input_cost_per_token": 1.1e-07, - "output_cost_per_token": 3.4e-07, - "litellm_provider": "groq", + "bedrock/*/6-month-commitment/cohere.command-text-v14": { + "input_cost_per_second": 0.0066027, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, + "output_cost_per_second": 0.0066027, "supports_tool_choice": true }, - "groq/meta-llama/llama-4-maverick-17b-128e-instruct": { - "max_tokens": 8192, - "max_input_tokens": 131072, + "bedrock/ap-northeast-1/1-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.01475, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.01475, + "supports_tool_choice": true + }, + "bedrock/ap-northeast-1/1-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.0455, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0455 + }, + "bedrock/ap-northeast-1/1-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.0455, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0455, + "supports_tool_choice": true + }, + "bedrock/ap-northeast-1/6-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.008194, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.008194, + "supports_tool_choice": true + }, + "bedrock/ap-northeast-1/6-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.02527, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.02527 + }, + "bedrock/ap-northeast-1/6-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.02527, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.02527, + "supports_tool_choice": true + }, + "bedrock/ap-northeast-1/anthropic.claude-instant-v1": { + "input_cost_per_token": 2.23e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 7.55e-06, + "supports_tool_choice": true + }, + "bedrock/ap-northeast-1/anthropic.claude-v1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/ap-northeast-1/anthropic.claude-v2:1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/ap-south-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 3.18e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4.2e-06 + }, + "bedrock/ap-south-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3.6e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.2e-07 + }, + "bedrock/ca-central-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 3.05e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4.03e-06 + }, + "bedrock/ca-central-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6.9e-07 + }, + "bedrock/eu-central-1/1-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.01635, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.01635, + "supports_tool_choice": true + }, + "bedrock/eu-central-1/1-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.0415, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0415 + }, + "bedrock/eu-central-1/1-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.0415, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0415, + "supports_tool_choice": true + }, + "bedrock/eu-central-1/6-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.009083, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.009083, + "supports_tool_choice": true + }, + "bedrock/eu-central-1/6-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.02305, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.02305 + }, + "bedrock/eu-central-1/6-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.02305, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.02305, + "supports_tool_choice": true + }, + "bedrock/eu-central-1/anthropic.claude-instant-v1": { + "input_cost_per_token": 2.48e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 8.38e-06, + "supports_tool_choice": true + }, + "bedrock/eu-central-1/anthropic.claude-v1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05 + }, + "bedrock/eu-central-1/anthropic.claude-v2:1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/eu-west-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 2.86e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 3.78e-06 + }, + "bedrock/eu-west-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3.2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6.5e-07 + }, + "bedrock/eu-west-2/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 3.45e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4.55e-06 + }, + "bedrock/eu-west-2/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3.9e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.8e-07 + }, + "bedrock/eu-west-3/mistral.mistral-7b-instruct-v0:2": { "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "groq/mistral-saba-24b": { - "max_tokens": 32000, + "litellm_provider": "bedrock", "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 7.9e-07, - "output_cost_per_token": 7.9e-07, - "litellm_provider": "groq", - "mode": "chat" - }, - "groq/mixtral-8x7b-32768": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 2.4e-07, - "output_cost_per_token": 2.4e-07, - "litellm_provider": "groq", + "max_output_tokens": 8191, + "max_tokens": 8191, "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2025-03-20" - }, - "groq/gemma-7b-it": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 7e-08, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2024-12-18" - }, - "groq/gemma2-9b-it": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false - }, - "groq/llama3-groq-70b-8192-tool-use-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 8.9e-07, - "output_cost_per_token": 8.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2025-01-06" - }, - "groq/llama3-groq-8b-8192-tool-use-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.9e-07, - "output_cost_per_token": 1.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "deprecation_date": "2025-01-06" - }, - "groq/qwen/qwen3-32b": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 2.9e-07, - "output_cost_per_token": 5.9e-07, - "litellm_provider": "groq", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_reasoning": true, + "output_cost_per_token": 2.6e-07, "supports_tool_choice": true }, - "groq/moonshotai/kimi-k2-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 16384, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "groq", + "bedrock/eu-west-3/mistral.mistral-large-2402-v1:0": { + "input_cost_per_token": 1.04e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, + "output_cost_per_token": 3.12e-05, + "supports_function_calling": true + }, + "bedrock/eu-west-3/mistral.mixtral-8x7b-instruct-v0:1": { + "input_cost_per_token": 5.9e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 9.1e-07, "supports_tool_choice": true }, - "groq/playai-tts": { - "max_tokens": 10000, - "max_input_tokens": 10000, - "max_output_tokens": 10000, - "input_cost_per_character": 5e-05, - "litellm_provider": "groq", - "mode": "audio_speech" - }, - "groq/whisper-large-v3": { - "input_cost_per_second": 3.083e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "groq", - "mode": "audio_transcription" - }, - "groq/whisper-large-v3-turbo": { - "input_cost_per_second": 1.111e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "groq", - "mode": "audio_transcription" - }, - "groq/distil-whisper-large-v3-en": { - "input_cost_per_second": 5.56e-06, - "output_cost_per_second": 0.0, - "litellm_provider": "groq", - "mode": "audio_transcription" - }, - "groq/openai/gpt-oss-20b": { - "max_tokens": 32768, - "max_input_tokens": 131072, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "groq", + "bedrock/invoke/anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Anthropic via Invoke route does not currently support pdf input." + }, "mode": "chat", + "output_cost_per_token": 1.5e-05, "supports_function_calling": true, - "supports_parallel_function_calling": true, "supports_response_schema": true, - "supports_reasoning": true, "supports_tool_choice": true, - "supports_web_search": true + "supports_vision": true }, - "groq/openai/gpt-oss-120b": { - "max_tokens": 32766, - "max_input_tokens": 131072, - "max_output_tokens": 32766, + "bedrock/sa-east-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 4.45e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5.88e-06 + }, + "bedrock/sa-east-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.01e-06 + }, + "bedrock/us-east-1/1-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.011, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.011, + "supports_tool_choice": true + }, + "bedrock/us-east-1/1-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.0175, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0175 + }, + "bedrock/us-east-1/1-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.0175, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0175, + "supports_tool_choice": true + }, + "bedrock/us-east-1/6-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.00611, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.00611, + "supports_tool_choice": true + }, + "bedrock/us-east-1/6-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.00972, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.00972 + }, + "bedrock/us-east-1/6-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.00972, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.00972, + "supports_tool_choice": true + }, + "bedrock/us-east-1/anthropic.claude-instant-v1": { + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-06, + "supports_tool_choice": true + }, + "bedrock/us-east-1/anthropic.claude-v1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/us-east-1/anthropic.claude-v2:1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/us-east-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 2.65e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 3.5e-06 + }, + "bedrock/us-east-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "bedrock/us-east-1/mistral.mistral-7b-instruct-v0:2": { "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 7.5e-07, - "litellm_provider": "groq", + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supports_web_search": true + "output_cost_per_token": 2e-07, + "supports_tool_choice": true }, - "cerebras/llama3.1-8b": { - "max_tokens": 128000, + "bedrock/us-east-1/mistral.mistral-large-2402-v1:0": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_function_calling": true + }, + "bedrock/us-east-1/mistral.mixtral-8x7b-instruct-v0:1": { + "input_cost_per_token": 4.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 7e-07, + "supports_tool_choice": true + }, + "bedrock/us-gov-east-1/amazon.nova-pro-v1:0": { + "input_cost_per_token": 9.6e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 3.84e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "bedrock/us-gov-east-1/amazon.titan-embed-text-v1": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1536 + }, + "bedrock/us-gov-east-1/amazon.titan-embed-text-v2:0": { + "input_cost_per_token": 2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024 + }, + "bedrock/us-gov-east-1/amazon.titan-text-express-v1": { + "input_cost_per_token": 1.3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 8000, + "max_tokens": 8000, + "mode": "chat", + "output_cost_per_token": 1.7e-06 + }, + "bedrock/us-gov-east-1/amazon.titan-text-lite-v1": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 4000, + "max_tokens": 4000, + "mode": "chat", + "output_cost_per_token": 4e-07 + }, + "bedrock/us-gov-east-1/amazon.titan-text-premier-v1:0": { + "input_cost_per_token": 5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 1.5e-06 + }, + "bedrock/us-gov-east-1/anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3.6e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.8e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "bedrock/us-gov-east-1/anthropic.claude-3-haiku-20240307-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "bedrock/us-gov-east-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 2.65e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8000, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 3.5e-06, + "supports_pdf_input": true + }, + "bedrock/us-gov-east-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8000, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 2.65e-06, + "supports_pdf_input": true + }, + "bedrock/us-gov-west-1/amazon.nova-pro-v1:0": { + "input_cost_per_token": 9.6e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 3.84e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "bedrock/us-gov-west-1/amazon.titan-embed-text-v1": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1536 + }, + "bedrock/us-gov-west-1/amazon.titan-embed-text-v2:0": { + "input_cost_per_token": 2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1024 + }, + "bedrock/us-gov-west-1/amazon.titan-text-express-v1": { + "input_cost_per_token": 1.3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 8000, + "max_tokens": 8000, + "mode": "chat", + "output_cost_per_token": 1.7e-06 + }, + "bedrock/us-gov-west-1/amazon.titan-text-lite-v1": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 4000, + "max_tokens": 4000, + "mode": "chat", + "output_cost_per_token": 4e-07 + }, + "bedrock/us-gov-west-1/amazon.titan-text-premier-v1:0": { + "input_cost_per_token": 5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 42000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 1.5e-06 + }, + "bedrock/us-gov-west-1/anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3.6e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.8e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "bedrock/us-gov-west-1/anthropic.claude-3-haiku-20240307-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "bedrock/us-gov-west-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 2.65e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8000, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 3.5e-06, + "supports_pdf_input": true + }, + "bedrock/us-gov-west-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8000, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 2.65e-06, + "supports_pdf_input": true + }, + "bedrock/us-west-1/meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 2.65e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 3.5e-06 + }, + "bedrock/us-west-1/meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "bedrock/us-west-2/1-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.011, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.011, + "supports_tool_choice": true + }, + "bedrock/us-west-2/1-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.0175, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0175 + }, + "bedrock/us-west-2/1-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.0175, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.0175, + "supports_tool_choice": true + }, + "bedrock/us-west-2/6-month-commitment/anthropic.claude-instant-v1": { + "input_cost_per_second": 0.00611, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.00611, + "supports_tool_choice": true + }, + "bedrock/us-west-2/6-month-commitment/anthropic.claude-v1": { + "input_cost_per_second": 0.00972, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.00972 + }, + "bedrock/us-west-2/6-month-commitment/anthropic.claude-v2:1": { + "input_cost_per_second": 0.00972, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_second": 0.00972, + "supports_tool_choice": true + }, + "bedrock/us-west-2/anthropic.claude-instant-v1": { + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-06, + "supports_tool_choice": true + }, + "bedrock/us-west-2/anthropic.claude-v1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/us-west-2/anthropic.claude-v2:1": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 100000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "bedrock/us-west-2/mistral.mistral-7b-instruct-v0:2": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_tool_choice": true + }, + "bedrock/us-west-2/mistral.mistral-large-2402-v1:0": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_function_calling": true + }, + "bedrock/us-west-2/mistral.mixtral-8x7b-instruct-v0:1": { + "input_cost_per_token": 4.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 7e-07, + "supports_tool_choice": true + }, + "bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0": { + "cache_creation_input_token_cost": 1e-06, + "cache_read_input_token_cost": 8e-08, + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "cerebras/llama-3.3-70b": { + "input_cost_per_token": 8.5e-07, + "litellm_provider": "cerebras", "max_input_tokens": 128000, "max_output_tokens": 128000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "cerebras", + "max_tokens": 128000, "mode": "chat", + "output_cost_per_token": 1.2e-06, "supports_function_calling": true, "supports_tool_choice": true }, "cerebras/llama3.1-70b": { - "max_tokens": 128000, + "input_cost_per_token": 6e-07, + "litellm_provider": "cerebras", "max_input_tokens": 128000, "max_output_tokens": 128000, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "cerebras", + "max_tokens": 128000, "mode": "chat", + "output_cost_per_token": 6e-07, "supports_function_calling": true, "supports_tool_choice": true }, - "cerebras/llama-3.3-70b": { - "max_tokens": 128000, + "cerebras/llama3.1-8b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "cerebras", "max_input_tokens": 128000, "max_output_tokens": 128000, - "input_cost_per_token": 8.5e-07, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "cerebras", + "max_tokens": 128000, "mode": "chat", + "output_cost_per_token": 1e-07, "supports_function_calling": true, "supports_tool_choice": true }, + "cerebras/openai/gpt-oss-120b": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "cerebras", + "max_input_tokens": 131072, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6.9e-07, + "source": "https://www.cerebras.ai/blog/openai-gpt-oss-120b-runs-fastest-on-cerebras", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, "cerebras/qwen-3-32b": { - "max_tokens": 128000, + "input_cost_per_token": 4e-07, + "litellm_provider": "cerebras", "max_input_tokens": 128000, "max_output_tokens": 128000, - "input_cost_per_token": 4e-07, + "max_tokens": 128000, + "mode": "chat", "output_cost_per_token": 8e-07, - "litellm_provider": "cerebras", - "mode": "chat", + "source": "https://inference-docs.cerebras.ai/support/pricing", "supports_function_calling": true, - "supports_tool_choice": true, - "source": "https://inference-docs.cerebras.ai/support/pricing" - }, - - "cerebras/openai/gpt-oss-120b": { - "max_tokens": 32768, - "max_input_tokens": 131072, - "max_output_tokens": 32768, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 6.9e-07, - "litellm_provider": "cerebras", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "source": "https://www.cerebras.ai/blog/openai-gpt-oss-120b-runs-fastest-on-cerebras" - }, - "friendliai/meta-llama-3.1-8b-instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "friendliai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_response_schema": true, "supports_tool_choice": true }, - "friendliai/meta-llama-3.1-70b-instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "friendliai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "claude-3-haiku-20240307": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "cache_creation_input_token_cost": 3e-07, - "cache_read_input_token_cost": 3e-08, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 264, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-03-01", - "supports_tool_choice": true - }, - "claude-3-5-haiku-20241022": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 4e-06, - "cache_creation_input_token_cost": 1e-06, - "cache_read_input_token_cost": 8e-08, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 264, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true, - "supports_web_search": true - }, - "claude-3-5-haiku-latest": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "cache_creation_input_token_cost": 1.25e-06, - "cache_read_input_token_cost": 1e-07, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 264, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true, - "supports_web_search": true - }, - "claude-3-opus-latest": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 395, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-03-01", - "supports_tool_choice": true - }, - "claude-3-opus-20240229": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 395, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-03-01", - "supports_tool_choice": true - }, - "claude-3-5-sonnet-latest": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-06-01", - "supports_tool_choice": true, - "supports_web_search": true - }, - "claude-3-5-sonnet-20240620": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-06-01", - "supports_tool_choice": true - }, - "claude-opus-4-20250514": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "claude-opus-4-1": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "claude-opus-4-1-20250805": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "claude-sonnet-4-20250514": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "claude-4-opus-20250514": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "claude-4-sonnet-20250514": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_token_above_200k_tokens": 6e-06, - "output_cost_per_token_above_200k_tokens": 2.25e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "claude-3-7-sonnet-latest": { - "supports_computer_use": true, - "max_tokens": 128000, - "max_input_tokens": 200000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-06-01", - "supports_tool_choice": true, - "supports_reasoning": true - }, - "claude-3-7-sonnet-20250219": { - "supports_computer_use": true, - "max_tokens": 128000, - "max_input_tokens": 200000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2026-02-01", - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_web_search": true - }, - "claude-3-5-sonnet-20241022": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true, - "supports_web_search": true - }, - "text-bison": { - "max_tokens": 2048, - "max_input_tokens": 8192, - "max_output_tokens": 2048, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-bison@001": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-bison@002": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-bison32k": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-bison32k@002": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-unicorn": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 2.8e-05, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-unicorn@001": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 2.8e-05, - "litellm_provider": "vertex_ai-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, "chat-bison": { - "max_tokens": 4096, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-chat-models", "max_input_tokens": 8192, "max_output_tokens": 4096, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-chat-models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true - }, - "chat-bison@001": { "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-chat-models", "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true - }, - "chat-bison@002": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-chat-models", - "mode": "chat", + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "deprecation_date": "2025-04-09", "supports_tool_choice": true }, "chat-bison-32k": { - "max_tokens": 8192, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-chat-models", "max_input_tokens": 32000, "max_output_tokens": 8192, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-chat-models", + "max_tokens": 8192, "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, "chat-bison-32k@002": { - "max_tokens": 8192, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-chat-models", "max_input_tokens": 32000, "max_output_tokens": 8192, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-chat-models", + "max_tokens": 8192, "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, + "chat-bison@001": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-chat-models", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_tool_choice": true + }, + "chat-bison@002": { + "deprecation_date": "2025-04-09", + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-chat-models", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_tool_choice": true + }, + "chatdolphin": { + "input_cost_per_token": 5e-07, + "litellm_provider": "nlp_cloud", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 5e-07 + }, + "chatgpt-4o-latest": { + "input_cost_per_token": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "claude-3-5-haiku-20241022": { + "cache_creation_input_token_cost": 1e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 8e-08, + "deprecation_date": "2025-10-01", + "input_cost_per_token": 8e-07, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tool_use_system_prompt_tokens": 264 + }, + "claude-3-5-haiku-latest": { + "cache_creation_input_token_cost": 1.25e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 1e-07, + "deprecation_date": "2025-10-01", + "input_cost_per_token": 1e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tool_use_system_prompt_tokens": 264 + }, + "claude-3-5-sonnet-20240620": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "deprecation_date": "2025-06-01", + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-3-5-sonnet-20241022": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "deprecation_date": "2025-10-01", + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-3-5-sonnet-latest": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "deprecation_date": "2025-06-01", + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-3-7-sonnet-20250219": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "deprecation_date": "2026-02-01", + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-3-7-sonnet-latest": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "deprecation_date": "2025-06-01", + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-3-haiku-20240307": { + "cache_creation_input_token_cost": 3e-07, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-08, + "deprecation_date": "2025-03-01", + "input_cost_per_token": 2.5e-07, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 264 + }, + "claude-3-opus-20240229": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 1.5e-06, + "deprecation_date": "2025-03-01", + "input_cost_per_token": 1.5e-05, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 395 + }, + "claude-3-opus-latest": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 1.5e-06, + "deprecation_date": "2025-03-01", + "input_cost_per_token": 1.5e-05, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 395 + }, + "claude-4-opus-20250514": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-4-sonnet-20250514": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_read_input_token_cost": 3e-07, + "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "input_cost_per_token": 3e-06, + "input_cost_per_token_above_200k_tokens": 6e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_above_200k_tokens": 2.25e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-opus-4-1": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_creation_input_token_cost_above_1hr": 3e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-opus-4-1-20250805": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_creation_input_token_cost_above_1hr": 3e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-opus-4-20250514": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_creation_input_token_cost_above_1hr": 3e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "claude-sonnet-4-20250514": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "cloudflare/@cf/meta/llama-2-7b-chat-fp16": { + "input_cost_per_token": 1.923e-06, + "litellm_provider": "cloudflare", + "max_input_tokens": 3072, + "max_output_tokens": 3072, + "max_tokens": 3072, + "mode": "chat", + "output_cost_per_token": 1.923e-06 + }, + "cloudflare/@cf/meta/llama-2-7b-chat-int8": { + "input_cost_per_token": 1.923e-06, + "litellm_provider": "cloudflare", + "max_input_tokens": 2048, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 1.923e-06 + }, + "cloudflare/@cf/mistral/mistral-7b-instruct-v0.1": { + "input_cost_per_token": 1.923e-06, + "litellm_provider": "cloudflare", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.923e-06 + }, + "cloudflare/@hf/thebloke/codellama-7b-instruct-awq": { + "input_cost_per_token": 1.923e-06, + "litellm_provider": "cloudflare", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.923e-06 + }, "code-bison": { - "max_tokens": 1024, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", "max_input_tokens": 6144, "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-text-models", + "max_tokens": 1024, "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, - "code-bison@001": { - "max_tokens": 1024, + "code-bison-32k@002": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", "max_input_tokens": 6144, "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-text-models", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "code-bison@002": { "max_tokens": 1024, - "max_input_tokens": 6144, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-text-models", "mode": "completion", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, "code-bison32k": { - "max_tokens": 1024, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", "max_input_tokens": 6144, "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-text-models", + "max_tokens": 1024, "mode": "completion", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, - "code-bison-32k@002": { - "max_tokens": 1024, + "code-bison@001": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", "max_input_tokens": 6144, "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, + "max_tokens": 1024, + "mode": "completion", "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-text-models", - "mode": "completion", + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, - "code-gecko@001": { - "max_tokens": 64, - "max_input_tokens": 2048, - "max_output_tokens": 64, + "code-bison@002": { + "input_cost_per_character": 2.5e-07, "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, "litellm_provider": "vertex_ai-code-text-models", + "max_input_tokens": 6144, + "max_output_tokens": 1024, + "max_tokens": 1024, "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "code-gecko@002": { - "max_tokens": 64, - "max_input_tokens": 2048, - "max_output_tokens": 64, - "input_cost_per_token": 1.25e-07, + "output_cost_per_character": 5e-07, "output_cost_per_token": 1.25e-07, - "litellm_provider": "vertex_ai-code-text-models", - "mode": "completion", "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, "code-gecko": { - "max_tokens": 64, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", "max_input_tokens": 2048, "max_output_tokens": 64, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "vertex_ai-code-text-models", + "max_tokens": 64, "mode": "completion", + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, "code-gecko-latest": { - "max_tokens": 64, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", "max_input_tokens": 2048, "max_output_tokens": 64, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "vertex_ai-code-text-models", + "max_tokens": 64, "mode": "completion", + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, - "codechat-bison@latest": { - "max_tokens": 1024, - "max_input_tokens": 6144, - "max_output_tokens": 1024, + "code-gecko@001": { "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", + "max_input_tokens": 2048, + "max_output_tokens": 64, + "max_tokens": 64, + "mode": "completion", "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-chat-models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "code-gecko@002": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-text-models", + "max_input_tokens": 2048, + "max_output_tokens": 64, + "max_tokens": 64, + "mode": "completion", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" }, "codechat-bison": { - "max_tokens": 1024, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-chat-models", "max_input_tokens": 6144, "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-chat-models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true - }, - "codechat-bison@001": { "max_tokens": 1024, - "max_input_tokens": 6144, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-chat-models", "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true - }, - "codechat-bison@002": { - "max_tokens": 1024, - "max_input_tokens": 6144, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-chat-models", - "mode": "chat", + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, "codechat-bison-32k": { - "max_tokens": 8192, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-chat-models", "max_input_tokens": 32000, "max_output_tokens": 8192, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-chat-models", + "max_tokens": 8192, "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, "codechat-bison-32k@002": { - "max_tokens": 8192, + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-chat-models", "max_input_tokens": 32000, "max_output_tokens": 8192, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "input_cost_per_character": 2.5e-07, - "output_cost_per_character": 5e-07, - "litellm_provider": "vertex_ai-code-chat-models", + "max_tokens": 8192, "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, - "meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8": { - "max_tokens": 128000, - "max_input_tokens": 10000000, - "max_output_tokens": 4028, - "litellm_provider": "meta_llama", + "codechat-bison@001": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-chat-models", + "max_input_tokens": 6144, + "max_output_tokens": 1024, + "max_tokens": 1024, "mode": "chat", - "supports_function_calling": true, - "source": "https://llama.developer.meta.com/docs/models", - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ] - }, - "meta_llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "max_tokens": 128000, - "max_input_tokens": 1000000, - "max_output_tokens": 4028, - "litellm_provider": "meta_llama", - "mode": "chat", - "supports_function_calling": true, - "source": "https://llama.developer.meta.com/docs/models", - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ] - }, - "meta_llama/Llama-3.3-70B-Instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4028, - "litellm_provider": "meta_llama", - "mode": "chat", - "supports_function_calling": true, - "source": "https://llama.developer.meta.com/docs/models", - "supports_tool_choice": true, - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "text" - ] - }, - "meta_llama/Llama-3.3-8B-Instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4028, - "litellm_provider": "meta_llama", - "mode": "chat", - "supports_function_calling": true, - "source": "https://llama.developer.meta.com/docs/models", - "supports_tool_choice": true, - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "text" - ] - }, - "gemini-pro": { - "max_tokens": 8192, - "max_input_tokens": 32760, - "max_output_tokens": 8192, - "input_cost_per_image": 0.0025, - "input_cost_per_video_per_second": 0.002, - "input_cost_per_token": 5e-07, - "input_cost_per_character": 1.25e-07, - "output_cost_per_token": 1.5e-06, - "output_cost_per_character": 3.75e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_tool_choice": true }, - "gemini-1.0-pro": { - "max_tokens": 8192, - "max_input_tokens": 32760, - "max_output_tokens": 8192, - "input_cost_per_image": 0.0025, - "input_cost_per_video_per_second": 0.002, - "input_cost_per_token": 5e-07, - "input_cost_per_character": 1.25e-07, - "output_cost_per_token": 1.5e-06, - "output_cost_per_character": 3.75e-07, - "litellm_provider": "vertex_ai-language-models", + "codechat-bison@002": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-chat-models", + "max_input_tokens": 6144, + "max_output_tokens": 1024, + "max_tokens": 1024, "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_tool_choice": true + }, + "codechat-bison@latest": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-code-chat-models", + "max_input_tokens": 6144, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "chat", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_tool_choice": true + }, + "codestral/codestral-2405": { + "input_cost_per_token": 0.0, + "litellm_provider": "codestral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://docs.mistral.ai/capabilities/code_generation/", + "supports_assistant_prefill": true, + "supports_tool_choice": true + }, + "codestral/codestral-latest": { + "input_cost_per_token": 0.0, + "litellm_provider": "codestral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://docs.mistral.ai/capabilities/code_generation/", + "supports_assistant_prefill": true, + "supports_tool_choice": true + }, + "codex-mini-latest": { + "cache_read_input_token_cost": 3.75e-07, + "input_cost_per_token": 1.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 6e-06, + "supported_endpoints": [ + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], "supports_function_calling": true, "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "cohere.command-light-text-v14": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "cohere.command-r-plus-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_tool_choice": true + }, + "cohere.command-r-v1:0": { + "input_cost_per_token": 5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_tool_choice": true + }, + "cohere.command-text-v14": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_tool_choice": true + }, + "cohere.embed-english-v3": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "supports_embedding_image_input": true + }, + "cohere.embed-multilingual-v3": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "supports_embedding_image_input": true + }, + "cohere.rerank-v3-5:0": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "bedrock", + "max_document_chunks_per_query": 100, + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_query_tokens": 32000, + "max_tokens": 32000, + "max_tokens_per_document_chunk": 512, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "command": { + "input_cost_per_token": 1e-06, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "command-a-03-2025": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "cohere_chat", + "max_input_tokens": 256000, + "max_output_tokens": 8000, + "max_tokens": 8000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "command-light": { + "input_cost_per_token": 3e-07, + "litellm_provider": "cohere_chat", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "command-nightly": { + "input_cost_per_token": 1e-06, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "command-r": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "cohere_chat", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "command-r-08-2024": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "cohere_chat", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "command-r-plus": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "cohere_chat", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "command-r-plus-08-2024": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "cohere_chat", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "command-r7b-12-2024": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "cohere_chat", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3.75e-08, + "source": "https://docs.cohere.com/v2/docs/command-r7b", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "computer-use-preview": { + "input_cost_per_token": 3e-06, + "litellm_provider": "azure", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "chat", + "output_cost_per_token": 1.2e-05, + "supported_endpoints": [ + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "dashscope/qwen-coder": { + "input_cost_per_token": 3e-07, + "litellm_provider": "dashscope", + "max_input_tokens": 1000000, + "max_output_tokens": 16384, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-flash": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 32768, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 5e-08, + "output_cost_per_token": 4e-07, + "range": [ + 0, + 256000.0 + ] + }, + { + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 2e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen-flash-2025-07-28": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 32768, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 5e-08, + "output_cost_per_token": 4e-07, + "range": [ + 0, + 256000.0 + ] + }, + { + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 2e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen-max": { + "input_cost_per_token": 1.6e-06, + "litellm_provider": "dashscope", + "max_input_tokens": 30720, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6.4e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-plus": { + "input_cost_per_token": 4e-07, + "litellm_provider": "dashscope", + "max_input_tokens": 129024, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-plus-2025-01-25": { + "input_cost_per_token": 4e-07, + "litellm_provider": "dashscope", + "max_input_tokens": 129024, + "max_output_tokens": 8192, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-plus-2025-04-28": { + "input_cost_per_token": 4e-07, + "litellm_provider": "dashscope", + "max_input_tokens": 129024, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_reasoning_token": 4e-06, + "output_cost_per_token": 1.2e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-plus-2025-07-14": { + "input_cost_per_token": 4e-07, + "litellm_provider": "dashscope", + "max_input_tokens": 129024, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_reasoning_token": 4e-06, + "output_cost_per_token": 1.2e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-plus-2025-07-28": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 32768, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 4e-07, + "output_cost_per_reasoning_token": 4e-06, + "output_cost_per_token": 1.2e-06, + "range": [ + 0, + 256000.0 + ] + }, + { + "input_cost_per_token": 1.2e-06, + "output_cost_per_reasoning_token": 1.2e-05, + "output_cost_per_token": 3.6e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen-plus-2025-09-11": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 32768, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 4e-07, + "output_cost_per_reasoning_token": 4e-06, + "output_cost_per_token": 1.2e-06, + "range": [ + 0, + 256000.0 + ] + }, + { + "input_cost_per_token": 1.2e-06, + "output_cost_per_reasoning_token": 1.2e-05, + "output_cost_per_token": 3.6e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen-plus-latest": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 32768, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 4e-07, + "output_cost_per_reasoning_token": 4e-06, + "output_cost_per_token": 1.2e-06, + "range": [ + 0, + 256000.0 + ] + }, + { + "input_cost_per_token": 1.2e-06, + "output_cost_per_reasoning_token": 1.2e-05, + "output_cost_per_token": 3.6e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen-turbo": { + "input_cost_per_token": 5e-08, + "litellm_provider": "dashscope", + "max_input_tokens": 129024, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_reasoning_token": 5e-07, + "output_cost_per_token": 2e-07, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-turbo-2024-11-01": { + "input_cost_per_token": 5e-08, + "litellm_provider": "dashscope", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-turbo-2025-04-28": { + "input_cost_per_token": 5e-08, + "litellm_provider": "dashscope", + "max_input_tokens": 1000000, + "max_output_tokens": 16384, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_reasoning_token": 5e-07, + "output_cost_per_token": 2e-07, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen-turbo-latest": { + "input_cost_per_token": 5e-08, + "litellm_provider": "dashscope", + "max_input_tokens": 1000000, + "max_output_tokens": 16384, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_reasoning_token": 5e-07, + "output_cost_per_token": 2e-07, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen3-30b-a3b": { + "litellm_provider": "dashscope", + "max_input_tokens": 129024, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "dashscope/qwen3-coder-flash": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 65536, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "cache_read_input_token_cost": 8e-08, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.5e-06, + "range": [ + 0, + 32000.0 + ] + }, + { + "cache_read_input_token_cost": 1.2e-07, + "input_cost_per_token": 5e-07, + "output_cost_per_token": 2.5e-06, + "range": [ + 32000.0, + 128000.0 + ] + }, + { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 8e-07, + "output_cost_per_token": 4e-06, + "range": [ + 128000.0, + 256000.0 + ] + }, + { + "cache_read_input_token_cost": 4e-07, + "input_cost_per_token": 1.6e-06, + "output_cost_per_token": 9.6e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen3-coder-flash-2025-07-28": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 65536, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.5e-06, + "range": [ + 0, + 32000.0 + ] + }, + { + "input_cost_per_token": 5e-07, + "output_cost_per_token": 2.5e-06, + "range": [ + 32000.0, + 128000.0 + ] + }, + { + "input_cost_per_token": 8e-07, + "output_cost_per_token": 4e-06, + "range": [ + 128000.0, + 256000.0 + ] + }, + { + "input_cost_per_token": 1.6e-06, + "output_cost_per_token": 9.6e-06, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen3-coder-plus": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 65536, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 1e-06, + "output_cost_per_token": 5e-06, + "range": [ + 0, + 32000.0 + ] + }, + { + "cache_read_input_token_cost": 1.8e-07, + "input_cost_per_token": 1.8e-06, + "output_cost_per_token": 9e-06, + "range": [ + 32000.0, + 128000.0 + ] + }, + { + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "range": [ + 128000.0, + 256000.0 + ] + }, + { + "cache_read_input_token_cost": 6e-07, + "input_cost_per_token": 6e-06, + "output_cost_per_token": 6e-05, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen3-coder-plus-2025-07-22": { + "litellm_provider": "dashscope", + "max_input_tokens": 997952, + "max_output_tokens": 65536, + "max_tokens": 1000000, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 1e-06, + "output_cost_per_token": 5e-06, + "range": [ + 0, + 32000.0 + ] + }, + { + "input_cost_per_token": 1.8e-06, + "output_cost_per_token": 9e-06, + "range": [ + 32000.0, + 128000.0 + ] + }, + { + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "range": [ + 128000.0, + 256000.0 + ] + }, + { + "input_cost_per_token": 6e-06, + "output_cost_per_token": 6e-05, + "range": [ + 256000.0, + 1000000.0 + ] + } + ] + }, + "dashscope/qwen3-max-preview": { + "litellm_provider": "dashscope", + "max_input_tokens": 258048, + "max_output_tokens": 65536, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "tiered_pricing": [ + { + "input_cost_per_token": 1.2e-06, + "output_cost_per_token": 6e-06, + "range": [ + 0, + 32000.0 + ] + }, + { + "input_cost_per_token": 2.4e-06, + "output_cost_per_token": 1.2e-05, + "range": [ + 32000.0, + 128000.0 + ] + }, + { + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "range": [ + 128000.0, + 252000.0 + ] + } + ] + }, + "dashscope/qwq-plus": { + "input_cost_per_token": 8e-07, + "litellm_provider": "dashscope", + "max_input_tokens": 98304, + "max_output_tokens": 8192, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.4e-06, + "source": "https://www.alibabacloud.com/help/en/model-studio/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "databricks/databricks-bge-large-en": { + "input_cost_per_token": 1.0003e-07, + "input_dbu_cost_per_token": 1.429e-06, + "litellm_provider": "databricks", + "max_input_tokens": 512, + "max_tokens": 512, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_dbu_cost_per_token": 0.0, + "output_vector_size": 1024, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving" + }, + "databricks/databricks-claude-3-7-sonnet": { + "input_cost_per_token": 2.5e-06, + "input_dbu_cost_per_token": 3.571e-05, + "litellm_provider": "databricks", + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "max_tokens": 200000, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Claude 3.7 conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 1.7857e-05, + "output_db_cost_per_token": 0.000214286, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "databricks/databricks-gte-large-en": { + "input_cost_per_token": 1.2999e-07, + "input_dbu_cost_per_token": 1.857e-06, + "litellm_provider": "databricks", + "max_input_tokens": 8192, + "max_tokens": 8192, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_dbu_cost_per_token": 0.0, + "output_vector_size": 1024, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving" + }, + "databricks/databricks-llama-2-70b-chat": { + "input_cost_per_token": 5.0001e-07, + "input_dbu_cost_per_token": 7.143e-06, + "litellm_provider": "databricks", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "output_dbu_cost_per_token": 2.1429e-05, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-llama-4-maverick": { + "input_cost_per_token": 5e-06, + "input_dbu_cost_per_token": 7.143e-05, + "litellm_provider": "databricks", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "metadata": { + "notes": "Databricks documentation now provides both DBU costs (_dbu_cost_per_token) and dollar costs(_cost_per_token)." + }, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "output_dbu_cost_per_token": 0.00021429, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-meta-llama-3-1-405b-instruct": { + "input_cost_per_token": 5e-06, + "input_dbu_cost_per_token": 7.1429e-05, + "litellm_provider": "databricks", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 1.500002e-05, + "output_db_cost_per_token": 0.000214286, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-meta-llama-3-3-70b-instruct": { + "input_cost_per_token": 1.00002e-06, + "input_dbu_cost_per_token": 1.4286e-05, + "litellm_provider": "databricks", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 2.99999e-06, + "output_dbu_cost_per_token": 4.2857e-05, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-meta-llama-3-70b-instruct": { + "input_cost_per_token": 1.00002e-06, + "input_dbu_cost_per_token": 1.4286e-05, + "litellm_provider": "databricks", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 2.99999e-06, + "output_dbu_cost_per_token": 4.2857e-05, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-mixtral-8x7b-instruct": { + "input_cost_per_token": 5.0001e-07, + "input_dbu_cost_per_token": 7.143e-06, + "litellm_provider": "databricks", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 9.9902e-07, + "output_dbu_cost_per_token": 1.4286e-05, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-mpt-30b-instruct": { + "input_cost_per_token": 9.9902e-07, + "input_dbu_cost_per_token": 1.4286e-05, + "litellm_provider": "databricks", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 9.9902e-07, + "output_dbu_cost_per_token": 1.4286e-05, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "databricks/databricks-mpt-7b-instruct": { + "input_cost_per_token": 5.0001e-07, + "input_dbu_cost_per_token": 7.143e-06, + "litellm_provider": "databricks", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "metadata": { + "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." + }, + "mode": "chat", + "output_cost_per_token": 0.0, + "output_dbu_cost_per_token": 0.0, + "source": "https://www.databricks.com/product/pricing/foundation-model-serving", + "supports_tool_choice": true + }, + "davinci-002": { + "input_cost_per_token": 2e-06, + "litellm_provider": "text-completion-openai", + "max_input_tokens": 16384, + "max_output_tokens": 4096, + "max_tokens": 16384, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "deepgram/base": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-conversationalai": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-finance": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-general": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-meeting": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-phonecall": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-video": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/base-voicemail": { + "input_cost_per_second": 0.00020833, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0125/60 seconds = $0.00020833 per second", + "original_pricing_per_minute": 0.0125 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/enhanced": { + "input_cost_per_second": 0.00024167, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0145/60 seconds = $0.00024167 per second", + "original_pricing_per_minute": 0.0145 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/enhanced-finance": { + "input_cost_per_second": 0.00024167, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0145/60 seconds = $0.00024167 per second", + "original_pricing_per_minute": 0.0145 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/enhanced-general": { + "input_cost_per_second": 0.00024167, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0145/60 seconds = $0.00024167 per second", + "original_pricing_per_minute": 0.0145 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/enhanced-meeting": { + "input_cost_per_second": 0.00024167, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0145/60 seconds = $0.00024167 per second", + "original_pricing_per_minute": 0.0145 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/enhanced-phonecall": { + "input_cost_per_second": 0.00024167, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0145/60 seconds = $0.00024167 per second", + "original_pricing_per_minute": 0.0145 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-atc": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-automotive": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-conversationalai": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-drivethru": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-finance": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-general": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-meeting": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-phonecall": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-video": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-2-voicemail": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-3": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-3-general": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-3-medical": { + "input_cost_per_second": 8.667e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0052/60 seconds = $0.00008667 per second (multilingual)", + "original_pricing_per_minute": 0.0052 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-general": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/nova-phonecall": { + "input_cost_per_second": 7.167e-05, + "litellm_provider": "deepgram", + "metadata": { + "calculation": "$0.0043/60 seconds = $0.00007167 per second", + "original_pricing_per_minute": 0.0043 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/whisper": { + "input_cost_per_second": 0.0001, + "litellm_provider": "deepgram", + "metadata": { + "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/whisper-base": { + "input_cost_per_second": 0.0001, + "litellm_provider": "deepgram", + "metadata": { + "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/whisper-large": { + "input_cost_per_second": 0.0001, + "litellm_provider": "deepgram", + "metadata": { + "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/whisper-medium": { + "input_cost_per_second": 0.0001, + "litellm_provider": "deepgram", + "metadata": { + "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/whisper-small": { + "input_cost_per_second": 0.0001, + "litellm_provider": "deepgram", + "metadata": { + "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepgram/whisper-tiny": { + "input_cost_per_second": 0.0001, + "litellm_provider": "deepgram", + "metadata": { + "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://deepgram.com/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "deepinfra/Gryphe/MythoMax-L2-13b": { + "input_cost_per_token": 7.2e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.2e-08, + "supports_tool_choice": true + }, + "deepinfra/NousResearch/Hermes-3-Llama-3.1-405B": { + "input_cost_per_token": 7e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 8e-07, + "supports_tool_choice": true + }, + "deepinfra/NousResearch/Hermes-3-Llama-3.1-70B": { + "input_cost_per_token": 1e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.8e-07, + "supports_tool_choice": false + }, + "deepinfra/Qwen/QwQ-32B": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen2.5-72B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3.9e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen2.5-7B-Instruct": { + "input_cost_per_token": 4e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_tool_choice": false + }, + "deepinfra/Qwen/Qwen2.5-VL-32B-Instruct": { + "input_cost_per_token": 2e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-14B": { + "input_cost_per_token": 6e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 40960, + "max_output_tokens": 40960, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 2.4e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-235B-A22B": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 40960, + "max_output_tokens": 40960, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-235B-A22B-Instruct-2507": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-235B-A22B-Thinking-2507": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-30B-A3B": { + "input_cost_per_token": 8e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 40960, + "max_output_tokens": 40960, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 2.9e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-32B": { + "input_cost_per_token": 1e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 40960, + "max_output_tokens": 40960, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct": { + "input_cost_per_token": 4e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "supports_tool_choice": true + }, + "deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": { + "cache_read_input_token_cost": 2.4e-07, + "input_cost_per_token": 3e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "supports_tool_choice": true + }, + "deepinfra/Sao10K/L3-8B-Lunaris-v1-Turbo": { + "input_cost_per_token": 2e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5e-08, + "supports_tool_choice": false + }, + "deepinfra/Sao10K/L3.1-70B-Euryale-v2.2": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 7.5e-07, + "supports_tool_choice": false + }, + "deepinfra/Sao10K/L3.3-70B-Euryale-v2.3": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 7.5e-07, + "supports_tool_choice": false + }, + "deepinfra/allenai/olmOCR-7B-0725-FP8": { + "input_cost_per_token": 2.7e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_tool_choice": false + }, + "deepinfra/anthropic/claude-3-7-sonnet-latest": { + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "deepinfra", + "max_input_tokens": 200000, + "max_output_tokens": 200000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "supports_tool_choice": true + }, + "deepinfra/anthropic/claude-4-opus": { + "input_cost_per_token": 1.65e-05, + "litellm_provider": "deepinfra", + "max_input_tokens": 200000, + "max_output_tokens": 200000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 8.25e-05, + "supports_tool_choice": true + }, + "deepinfra/anthropic/claude-4-sonnet": { + "input_cost_per_token": 3.3e-06, + "litellm_provider": "deepinfra", + "max_input_tokens": 200000, + "max_output_tokens": 200000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-R1": { + "input_cost_per_token": 7e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 2.4e-06, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-R1-0528": { + "cache_read_input_token_cost": 4e-07, + "input_cost_per_token": 5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 2.15e-06, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-R1-0528-Turbo": { + "input_cost_per_token": 1e-06, + "litellm_provider": "deepinfra", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { + "input_cost_per_token": 1e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": false + }, + "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { + "input_cost_per_token": 7.5e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-R1-Turbo": { + "input_cost_per_token": 1e-06, + "litellm_provider": "deepinfra", + "max_input_tokens": 40960, + "max_output_tokens": 40960, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-V3": { + "input_cost_per_token": 3.8e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 8.9e-07, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-V3-0324": { + "cache_read_input_token_cost": 2.24e-07, + "input_cost_per_token": 2.8e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 8.8e-07, + "supports_tool_choice": true + }, + "deepinfra/deepseek-ai/DeepSeek-V3.1": { + "cache_read_input_token_cost": 2.16e-07, + "input_cost_per_token": 2.7e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 1e-06, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "deepinfra/google/gemini-2.0-flash-001": { + "input_cost_per_token": 1e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "deepinfra/google/gemini-2.5-flash": { + "input_cost_per_token": 2.1e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 1.75e-06, + "supports_tool_choice": true + }, + "deepinfra/google/gemini-2.5-pro": { + "input_cost_per_token": 8.75e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 7e-06, + "supports_tool_choice": true + }, + "deepinfra/google/gemma-3-12b-it": { + "input_cost_per_token": 5e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_tool_choice": true + }, + "deepinfra/google/gemma-3-27b-it": { + "input_cost_per_token": 9e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.7e-07, + "supports_tool_choice": true + }, + "deepinfra/google/gemma-3-4b-it": { + "input_cost_per_token": 4e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 8e-08, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct": { + "input_cost_per_token": 4.9e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4.9e-08, + "supports_tool_choice": false + }, + "deepinfra/meta-llama/Llama-3.2-3B-Instruct": { + "input_cost_per_token": 1.2e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.4e-08, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Llama-3.3-70B-Instruct": { + "input_cost_per_token": 2.3e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Llama-3.3-70B-Instruct-Turbo": { + "input_cost_per_token": 3.8e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.2e-07, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "max_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Llama-4-Scout-17B-16E-Instruct": { + "input_cost_per_token": 8e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 327680, + "max_output_tokens": 327680, + "max_tokens": 327680, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Llama-Guard-3-8B": { + "input_cost_per_token": 5.5e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5.5e-08, + "supports_tool_choice": false + }, + "deepinfra/meta-llama/Llama-Guard-4-12B": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 1.8e-07, + "supports_tool_choice": false + }, + "deepinfra/meta-llama/Meta-Llama-3-8B-Instruct": { + "input_cost_per_token": 3e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-08, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct": { + "input_cost_per_token": 2.3e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": { + "input_cost_per_token": 1e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.8e-07, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Meta-Llama-3.1-8B-Instruct": { + "input_cost_per_token": 3e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-08, + "supports_tool_choice": true + }, + "deepinfra/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": { + "input_cost_per_token": 1.5e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-08, + "supports_tool_choice": true + }, + "deepinfra/microsoft/WizardLM-2-8x22B": { + "input_cost_per_token": 4.8e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.8e-07, + "supports_tool_choice": false + }, + "deepinfra/microsoft/phi-4": { + "input_cost_per_token": 7e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.4e-07, + "supports_tool_choice": true + }, + "deepinfra/mistralai/Mistral-Nemo-Instruct-2407": { + "input_cost_per_token": 2e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-08, + "supports_tool_choice": true + }, + "deepinfra/mistralai/Mistral-Small-24B-Instruct-2501": { + "input_cost_per_token": 5e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-08, + "supports_tool_choice": true + }, + "deepinfra/mistralai/Mistral-Small-3.2-24B-Instruct-2506": { + "input_cost_per_token": 5e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_tool_choice": true + }, + "deepinfra/mistralai/Mixtral-8x7B-Instruct-v0.1": { + "input_cost_per_token": 8e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 2.4e-07, + "supports_tool_choice": true + }, + "deepinfra/moonshotai/Kimi-K2-Instruct": { + "input_cost_per_token": 5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_tool_choice": true + }, + "deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_tool_choice": true + }, + "deepinfra/openai/gpt-oss-120b": { + "input_cost_per_token": 9e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4.5e-07, + "supports_tool_choice": true + }, + "deepinfra/openai/gpt-oss-20b": { + "input_cost_per_token": 4e-08, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.6e-07, + "supports_tool_choice": true + }, + "deepinfra/zai-org/GLM-4.5": { + "input_cost_per_token": 5.5e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_tool_choice": true + }, + "deepinfra/zai-org/GLM-4.5-Air": { + "input_cost_per_token": 2e-07, + "litellm_provider": "deepinfra", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.1e-06, + "supports_tool_choice": true + }, + "deepseek/deepseek-chat": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 7e-08, + "input_cost_per_token": 2.7e-07, + "input_cost_per_token_cache_hit": 7e-08, + "litellm_provider": "deepseek", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.1e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true + }, + "deepseek/deepseek-coder": { + "input_cost_per_token": 1.4e-07, + "input_cost_per_token_cache_hit": 1.4e-08, + "litellm_provider": "deepseek", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-07, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true + }, + "deepseek/deepseek-r1": { + "input_cost_per_token": 5.5e-07, + "input_cost_per_token_cache_hit": 1.4e-07, + "litellm_provider": "deepseek", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.19e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "deepseek/deepseek-reasoner": { + "input_cost_per_token": 5.5e-07, + "input_cost_per_token_cache_hit": 1.4e-07, + "litellm_provider": "deepseek", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.19e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "deepseek/deepseek-v3": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 7e-08, + "input_cost_per_token": 2.7e-07, + "input_cost_per_token_cache_hit": 7e-08, + "litellm_provider": "deepseek", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.1e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true + }, + "dolphin": { + "input_cost_per_token": 5e-07, + "litellm_provider": "nlp_cloud", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "completion", + "output_cost_per_token": 5e-07 + }, + "doubao-embedding": { + "input_cost_per_token": 0.0, + "litellm_provider": "volcengine", + "max_input_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Volcengine Doubao embedding model - standard version with 2560 dimensions" + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 2560 + }, + "doubao-embedding-large": { + "input_cost_per_token": 0.0, + "litellm_provider": "volcengine", + "max_input_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Volcengine Doubao embedding model - large version with 2048 dimensions" + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 2048 + }, + "doubao-embedding-large-text-240915": { + "input_cost_per_token": 0.0, + "litellm_provider": "volcengine", + "max_input_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Volcengine Doubao embedding model - text-240915 version with 4096 dimensions" + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 4096 + }, + "doubao-embedding-large-text-250515": { + "input_cost_per_token": 0.0, + "litellm_provider": "volcengine", + "max_input_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Volcengine Doubao embedding model - text-250515 version with 2048 dimensions" + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 2048 + }, + "doubao-embedding-text-240715": { + "input_cost_per_token": 0.0, + "litellm_provider": "volcengine", + "max_input_tokens": 4096, + "max_tokens": 4096, + "metadata": { + "notes": "Volcengine Doubao embedding model - text-240715 version with 2560 dimensions" + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 2560 + }, + "elevenlabs/scribe_v1": { + "input_cost_per_second": 6.11e-05, + "litellm_provider": "elevenlabs", + "metadata": { + "calculation": "$0.22/hour = $0.00366/minute = $0.0000611 per second (enterprise pricing)", + "notes": "ElevenLabs Scribe v1 - state-of-the-art speech recognition model with 99 language support", + "original_pricing_per_hour": 0.22 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://elevenlabs.io/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "elevenlabs/scribe_v1_experimental": { + "input_cost_per_second": 6.11e-05, + "litellm_provider": "elevenlabs", + "metadata": { + "calculation": "$0.22/hour = $0.00366/minute = $0.0000611 per second (enterprise pricing)", + "notes": "ElevenLabs Scribe v1 experimental - enhanced version of the main Scribe model", + "original_pricing_per_hour": 0.22 + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://elevenlabs.io/pricing", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "embed-english-light-v2.0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "cohere", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "embed-english-light-v3.0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "cohere", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "embed-english-v2.0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_tokens": 4096, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "embed-english-v3.0": { + "input_cost_per_image": 0.0001, + "input_cost_per_token": 1e-07, + "litellm_provider": "cohere", + "max_input_tokens": 1024, + "max_tokens": 1024, + "metadata": { + "notes": "'supports_image_input' is a deprecated field. Use 'supports_embedding_image_input' instead." + }, + "mode": "embedding", + "output_cost_per_token": 0.0, + "supports_embedding_image_input": true, + "supports_image_input": true + }, + "embed-multilingual-v2.0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "cohere", + "max_input_tokens": 768, + "max_tokens": 768, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "embed-multilingual-v3.0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "cohere", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "embedding", + "output_cost_per_token": 0.0, + "supports_embedding_image_input": true + }, + "eu.amazon.nova-lite-v1:0": { + "input_cost_per_token": 7.8e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 3.12e-07, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "eu.amazon.nova-micro-v1:0": { + "input_cost_per_token": 4.6e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 1.84e-07, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "eu.amazon.nova-pro-v1:0": { + "input_cost_per_token": 1.05e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 4.2e-06, + "source": "https://aws.amazon.com/bedrock/pricing/", + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "eu.anthropic.claude-3-5-haiku-20241022-v1:0": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "eu.anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "eu.anthropic.claude-3-5-sonnet-20241022-v2:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "eu.anthropic.claude-3-7-sonnet-20250219-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "eu.anthropic.claude-3-haiku-20240307-v1:0": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "eu.anthropic.claude-3-opus-20240229-v1:0": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "eu.anthropic.claude-3-sonnet-20240229-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "eu.anthropic.claude-opus-4-1-20250805-v1:0": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "eu.anthropic.claude-opus-4-20250514-v1:0": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "eu.anthropic.claude-sonnet-4-20250514-v1:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "eu.meta.llama3-2-1b-instruct-v1:0": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.3e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "eu.meta.llama3-2-3b-instruct-v1:0": { + "input_cost_per_token": 1.9e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.9e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "eu.mistral.pixtral-large-2502-v1:0": { + "input_cost_per_token": 2e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "featherless_ai/featherless-ai/Qwerky-72B": { + "litellm_provider": "featherless_ai", + "max_input_tokens": 32768, + "max_output_tokens": 4096, + "max_tokens": 32768, + "mode": "chat" + }, + "featherless_ai/featherless-ai/Qwerky-QwQ-32B": { + "litellm_provider": "featherless_ai", + "max_input_tokens": 32768, + "max_output_tokens": 4096, + "max_tokens": 32768, + "mode": "chat" + }, + "fireworks-ai-4.1b-to-16b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "fireworks_ai", + "output_cost_per_token": 2e-07 + }, + "fireworks-ai-56b-to-176b": { + "input_cost_per_token": 1.2e-06, + "litellm_provider": "fireworks_ai", + "output_cost_per_token": 1.2e-06 + }, + "fireworks-ai-above-16b": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "output_cost_per_token": 9e-07 + }, + "fireworks-ai-default": { + "input_cost_per_token": 0.0, + "litellm_provider": "fireworks_ai", + "output_cost_per_token": 0.0 + }, + "fireworks-ai-embedding-150m-to-350m": { + "input_cost_per_token": 1.6e-08, + "litellm_provider": "fireworks_ai-embedding-models", + "output_cost_per_token": 0.0 + }, + "fireworks-ai-embedding-up-to-150m": { + "input_cost_per_token": 8e-09, + "litellm_provider": "fireworks_ai-embedding-models", + "output_cost_per_token": 0.0 + }, + "fireworks-ai-moe-up-to-56b": { + "input_cost_per_token": 5e-07, + "litellm_provider": "fireworks_ai", + "output_cost_per_token": 5e-07 + }, + "fireworks-ai-up-to-4b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "fireworks_ai", + "output_cost_per_token": 2e-07 + }, + "fireworks_ai/WhereIsAI/UAE-Large-V1": { + "input_cost_per_token": 1.6e-08, + "litellm_provider": "fireworks_ai-embedding-models", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "source": "https://fireworks.ai/pricing" + }, + "fireworks_ai/accounts/fireworks/models/deepseek-coder-v2-instruct": { + "input_cost_per_token": 1.2e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/deepseek-r1": { + "input_cost_per_token": 3e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 20480, + "max_tokens": 20480, + "mode": "chat", + "output_cost_per_token": 8e-06, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/deepseek-r1-0528": { + "input_cost_per_token": 3e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 160000, + "max_output_tokens": 160000, + "max_tokens": 160000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/deepseek-r1-basic": { + "input_cost_per_token": 5.5e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 20480, + "max_tokens": 20480, + "mode": "chat", + "output_cost_per_token": 2.19e-06, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/deepseek-v3": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/deepseek-v3-0324": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 163840, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://fireworks.ai/models/fireworks/deepseek-v3-0324", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/deepseek-v3p1": { + "input_cost_per_token": 5.6e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.68e-06, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/firefunction-v2": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/glm-4p5": { + "input_cost_per_token": 5.5e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 96000, + "max_tokens": 96000, + "mode": "chat", + "output_cost_per_token": 2.19e-06, + "source": "https://fireworks.ai/models/fireworks/glm-4p5", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/glm-4p5-air": { + "input_cost_per_token": 2.2e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 96000, + "max_tokens": 96000, + "mode": "chat", + "output_cost_per_token": 8.8e-07, + "source": "https://artificialanalysis.ai/models/glm-4-5-air", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/gpt-oss-120b": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/gpt-oss-20b": { + "input_cost_per_token": 5e-08, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/kimi-k2-instruct": { + "input_cost_per_token": 6e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 131072, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://fireworks.ai/models/fireworks/kimi-k2-instruct", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/llama-v3p1-405b-instruct": { + "input_cost_per_token": 3e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/llama-v3p1-8b-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/llama-v3p2-11b-vision-instruct": { + "input_cost_per_token": 2e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "fireworks_ai/accounts/fireworks/models/llama-v3p2-1b-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/llama-v3p2-3b-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/llama-v3p2-90b-vision-instruct": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "fireworks_ai/accounts/fireworks/models/llama4-maverick-instruct-basic": { + "input_cost_per_token": 2.2e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 8.8e-07, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/llama4-scout-instruct-basic": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://fireworks.ai/pricing", + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/mixtral-8x22b-instruct-hf": { + "input_cost_per_token": 1.2e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "fireworks_ai/accounts/fireworks/models/qwen2-72b-instruct": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/qwen2p5-coder-32b-instruct": { + "input_cost_per_token": 9e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 9e-07, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/accounts/fireworks/models/yi-large": { + "input_cost_per_token": 3e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://fireworks.ai/pricing", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "fireworks_ai/nomic-ai/nomic-embed-text-v1": { + "input_cost_per_token": 8e-09, + "litellm_provider": "fireworks_ai-embedding-models", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "source": "https://fireworks.ai/pricing" + }, + "fireworks_ai/nomic-ai/nomic-embed-text-v1.5": { + "input_cost_per_token": 8e-09, + "litellm_provider": "fireworks_ai-embedding-models", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0.0, + "source": "https://fireworks.ai/pricing" + }, + "fireworks_ai/thenlper/gte-base": { + "input_cost_per_token": 8e-09, + "litellm_provider": "fireworks_ai-embedding-models", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "source": "https://fireworks.ai/pricing" + }, + "fireworks_ai/thenlper/gte-large": { + "input_cost_per_token": 1.6e-08, + "litellm_provider": "fireworks_ai-embedding-models", + "max_input_tokens": 512, + "max_tokens": 512, + "mode": "embedding", + "output_cost_per_token": 0.0, + "source": "https://fireworks.ai/pricing" + }, + "friendliai/meta-llama-3.1-70b-instruct": { + "input_cost_per_token": 6e-07, + "litellm_provider": "friendliai", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "friendliai/meta-llama-3.1-8b-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "friendliai", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "ft:babbage-002": { + "input_cost_per_token": 4e-07, + "input_cost_per_token_batches": 2e-07, + "litellm_provider": "text-completion-openai", + "max_input_tokens": 16384, + "max_output_tokens": 4096, + "max_tokens": 16384, + "mode": "completion", + "output_cost_per_token": 4e-07, + "output_cost_per_token_batches": 2e-07 + }, + "ft:davinci-002": { + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "text-completion-openai", + "max_input_tokens": 16384, + "max_output_tokens": 4096, + "max_tokens": 16384, + "mode": "completion", + "output_cost_per_token": 2e-06, + "output_cost_per_token_batches": 1e-06 + }, + "ft:gpt-3.5-turbo": { + "input_cost_per_token": 3e-06, + "input_cost_per_token_batches": 1.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-06, + "output_cost_per_token_batches": 3e-06, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "ft:gpt-3.5-turbo-0125": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "ft:gpt-3.5-turbo-0613": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openai", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "ft:gpt-3.5-turbo-1106": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "ft:gpt-4-0613": { + "input_cost_per_token": 3e-05, + "litellm_provider": "openai", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-05, + "source": "OpenAI needs to add pricing for this ft model, will be updated when added by OpenAI. Defaulting to base model pricing", + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "ft:gpt-4o-2024-08-06": { + "input_cost_per_token": 3.75e-06, + "input_cost_per_token_batches": 1.875e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_batches": 7.5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "ft:gpt-4o-2024-11-20": { + "cache_creation_input_token_cost": 1.875e-06, + "input_cost_per_token": 3.75e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "ft:gpt-4o-mini-2024-07-18": { + "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 3e-07, + "input_cost_per_token_batches": 1.5e-07, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_batches": 6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini-1.0-pro": { + "input_cost_per_character": 1.25e-07, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 0.002, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 32760, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 3.75e-07, + "output_cost_per_token": 1.5e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#google_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, "supports_tool_choice": true }, "gemini-1.0-pro-001": { - "max_tokens": 8192, + "deprecation_date": "2025-04-09", + "input_cost_per_character": 1.25e-07, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 0.002, + "litellm_provider": "vertex_ai-language-models", "max_input_tokens": 32760, "max_output_tokens": 8192, - "input_cost_per_image": 0.0025, - "input_cost_per_video_per_second": 0.002, - "input_cost_per_token": 5e-07, - "input_cost_per_character": 1.25e-07, - "output_cost_per_token": 1.5e-06, - "output_cost_per_character": 3.75e-07, - "litellm_provider": "vertex_ai-language-models", + "max_tokens": 8192, "mode": "chat", - "supports_function_calling": true, + "output_cost_per_character": 3.75e-07, + "output_cost_per_token": 1.5e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "deprecation_date": "2025-04-09", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.0-ultra": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 2048, - "input_cost_per_image": 0.0025, - "input_cost_per_video_per_second": 0.002, - "input_cost_per_token": 5e-07, - "input_cost_per_character": 1.25e-07, - "output_cost_per_token": 1.5e-06, - "output_cost_per_character": 3.75e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", "supports_function_calling": true, - "source": "As of Jun, 2024. There is no available doc on vertex ai pricing gemini-1.0-ultra-001. Using gemini-1.0-pro pricing. Got max_tokens info here: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.0-ultra-001": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 2048, - "input_cost_per_image": 0.0025, - "input_cost_per_video_per_second": 0.002, - "input_cost_per_token": 5e-07, - "input_cost_per_character": 1.25e-07, - "output_cost_per_token": 1.5e-06, - "output_cost_per_character": 3.75e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_function_calling": true, - "source": "As of Jun, 2024. There is no available doc on vertex ai pricing gemini-1.0-ultra-001. Using gemini-1.0-pro pricing. Got max_tokens info here: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true, - "supports_parallel_function_calling": true + "supports_parallel_function_calling": true, + "supports_tool_choice": true }, "gemini-1.0-pro-002": { - "max_tokens": 8192, + "deprecation_date": "2025-04-09", + "input_cost_per_character": 1.25e-07, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 0.002, + "litellm_provider": "vertex_ai-language-models", "max_input_tokens": 32760, "max_output_tokens": 8192, - "input_cost_per_image": 0.0025, - "input_cost_per_video_per_second": 0.002, - "input_cost_per_token": 5e-07, - "input_cost_per_character": 1.25e-07, - "output_cost_per_token": 1.5e-06, + "max_tokens": 8192, + "mode": "chat", "output_cost_per_character": 3.75e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_function_calling": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "deprecation_date": "2025-04-09", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.5-pro": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_image": 0.00032875, - "input_cost_per_audio_per_second": 3.125e-05, - "input_cost_per_video_per_second": 0.00032875, - "input_cost_per_token": 1.25e-06, - "input_cost_per_character": 3.125e-07, - "input_cost_per_image_above_128k_tokens": 0.0006575, - "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, - "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, - "input_cost_per_token_above_128k_tokens": 2.5e-06, - "input_cost_per_character_above_128k_tokens": 6.25e-07, - "output_cost_per_token": 5e-06, - "output_cost_per_character": 1.25e-06, - "output_cost_per_token_above_128k_tokens": 1e-05, - "output_cost_per_character_above_128k_tokens": 2.5e-06, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_vision": true, - "supports_pdf_input": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_parallel_function_calling": true - }, - "gemini-1.5-pro-002": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_image": 0.00032875, - "input_cost_per_audio_per_second": 3.125e-05, - "input_cost_per_video_per_second": 0.00032875, - "input_cost_per_token": 1.25e-06, - "input_cost_per_character": 3.125e-07, - "input_cost_per_image_above_128k_tokens": 0.0006575, - "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, - "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, - "input_cost_per_token_above_128k_tokens": 2.5e-06, - "input_cost_per_character_above_128k_tokens": 6.25e-07, - "output_cost_per_token": 5e-06, - "output_cost_per_character": 1.25e-06, - "output_cost_per_token_above_128k_tokens": 1e-05, - "output_cost_per_character_above_128k_tokens": 2.5e-06, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_vision": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-1.5-pro", - "deprecation_date": "2025-09-24", - "supports_parallel_function_calling": true - }, - "gemini-1.5-pro-001": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_image": 0.00032875, - "input_cost_per_audio_per_second": 3.125e-05, - "input_cost_per_video_per_second": 0.00032875, - "input_cost_per_token": 1.25e-06, - "input_cost_per_character": 3.125e-07, - "input_cost_per_image_above_128k_tokens": 0.0006575, - "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, - "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, - "input_cost_per_token_above_128k_tokens": 2.5e-06, - "input_cost_per_character_above_128k_tokens": 6.25e-07, - "output_cost_per_token": 5e-06, - "output_cost_per_character": 1.25e-06, - "output_cost_per_token_above_128k_tokens": 1e-05, - "output_cost_per_character_above_128k_tokens": 2.5e-06, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_vision": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "deprecation_date": "2025-05-24", - "supports_parallel_function_calling": true - }, - "gemini-1.5-pro-preview-0514": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_image": 0.00032875, - "input_cost_per_audio_per_second": 3.125e-05, - "input_cost_per_video_per_second": 0.00032875, - "input_cost_per_token": 7.8125e-08, - "input_cost_per_character": 3.125e-07, - "input_cost_per_image_above_128k_tokens": 0.0006575, - "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, - "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, - "input_cost_per_token_above_128k_tokens": 1.5625e-07, - "input_cost_per_character_above_128k_tokens": 6.25e-07, - "output_cost_per_token": 3.125e-07, - "output_cost_per_character": 1.25e-06, - "output_cost_per_token_above_128k_tokens": 6.25e-07, - "output_cost_per_character_above_128k_tokens": 2.5e-06, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_parallel_function_calling": true - }, - "gemini-1.5-pro-preview-0215": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_image": 0.00032875, - "input_cost_per_audio_per_second": 3.125e-05, - "input_cost_per_video_per_second": 0.00032875, - "input_cost_per_token": 7.8125e-08, - "input_cost_per_character": 3.125e-07, - "input_cost_per_image_above_128k_tokens": 0.0006575, - "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, - "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, - "input_cost_per_token_above_128k_tokens": 1.5625e-07, - "input_cost_per_character_above_128k_tokens": 6.25e-07, - "output_cost_per_token": 3.125e-07, - "output_cost_per_character": 1.25e-06, - "output_cost_per_token_above_128k_tokens": 6.25e-07, - "output_cost_per_character_above_128k_tokens": 2.5e-06, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_parallel_function_calling": true - }, - "gemini-1.5-pro-preview-0409": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_image": 0.00032875, - "input_cost_per_audio_per_second": 3.125e-05, - "input_cost_per_video_per_second": 0.00032875, - "input_cost_per_token": 7.8125e-08, - "input_cost_per_character": 3.125e-07, - "input_cost_per_image_above_128k_tokens": 0.0006575, - "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, - "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, - "input_cost_per_token_above_128k_tokens": 1.5625e-07, - "input_cost_per_character_above_128k_tokens": 6.25e-07, - "output_cost_per_token": 3.125e-07, - "output_cost_per_character": 1.25e-06, - "output_cost_per_token_above_128k_tokens": 6.25e-07, - "output_cost_per_character_above_128k_tokens": 2.5e-06, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_parallel_function_calling": true - }, - "gemini-1.5-flash": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 2e-05, - "input_cost_per_video_per_second": 2e-05, - "input_cost_per_audio_per_second": 2e-06, - "input_cost_per_token": 7.5e-08, - "input_cost_per_character": 1.875e-08, - "input_cost_per_token_above_128k_tokens": 1e-06, - "input_cost_per_character_above_128k_tokens": 2.5e-07, - "input_cost_per_image_above_128k_tokens": 4e-05, - "input_cost_per_video_per_second_above_128k_tokens": 4e-05, - "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, - "output_cost_per_token": 3e-07, - "output_cost_per_character": 7.5e-08, - "output_cost_per_token_above_128k_tokens": 6e-07, - "output_cost_per_character_above_128k_tokens": 1.5e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.5-flash-exp-0827": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 2e-05, - "input_cost_per_video_per_second": 2e-05, - "input_cost_per_audio_per_second": 2e-06, - "input_cost_per_token": 4.688e-09, - "input_cost_per_character": 1.875e-08, - "input_cost_per_token_above_128k_tokens": 1e-06, - "input_cost_per_character_above_128k_tokens": 2.5e-07, - "input_cost_per_image_above_128k_tokens": 4e-05, - "input_cost_per_video_per_second_above_128k_tokens": 4e-05, - "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, - "output_cost_per_token": 4.6875e-09, - "output_cost_per_character": 1.875e-08, - "output_cost_per_token_above_128k_tokens": 9.375e-09, - "output_cost_per_character_above_128k_tokens": 3.75e-08, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.5-flash-002": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 2e-05, - "input_cost_per_video_per_second": 2e-05, - "input_cost_per_audio_per_second": 2e-06, - "input_cost_per_token": 7.5e-08, - "input_cost_per_character": 1.875e-08, - "input_cost_per_token_above_128k_tokens": 1e-06, - "input_cost_per_character_above_128k_tokens": 2.5e-07, - "input_cost_per_image_above_128k_tokens": 4e-05, - "input_cost_per_video_per_second_above_128k_tokens": 4e-05, - "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, - "output_cost_per_token": 3e-07, - "output_cost_per_character": 7.5e-08, - "output_cost_per_token_above_128k_tokens": 6e-07, - "output_cost_per_character_above_128k_tokens": 1.5e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-1.5-flash", - "deprecation_date": "2025-09-24", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.5-flash-001": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 2e-05, - "input_cost_per_video_per_second": 2e-05, - "input_cost_per_audio_per_second": 2e-06, - "input_cost_per_token": 7.5e-08, - "input_cost_per_character": 1.875e-08, - "input_cost_per_token_above_128k_tokens": 1e-06, - "input_cost_per_character_above_128k_tokens": 2.5e-07, - "input_cost_per_image_above_128k_tokens": 4e-05, - "input_cost_per_video_per_second_above_128k_tokens": 4e-05, - "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, - "output_cost_per_token": 3e-07, - "output_cost_per_character": 7.5e-08, - "output_cost_per_token_above_128k_tokens": 6e-07, - "output_cost_per_character_above_128k_tokens": 1.5e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "deprecation_date": "2025-05-24", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-1.5-flash-preview-0514": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 2e-05, - "input_cost_per_video_per_second": 2e-05, - "input_cost_per_audio_per_second": 2e-06, - "input_cost_per_token": 7.5e-08, - "input_cost_per_character": 1.875e-08, - "input_cost_per_token_above_128k_tokens": 1e-06, - "input_cost_per_character_above_128k_tokens": 2.5e-07, - "input_cost_per_image_above_128k_tokens": 4e-05, - "input_cost_per_video_per_second_above_128k_tokens": 4e-05, - "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, - "output_cost_per_token": 4.6875e-09, - "output_cost_per_character": 1.875e-08, - "output_cost_per_token_above_128k_tokens": 9.375e-09, - "output_cost_per_character_above_128k_tokens": 3.75e-08, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true, - "supports_parallel_function_calling": true - }, - "gemini-pro-experimental": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_token": 0, - "output_cost_per_token": 0, - "input_cost_per_character": 0, - "output_cost_per_character": 0, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_function_calling": false, - "supports_tool_choice": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/gemini-experimental", - "supports_parallel_function_calling": true - }, - "gemini-flash-experimental": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_token": 0, - "output_cost_per_token": 0, - "input_cost_per_character": 0, - "output_cost_per_character": 0, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_function_calling": false, - "supports_tool_choice": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/gemini-experimental", - "supports_parallel_function_calling": true - }, - "gemini-pro-vision": { - "max_tokens": 2048, - "max_input_tokens": 16384, - "max_output_tokens": 2048, - "max_images_per_prompt": 16, - "max_videos_per_prompt": 1, - "max_video_length": 2, - "input_cost_per_token": 5e-07, "output_cost_per_token": 1.5e-06, - "input_cost_per_image": 0.0025, - "litellm_provider": "vertex_ai-vision-models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true, - "supports_parallel_function_calling": true + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true }, "gemini-1.0-pro-vision": { - "max_tokens": 2048, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "litellm_provider": "vertex_ai-vision-models", + "max_images_per_prompt": 16, "max_input_tokens": 16384, "max_output_tokens": 2048, - "max_images_per_prompt": 16, - "max_videos_per_prompt": 1, + "max_tokens": 2048, "max_video_length": 2, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "input_cost_per_image": 0.0025, - "litellm_provider": "vertex_ai-vision-models", + "max_videos_per_prompt": 1, "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, + "output_cost_per_token": 1.5e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, "supports_tool_choice": true, - "supports_parallel_function_calling": true + "supports_vision": true }, "gemini-1.0-pro-vision-001": { - "max_tokens": 2048, + "deprecation_date": "2025-04-09", + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "litellm_provider": "vertex_ai-vision-models", + "max_images_per_prompt": 16, "max_input_tokens": 16384, "max_output_tokens": 2048, - "max_images_per_prompt": 16, - "max_videos_per_prompt": 1, + "max_tokens": 2048, "max_video_length": 2, - "input_cost_per_token": 5e-07, + "max_videos_per_prompt": 1, + "mode": "chat", "output_cost_per_token": 1.5e-06, - "input_cost_per_image": 0.0025, - "litellm_provider": "vertex_ai-vision-models", - "mode": "chat", + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_function_calling": true, - "supports_vision": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "deprecation_date": "2025-04-09", + "supports_parallel_function_calling": true, "supports_tool_choice": true, - "supports_parallel_function_calling": true + "supports_vision": true }, - "medlm-medium": { - "max_tokens": 8192, - "max_input_tokens": 32768, - "max_output_tokens": 8192, - "input_cost_per_character": 5e-07, - "output_cost_per_character": 1e-06, + "gemini-1.0-ultra": { + "input_cost_per_character": 1.25e-07, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 0.002, "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true - }, - "medlm-large": { - "max_tokens": 1024, "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_character": 5e-06, - "output_cost_per_character": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", + "max_output_tokens": 2048, + "max_tokens": 8192, "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "output_cost_per_character": 3.75e-07, + "output_cost_per_token": 1.5e-06, + "source": "As of Jun, 2024. There is no available doc on vertex ai pricing gemini-1.0-ultra-001. Using gemini-1.0-pro pricing. Got max_tokens info here: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, "supports_tool_choice": true }, - "gemini-2.5-pro-exp-03-25": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, + "gemini-1.0-ultra-001": { + "input_cost_per_character": 1.25e-07, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 0.002, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 8192, + "max_output_tokens": 2048, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 3.75e-07, + "output_cost_per_token": 1.5e-06, + "source": "As of Jun, 2024. There is no available doc on vertex ai pricing gemini-1.0-ultra-001. Using gemini-1.0-pro pricing. Got max_tokens info here: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "gemini-1.5-flash": { + "input_cost_per_audio_per_second": 2e-06, + "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, + "input_cost_per_character": 1.875e-08, + "input_cost_per_character_above_128k_tokens": 2.5e-07, + "input_cost_per_image": 2e-05, + "input_cost_per_image_above_128k_tokens": 4e-05, + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1e-06, + "input_cost_per_video_per_second": 2e-05, + "input_cost_per_video_per_second_above_128k_tokens": 4e-05, + "litellm_provider": "vertex_ai-language-models", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, "max_pdf_size_mb": 30, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini-2.0-pro-exp-02-05": { "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 7.5e-08, + "output_cost_per_character_above_128k_tokens": 1.5e-07, + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini-1.5-flash-001": { + "deprecation_date": "2025-05-24", + "input_cost_per_audio_per_second": 2e-06, + "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, + "input_cost_per_character": 1.875e-08, + "input_cost_per_character_above_128k_tokens": 2.5e-07, + "input_cost_per_image": 2e-05, + "input_cost_per_image_above_128k_tokens": 4e-05, + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1e-06, + "input_cost_per_video_per_second": 2e-05, + "input_cost_per_video_per_second_above_128k_tokens": 4e-05, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 7.5e-08, + "output_cost_per_character_above_128k_tokens": 1.5e-07, + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini-1.5-flash-002": { + "deprecation_date": "2025-09-24", + "input_cost_per_audio_per_second": 2e-06, + "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, + "input_cost_per_character": 1.875e-08, + "input_cost_per_character_above_128k_tokens": 2.5e-07, + "input_cost_per_image": 2e-05, + "input_cost_per_image_above_128k_tokens": 4e-05, + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1e-06, + "input_cost_per_video_per_second": 2e-05, + "input_cost_per_video_per_second_above_128k_tokens": 4e-05, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 7.5e-08, + "output_cost_per_character_above_128k_tokens": 1.5e-07, + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-1.5-flash", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini-1.5-flash-exp-0827": { + "input_cost_per_audio_per_second": 2e-06, + "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, + "input_cost_per_character": 1.875e-08, + "input_cost_per_character_above_128k_tokens": 2.5e-07, + "input_cost_per_image": 2e-05, + "input_cost_per_image_above_128k_tokens": 4e-05, + "input_cost_per_token": 4.688e-09, + "input_cost_per_token_above_128k_tokens": 1e-06, + "input_cost_per_video_per_second": 2e-05, + "input_cost_per_video_per_second_above_128k_tokens": 4e-05, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 1.875e-08, + "output_cost_per_character_above_128k_tokens": 3.75e-08, + "output_cost_per_token": 4.6875e-09, + "output_cost_per_token_above_128k_tokens": 9.375e-09, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini-1.5-flash-preview-0514": { + "input_cost_per_audio_per_second": 2e-06, + "input_cost_per_audio_per_second_above_128k_tokens": 4e-06, + "input_cost_per_character": 1.875e-08, + "input_cost_per_character_above_128k_tokens": 2.5e-07, + "input_cost_per_image": 2e-05, + "input_cost_per_image_above_128k_tokens": 4e-05, + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1e-06, + "input_cost_per_video_per_second": 2e-05, + "input_cost_per_video_per_second_above_128k_tokens": 4e-05, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 1.875e-08, + "output_cost_per_character_above_128k_tokens": 3.75e-08, + "output_cost_per_token": 4.6875e-09, + "output_cost_per_token_above_128k_tokens": 9.375e-09, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini-1.5-pro": { + "input_cost_per_audio_per_second": 3.125e-05, + "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, + "input_cost_per_character": 3.125e-07, + "input_cost_per_character_above_128k_tokens": 6.25e-07, + "input_cost_per_image": 0.00032875, + "input_cost_per_image_above_128k_tokens": 0.0006575, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_128k_tokens": 2.5e-06, + "input_cost_per_video_per_second": 0.00032875, + "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, + "litellm_provider": "vertex_ai-language-models", "max_input_tokens": 2097152, "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini-2.0-flash-exp": { "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 1.5e-07, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 6e-07, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "vertex_ai-language-models", "mode": "chat", - "supports_system_messages": true, + "output_cost_per_character": 1.25e-06, + "output_cost_per_character_above_128k_tokens": 2.5e-06, + "output_cost_per_token": 5e-06, + "output_cost_per_token_above_128k_tokens": 1e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_function_calling": true, - "supports_vision": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, "supports_response_schema": true, - "supports_audio_output": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 3.75e-08, - "supports_prompt_caching": true - }, - "gemini-2.0-flash-001": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "deprecation_date": "2026-02-05", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 3.75e-08, - "supports_prompt_caching": true + "supports_vision": true }, - "gemini-2.0-flash-thinking-exp": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true - }, - "gemini-2.0-flash-thinking-exp-01-21": { - "max_tokens": 65536, - "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": false, - "supports_vision": true, - "supports_response_schema": false, - "supports_audio_output": false, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true - }, - "gemini-2.5-pro": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, + "gemini-1.5-pro-001": { + "deprecation_date": "2025-05-24", + "input_cost_per_audio_per_second": 3.125e-05, + "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, + "input_cost_per_character": 3.125e-07, + "input_cost_per_character_above_128k_tokens": 6.25e-07, + "input_cost_per_image": 0.00032875, + "input_cost_per_image_above_128k_tokens": 0.0006575, "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, + "input_cost_per_token_above_128k_tokens": 2.5e-06, + "input_cost_per_video_per_second": 0.00032875, + "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_system_messages": true, + "output_cost_per_character": 1.25e-06, + "output_cost_per_character_above_128k_tokens": 2.5e-06, + "output_cost_per_token": 5e-06, + "output_cost_per_token_above_128k_tokens": 1e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, + "supports_parallel_function_calling": true, "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-pro-exp-03-25": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 0.0, - "input_cost_per_token_above_200k_tokens": 0.0, - "output_cost_per_token": 0.0, - "output_cost_per_token_above_200k_tokens": 0.0, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 5, - "tpm": 250000, "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true + "supports_vision": true }, - "gemini/gemini-2.5-pro": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, + "gemini-1.5-pro-002": { + "deprecation_date": "2025-09-24", + "input_cost_per_audio_per_second": 3.125e-05, + "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, + "input_cost_per_character": 3.125e-07, + "input_cost_per_character_above_128k_tokens": 6.25e-07, + "input_cost_per_image": 0.00032875, + "input_cost_per_image_above_128k_tokens": 0.0006575, "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 2000, - "tpm": 800000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-flash": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.5e-06, - "output_cost_per_reasoning_token": 2.5e-06, - "litellm_provider": "gemini", - "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "tpm": 8000000, - "rpm": 100000, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-flash-image-preview": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-05, - "output_cost_per_reasoning_token": 3e-05, - "output_cost_per_image": 0.039, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "tpm": 8000000, - "rpm": 100000, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true - }, - "gemini-2.5-flash": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.5e-06, - "output_cost_per_reasoning_token": 2.5e-06, + "input_cost_per_token_above_128k_tokens": 2.5e-06, + "input_cost_per_video_per_second": 0.00032875, + "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, + "output_cost_per_character": 1.25e-06, + "output_cost_per_character_above_128k_tokens": 2.5e-06, + "output_cost_per_token": 5e-06, + "output_cost_per_token_above_128k_tokens": 1e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-1.5-pro", "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-live-001": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 3.5e-07, - "input_cost_per_audio_token": 2.1e-06, - "input_cost_per_image": 2.1e-06, - "input_cost_per_video_per_second": 2.1e-06, - "output_cost_per_token": 1.5e-06, - "output_cost_per_audio_token": 8.5e-06, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10, - "tpm": 250000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, "supports_response_schema": true, - "supports_audio_output": true, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "audio" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2-0-flash-live-001", - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-flash-preview-tts": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "output_cost_per_reasoning_token": 3.5e-06, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10, - "tpm": 250000, "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_response_schema": true, - "supports_audio_output": false, "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "audio" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_web_search": true, - "cache_read_input_token_cost": 3.75e-08, - "supports_prompt_caching": true + "supports_vision": true }, - "gemini/gemini-2.5-flash-preview-05-20": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.5e-06, - "output_cost_per_reasoning_token": 2.5e-06, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10, - "tpm": 250000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-flash-preview-04-17": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "output_cost_per_reasoning_token": 3.5e-06, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10, - "tpm": 250000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_web_search": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 3.75e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-flash-lite-preview-06-17": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 5e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "output_cost_per_reasoning_token": 4e-07, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 15, - "tpm": 250000, - "supports_reasoning": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-flash-lite": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 5e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "output_cost_per_reasoning_token": 4e-07, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 15, - "tpm": 250000, - "supports_reasoning": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini-2.5-flash-image-preview": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-05, - "output_cost_per_reasoning_token": 3e-05, - "output_cost_per_image": 0.039, + "gemini-1.5-pro-preview-0215": { + "input_cost_per_audio_per_second": 3.125e-05, + "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, + "input_cost_per_character": 3.125e-07, + "input_cost_per_character_above_128k_tokens": 6.25e-07, + "input_cost_per_image": 0.00032875, + "input_cost_per_image_above_128k_tokens": 0.0006575, + "input_cost_per_token": 7.8125e-08, + "input_cost_per_token_above_128k_tokens": 1.5625e-07, + "input_cost_per_video_per_second": 0.00032875, + "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_system_messages": true, + "output_cost_per_character": 1.25e-06, + "output_cost_per_character_above_128k_tokens": 2.5e-06, + "output_cost_per_token": 3.125e-07, + "output_cost_per_token_above_128k_tokens": 6.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "tpm": 8000000, - "rpm": 100000, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true }, - "gemini-2.5-flash-preview-05-20": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.5e-06, - "output_cost_per_reasoning_token": 2.5e-06, + "gemini-1.5-pro-preview-0409": { + "input_cost_per_audio_per_second": 3.125e-05, + "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, + "input_cost_per_character": 3.125e-07, + "input_cost_per_character_above_128k_tokens": 6.25e-07, + "input_cost_per_image": 0.00032875, + "input_cost_per_image_above_128k_tokens": 0.0006575, + "input_cost_per_token": 7.8125e-08, + "input_cost_per_token_above_128k_tokens": 1.5625e-07, + "input_cost_per_video_per_second": 0.00032875, + "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, + "output_cost_per_character": 1.25e-06, + "output_cost_per_character_above_128k_tokens": 2.5e-06, + "output_cost_per_token": 3.125e-07, + "output_cost_per_token_above_128k_tokens": 6.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true + "supports_response_schema": true, + "supports_tool_choice": true }, - "gemini-2.5-flash-preview-04-17": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1e-06, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "output_cost_per_reasoning_token": 3.5e-06, + "gemini-1.5-pro-preview-0514": { + "input_cost_per_audio_per_second": 3.125e-05, + "input_cost_per_audio_per_second_above_128k_tokens": 6.25e-05, + "input_cost_per_character": 3.125e-07, + "input_cost_per_character_above_128k_tokens": 6.25e-07, + "input_cost_per_image": 0.00032875, + "input_cost_per_image_above_128k_tokens": 0.0006575, + "input_cost_per_token": 7.8125e-08, + "input_cost_per_token_above_128k_tokens": 1.5625e-07, + "input_cost_per_video_per_second": 0.00032875, + "input_cost_per_video_per_second_above_128k_tokens": 0.0006575, "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, + "output_cost_per_character": 1.25e-06, + "output_cost_per_character_above_128k_tokens": 2.5e-06, + "output_cost_per_token": 3.125e-07, + "output_cost_per_token_above_128k_tokens": 6.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 3.75e-08, - "supports_prompt_caching": true - }, - "gemini-2.5-flash-lite-preview-06-17": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 5e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "output_cost_per_reasoning_token": 4e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_reasoning": true, + "supports_response_schema": true, "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini-2.5-flash-lite": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 5e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "output_cost_per_reasoning_token": 4e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_endpoints": [ - "/v1/chat/completions", - "/v1/completions", - "/v1/batch" - ], - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true + "supports_tool_choice": true }, "gemini-2.0-flash": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, + "cache_read_input_token_cost": 2.5e-08, "input_cost_per_audio_token": 7e-07, "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_audio_input": true, + "output_cost_per_token": 4e-07, + "source": "https://ai.google.dev/pricing#2_0flash", "supported_modalities": [ "text", "image", @@ -8603,33 +8673,120 @@ "text", "image" ], - "supports_tool_choice": true, - "source": "https://ai.google.dev/pricing#2_0flash", + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_web_search": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, "supports_url_context": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.0-flash-001": { + "cache_read_input_token_cost": 3.75e-08, + "deprecation_date": "2026-02-05", + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.0-flash-exp": { + "cache_read_input_token_cost": 3.75e-08, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 6e-07, + "output_cost_per_token_above_128k_tokens": 0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true }, "gemini-2.0-flash-lite": { - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 50, + "cache_read_input_token_cost": 1.875e-08, "input_cost_per_audio_token": 7.5e-08, "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 3e-07, "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 50, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, + "output_cost_per_token": 3e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supported_modalities": [ "text", "image", @@ -8639,32 +8796,33 @@ "supported_output_modalities": [ "text" ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, + "supports_audio_output": true, + "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 1.875e-08, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true }, "gemini-2.0-flash-lite-001": { - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 50, + "cache_read_input_token_cost": 1.875e-08, + "deprecation_date": "2026-02-25", "input_cost_per_audio_token": 7.5e-08, "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 3e-07, "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 50, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, + "output_cost_per_token": 3e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supported_modalities": [ "text", "image", @@ -8674,38 +8832,259 @@ "supported_output_modalities": [ "text" ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, - "deprecation_date": "2026-02-25", + "supports_audio_output": true, + "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 1.875e-08, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true }, - "gemini-2.5-pro-preview-06-05": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, + "gemini-2.0-flash-live-preview-04-09": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 3e-06, + "input_cost_per_image": 3e-06, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 3e-06, + "litellm_provider": "vertex_ai-language-models", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 1.25e-06, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_audio_token": 1.2e-05, + "output_cost_per_token": 2e-06, + "rpm": 10, + "source": "https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/gemini#gemini-2-0-flash-live-preview-04-09", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini-2.0-flash-preview-image-generation": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 4e-07, + "source": "https://ai.google.dev/pricing#2_0flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.0-flash-thinking-exp": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.0-flash-thinking-exp-01-21": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "max_pdf_size_mb": 30, + "max_tokens": 65536, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": false, + "supports_function_calling": false, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": false, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.0-pro-exp-02-05": { + "cache_read_input_token_cost": 3.125e-07, "input_cost_per_token": 1.25e-06, "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", "output_cost_per_token": 1e-05, "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_input": true, "supports_function_calling": true, - "supports_vision": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, "supports_response_schema": true, - "supports_audio_output": false, + "supports_system_messages": true, "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-flash": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 3e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 2.5e-06, + "output_cost_per_token": 2.5e-06, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supported_endpoints": [ "/v1/chat/completions", "/v1/completions", @@ -8720,37 +9099,396 @@ "supported_output_modalities": [ "text" ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supports_audio_output": false, + "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_web_search": true, "supports_pdf_input": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true }, - "gemini-2.5-pro-preview-05-06": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, + "gemini-2.5-flash-image-preview": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 3e-07, + "litellm_provider": "vertex_ai-language-models", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "image_generation", + "output_cost_per_image": 0.039, + "output_cost_per_reasoning_token": 3e-05, + "output_cost_per_token": 3e-05, + "rpm": 100000, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 8000000 + }, + "gemini-2.5-flash-lite": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 5e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 4e-07, + "output_cost_per_token": 4e-07, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-flash-lite-preview-06-17": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 5e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 4e-07, + "output_cost_per_token": 4e-07, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-flash-preview-04-17": { + "cache_read_input_token_cost": 3.75e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 3.5e-06, + "output_cost_per_token": 6e-07, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-flash-preview-05-20": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 3e-07, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 2.5e-06, + "output_cost_per_token": 2.5e-06, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-pro": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_input": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-pro-exp-03-25": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_input": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-pro-preview-03-25": { + "cache_read_input_token_cost": 3.125e-07, "input_cost_per_audio_token": 1.25e-06, "input_cost_per_token": 1.25e-06, "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", "output_cost_per_token": 1e-05, "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-pro-preview-05-06": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_audio_token": 1.25e-06, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supported_endpoints": [ "/v1/chat/completions", "/v1/completions", @@ -8768,37 +9506,37 @@ "supported_regions": [ "global" ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supports_audio_output": false, + "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_web_search": true, "supports_pdf_input": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true }, - "gemini-2.5-pro-preview-03-25": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, + "gemini-2.5-pro-preview-06-05": { + "cache_read_input_token_cost": 3.125e-07, "input_cost_per_audio_token": 1.25e-06, "input_cost_per_token": 1.25e-06, "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", "output_cost_per_token": 1e-05, "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_reasoning": true, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supported_endpoints": [ "/v1/chat/completions", "/v1/completions", @@ -8813,794 +9551,678 @@ "supported_output_modalities": [ "text" ], - "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supports_audio_output": false, + "supports_function_calling": true, "supports_parallel_function_calling": true, - "supports_web_search": true, "supports_pdf_input": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini-2.0-flash-preview-image-generation": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_audio_input": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "supports_tool_choice": true, - "source": "https://ai.google.dev/pricing#2_0flash", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini-2.5-pro-preview-tts": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "audio" - ], - "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_parallel_function_calling": true, - "supports_web_search": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-pro-exp-02-05": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 2, - "tpm": 1000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-preview-image-generation": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_audio_input": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "supports_tool_choice": true, - "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_audio_input": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "supports_tool_choice": true, - "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true, - "supports_url_context": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-lite": { - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 50, - "input_cost_per_audio_token": 7.5e-08, - "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 3e-07, - "litellm_provider": "gemini", - "mode": "chat", - "tpm": 4000000, - "rpm": 4000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.0-flash-lite", - "supports_web_search": true, - "cache_read_input_token_cost": 1.875e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-001": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true, - "cache_read_input_token_cost": 2.5e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-pro-preview-tts": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "audio" - ], - "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_web_search": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-pro-preview-06-05": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-pro-preview-05-06": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_web_search": true, - "supports_url_context": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.5-pro-preview-03-25": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1.25e-06, - "input_cost_per_token_above_200k_tokens": 2.5e-06, - "output_cost_per_token": 1e-05, - "output_cost_per_token_above_200k_tokens": 1.5e-05, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 10000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_web_search": true, - "supports_pdf_input": true, - "cache_read_input_token_cost": 3.125e-07, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-exp": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "tpm": 4000000, - "rpm": 10, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-lite-preview-02-05": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7.5e-08, - "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 3e-07, - "litellm_provider": "gemini", - "mode": "chat", - "rpm": 60000, - "tpm": 10000000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "supports_tool_choice": true, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash-lite", - "supports_web_search": true, - "cache_read_input_token_cost": 1.875e-08, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-thinking-exp": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "tpm": 4000000, - "rpm": 10, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true - }, - "gemini/gemini-2.0-flash-thinking-exp-01-21": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "tpm": 4000000, - "rpm": 10, - "supported_modalities": [ - "text", - "image", - "audio", - "video" - ], - "supported_output_modalities": [ - "text", - "image" - ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", - "supports_tool_choice": true, - "supports_web_search": true, - "cache_read_input_token_cost": 0.0, - "supports_prompt_caching": true - }, - "gemini/gemma-3-27b-it": { - "max_tokens": 8192, - "max_input_tokens": 131072, - "max_output_tokens": 8192, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "source": "https://aistudio.google.com", - "supports_tool_choice": true - }, - "gemini/learnlm-1.5-pro-experimental": { - "max_tokens": 8192, - "max_input_tokens": 32767, - "max_output_tokens": 8192, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": false, - "source": "https://aistudio.google.com", - "supports_tool_choice": true - }, - "gemini/veo-3.0-generate-preview": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "output_cost_per_second": 0.75, - "litellm_provider": "gemini", - "mode": "video_generation", - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "video" - ], - "source": "https://ai.google.dev/gemini-api/docs/video" - }, - "gemini/veo-3.0-fast-generate-preview": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "output_cost_per_second": 0.40, - "litellm_provider": "gemini", - "mode": "video_generation", - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "video" - ], - "source": "https://ai.google.dev/gemini-api/docs/video" - }, - "gemini/veo-2.0-generate-001": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "output_cost_per_second": 0.35, - "litellm_provider": "gemini", - "mode": "video_generation", - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "video" - ], - "source": "https://ai.google.dev/gemini-api/docs/video" - }, - "vertex_ai/claude-opus-4-1": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 15e-06, - "output_cost_per_token": 75e-06, - "input_cost_per_token_batches": 7.5e-06, - "output_cost_per_token_batches": 37.5e-06, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-opus-4-1@20250805": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 15e-06, - "output_cost_per_token": 75e-06, - "input_cost_per_token_batches": 7.5e-06, - "output_cost_per_token_batches": 37.5e-06, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-sonnet": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "gemini-2.0-flash-live-preview-04-09": { - "max_tokens": 65535, - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 5e-07, - "input_cost_per_audio_token": 3e-06, - "input_cost_per_image": 3e-06, - "input_cost_per_video_per_second": 3e-06, - "output_cost_per_token": 2e-06, - "output_cost_per_audio_token": 1.2e-05, - "litellm_provider": "vertex_ai-language-models", - "mode": "chat", - "rpm": 10, - "tpm": 250000, - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, + "supports_prompt_caching": true, "supports_reasoning": true, "supports_response_schema": true, - "supports_audio_output": true, + "supports_system_messages": true, "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-2.5-pro-preview-tts": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "audio" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gemini-embedding-001": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 2048, + "max_tokens": 2048, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 3072, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + }, + "gemini-flash-experimental": { + "input_cost_per_character": 0, + "input_cost_per_token": 0, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_token": 0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/gemini-experimental", + "supports_function_calling": false, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "gemini-pro": { + "input_cost_per_character": 1.25e-07, + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "input_cost_per_video_per_second": 0.002, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 32760, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 3.75e-07, + "output_cost_per_token": 1.5e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "gemini-pro-experimental": { + "input_cost_per_character": 0, + "input_cost_per_token": 0, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_token": 0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/gemini-experimental", + "supports_function_calling": false, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "gemini-pro-vision": { + "input_cost_per_image": 0.0025, + "input_cost_per_token": 5e-07, + "litellm_provider": "vertex_ai-vision-models", + "max_images_per_prompt": 16, + "max_input_tokens": 16384, + "max_output_tokens": 2048, + "max_tokens": 2048, + "max_video_length": 2, + "max_videos_per_prompt": 1, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini/gemini-1.5-flash": { + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1.5e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "rpm": 2000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-001": { + "cache_creation_input_token_cost": 1e-06, + "cache_read_input_token_cost": 1.875e-08, + "deprecation_date": "2025-05-24", + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1.5e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "rpm": 2000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-002": { + "cache_creation_input_token_cost": 1e-06, + "cache_read_input_token_cost": 1.875e-08, + "deprecation_date": "2025-09-24", + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1.5e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "rpm": 2000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-8b": { + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 4000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-8b-exp-0827": { + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 4000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-8b-exp-0924": { + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 4000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-exp-0827": { + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 2000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-flash-latest": { + "input_cost_per_token": 7.5e-08, + "input_cost_per_token_above_128k_tokens": 1.5e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 3e-07, + "output_cost_per_token_above_128k_tokens": 6e-07, + "rpm": 2000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-pro": { + "input_cost_per_token": 3.5e-06, + "input_cost_per_token_above_128k_tokens": 7e-06, + "litellm_provider": "gemini", + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.05e-05, + "output_cost_per_token_above_128k_tokens": 2.1e-05, + "rpm": 1000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-pro-001": { + "deprecation_date": "2025-05-24", + "input_cost_per_token": 3.5e-06, + "input_cost_per_token_above_128k_tokens": 7e-06, + "litellm_provider": "gemini", + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.05e-05, + "output_cost_per_token_above_128k_tokens": 2.1e-05, + "rpm": 1000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-pro-002": { + "deprecation_date": "2025-09-24", + "input_cost_per_token": 3.5e-06, + "input_cost_per_token_above_128k_tokens": 7e-06, + "litellm_provider": "gemini", + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.05e-05, + "output_cost_per_token_above_128k_tokens": 2.1e-05, + "rpm": 1000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-pro-exp-0801": { + "input_cost_per_token": 3.5e-06, + "input_cost_per_token_above_128k_tokens": 7e-06, + "litellm_provider": "gemini", + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.05e-05, + "output_cost_per_token_above_128k_tokens": 2.1e-05, + "rpm": 1000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-pro-exp-0827": { + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 1000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-1.5-pro-latest": { + "input_cost_per_token": 3.5e-06, + "input_cost_per_token_above_128k_tokens": 7e-06, + "litellm_provider": "gemini", + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.05e-06, + "output_cost_per_token_above_128k_tokens": 2.1e-05, + "rpm": 1000, + "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-2.0-flash": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 4e-07, + "rpm": 10000, + "source": "https://ai.google.dev/pricing#2_0flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.0-flash-001": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 4e-07, + "rpm": 10000, + "source": "https://ai.google.dev/pricing#2_0flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.0-flash-exp": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 10, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 4000000 + }, + "gemini/gemini-2.0-flash-lite": { + "cache_read_input_token_cost": 1.875e-08, + "input_cost_per_audio_token": 7.5e-08, + "input_cost_per_token": 7.5e-08, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 50, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 3e-07, + "rpm": 4000, + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.0-flash-lite", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 4000000 + }, + "gemini/gemini-2.0-flash-lite-preview-02-05": { + "cache_read_input_token_cost": 1.875e-08, + "input_cost_per_audio_token": 7.5e-08, + "input_cost_per_token": 7.5e-08, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 3e-07, + "rpm": 60000, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash-lite", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.0-flash-live-001": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 2.1e-06, + "input_cost_per_image": 2.1e-06, + "input_cost_per_token": 3.5e-07, + "input_cost_per_video_per_second": 2.1e-06, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_audio_token": 8.5e-06, + "output_cost_per_token": 1.5e-06, + "rpm": 10, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2-0-flash-live-001", "supported_endpoints": [ "/v1/chat/completions", "/v1/completions" @@ -9615,11386 +10237,11104 @@ "text", "audio" ], - "source": "https://cloud.google.com/vertex-ai/docs/generative-ai/model-reference/gemini#gemini-2-0-flash-live-preview-04-09", - "supports_web_search": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini/gemini-2.0-flash-preview-image-generation": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 4e-07, + "rpm": 10000, + "source": "https://ai.google.dev/pricing#2_0flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.0-flash-thinking-exp": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 10, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 4000000 + }, + "gemini/gemini-2.0-flash-thinking-exp-01-21": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 10, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 4000000 + }, + "gemini/gemini-2.0-pro-exp-02-05": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "rpm": 2, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supports_audio_input": true, + "supports_function_calling": true, "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 1000000 + }, + "gemini/gemini-2.5-flash": { "cache_read_input_token_cost": 7.5e-08, - "supports_prompt_caching": true - }, - "vertex_ai/claude-3-sonnet@20240229": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 3e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-5-sonnet": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-5-sonnet@20240620": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-5-sonnet-v2": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-5-sonnet-v2@20241022": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-7-sonnet@20250219": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-06-01", - "supports_reasoning": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-opus-4": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "vertex_ai/claude-opus-4@20250514": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "vertex_ai/claude-sonnet-4": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "vertex_ai/claude-sonnet-4@20250514": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "vertex_ai/claude-3-haiku": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-haiku@20240307": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-5-haiku": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-5-haiku@20241022": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_pdf_input": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-opus": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/claude-3-opus@20240229": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "vertex_ai-anthropic_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "vertex_ai/deepseek-ai/deepseek-r1-0528-maas": { - "max_tokens": 8192, - "max_input_tokens": 65336, - "max_output_tokens": 8192, - "input_cost_per_token": 1.35e-06, - "output_cost_per_token": 5.4e-06, - "litellm_provider": "vertex_ai-deepseek_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "vertex_ai/openai/gpt-oss-20b-maas": { - "max_tokens": 32768, - "max_input_tokens": 131072, - "max_output_tokens": 32768, - "input_cost_per_token": 0.075e-06, - "output_cost_per_token": 0.30e-06, - "litellm_provider": "vertex_ai-openai_models", - "mode": "chat", - "supports_reasoning": true, - "source": "https://console.cloud.google.com/vertex-ai/publishers/openai/model-garden/gpt-oss-120b-maas" - }, - "vertex_ai/openai/gpt-oss-120b-maas": { - "max_tokens": 32768, - "max_input_tokens": 131072, - "max_output_tokens": 32768, - "input_cost_per_token": 0.15e-06, - "output_cost_per_token": 0.60e-06, - "litellm_provider": "vertex_ai-openai_models", - "mode": "chat", - "supports_reasoning": true, - "source": "https://console.cloud.google.com/vertex-ai/publishers/openai/model-garden/gpt-oss-120b-maas" - }, - "vertex_ai/qwen/qwen3-coder-480b-a35b-instruct-maas": { - "max_tokens": 32768, - "max_input_tokens": 262144, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 4e-06, - "litellm_provider": "vertex_ai-qwen_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/qwen/qwen3-235b-a22b-instruct-2507-maas": { - "max_tokens": 16384, - "max_input_tokens": 262144, - "max_output_tokens": 16384, - "input_cost_per_token": 0.25e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "vertex_ai-qwen_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/meta/llama3-405b-instruct-maas": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true - }, - "vertex_ai/meta/llama-4-scout-17b-16e-instruct-maas": { - "max_tokens": 10000000, - "max_input_tokens": 10000000, - "max_output_tokens": 10000000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true, - "supports_function_calling": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "vertex_ai/meta/llama-4-scout-17b-128e-instruct-maas": { - "max_tokens": 10000000, - "max_input_tokens": 10000000, - "max_output_tokens": 10000000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true, - "supports_function_calling": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "vertex_ai/meta/llama-4-maverick-17b-128e-instruct-maas": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 1.15e-06, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true, - "supports_function_calling": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "vertex_ai/meta/llama-4-maverick-17b-16e-instruct-maas": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 1.15e-06, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true, - "supports_function_calling": true, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "vertex_ai/meta/llama3-70b-instruct-maas": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true - }, - "vertex_ai/meta/llama3-8b-instruct-maas": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", - "supports_tool_choice": true - }, - "vertex_ai/meta/llama-3.1-8b-instruct-maas": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "supports_system_messages": true, - "supports_vision": true, - "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", - "supports_tool_choice": true, - "metadata": { - "notes": "VertexAI states that The Llama 3.1 API service for llama-3.1-70b-instruct-maas and llama-3.1-8b-instruct-maas are in public preview and at no cost." - } - }, - "vertex_ai/meta/llama-3.1-70b-instruct-maas": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "supports_system_messages": true, - "supports_vision": true, - "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", - "supports_tool_choice": true - }, - "vertex_ai/meta/llama-3.1-405b-instruct-maas": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1.6e-05, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "supports_system_messages": true, - "supports_vision": true, - "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", - "supports_tool_choice": true - }, - "vertex_ai/meta/llama-3.2-90b-vision-instruct-maas": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "vertex_ai-llama_models", - "mode": "chat", - "supports_system_messages": true, - "supports_vision": true, - "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", - "supports_tool_choice": true, - "metadata": { - "notes": "VertexAI states that The Llama 3.2 API service is at no cost during public preview, and will be priced as per dollar-per-1M-tokens at GA." - } - }, - "vertex_ai/mistral-large@latest": { - "max_tokens": 8191, - "max_input_tokens": 128000, - "max_output_tokens": 8191, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/mistral-large@2411-001": { - "max_tokens": 8191, - "max_input_tokens": 128000, - "max_output_tokens": 8191, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/mistral-large-2411": { - "max_tokens": 8191, - "max_input_tokens": 128000, - "max_output_tokens": 8191, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/mistral-large@2407": { - "max_tokens": 8191, - "max_input_tokens": 128000, - "max_output_tokens": 8191, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/mistral-nemo@latest": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/mistral-small-2503@001": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "vertex_ai-mistral_models", - "supports_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "vertex_ai/mistral-small-2503": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "vertex_ai/jamba-1.5-mini@001": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "vertex_ai-ai21_models", - "mode": "chat", - "supports_tool_choice": true - }, - "vertex_ai/jamba-1.5-large@001": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "vertex_ai-ai21_models", - "mode": "chat", - "supports_tool_choice": true - }, - "vertex_ai/jamba-1.5": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "vertex_ai-ai21_models", - "mode": "chat", - "supports_tool_choice": true - }, - "vertex_ai/jamba-1.5-mini": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "vertex_ai-ai21_models", - "mode": "chat", - "supports_tool_choice": true - }, - "vertex_ai/jamba-1.5-large": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "vertex_ai-ai21_models", - "mode": "chat", - "supports_tool_choice": true - }, - "vertex_ai/mistral-nemo@2407": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/codestral@latest": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/codestral@2405": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/codestral-2501": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "vertex_ai-mistral_models", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "vertex_ai/imagegeneration@006": { - "output_cost_per_image": 0.02, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/imagen-4.0-generate-001": { - "output_cost_per_image": 0.04, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/imagen-4.0-ultra-generate-001": { - "output_cost_per_image": 0.06, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/imagen-4.0-fast-generate-001": { - "output_cost_per_image": 0.02, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/imagen-3.0-generate-002": { - "output_cost_per_image": 0.04, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/imagen-3.0-generate-001": { - "output_cost_per_image": 0.04, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/imagen-3.0-fast-generate-001": { - "output_cost_per_image": 0.02, - "litellm_provider": "vertex_ai-image-models", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "vertex_ai/veo-3.0-generate-preview": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "output_cost_per_second": 0.75, - "litellm_provider": "vertex_ai-video-models", - "mode": "video_generation", - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "video" - ], - "source": "https://ai.google.dev/gemini-api/docs/video" - }, - "vertex_ai/veo-3.0-fast-generate-preview": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "output_cost_per_second": 0.40, - "litellm_provider": "vertex_ai-video-models", - "mode": "video_generation", - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "video" - ], - "source": "https://ai.google.dev/gemini-api/docs/video" - }, - "vertex_ai/veo-2.0-generate-001": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "output_cost_per_second": 0.35, - "litellm_provider": "vertex_ai-video-models", - "mode": "video_generation", - "supported_modalities": [ - "text" - ], - "supported_output_modalities": [ - "video" - ], - "source": "https://ai.google.dev/gemini-api/docs/video" - }, - "text-embedding-004": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" - }, - "gemini-embedding-001": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "output_vector_size": 3072, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" - }, - "text-embedding-005": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" - }, - "text-multilingual-embedding-002": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" - }, - "multimodalembedding": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "output_vector_size": 768, - "input_cost_per_character": 2e-07, - "input_cost_per_image": 0.0001, - "input_cost_per_video_per_second": 0.0005, - "input_cost_per_video_per_second_above_8s_interval": 0.001, - "input_cost_per_video_per_second_above_15s_interval": 0.002, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", + "output_cost_per_reasoning_token": 2.5e-06, + "output_cost_per_token": 2.5e-06, + "rpm": 100000, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supported_endpoints": [ - "/v1/embeddings" + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" ], "supported_modalities": [ "text", "image", + "audio", "video" ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 8000000 }, - "multimodalembedding@001": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "output_vector_size": 768, - "input_cost_per_character": 2e-07, - "input_cost_per_image": 0.0001, - "input_cost_per_video_per_second": 0.0005, - "input_cost_per_video_per_second_above_8s_interval": 0.001, - "input_cost_per_video_per_second_above_15s_interval": 0.002, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", + "gemini/gemini-2.5-flash-image-preview": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 3e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "image_generation", + "output_cost_per_image": 0.039, + "output_cost_per_reasoning_token": 3e-05, + "output_cost_per_token": 3e-05, + "rpm": 100000, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supported_endpoints": [ - "/v1/embeddings" + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" ], "supported_modalities": [ "text", "image", + "audio", "video" ], - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + "supported_output_modalities": [ + "text", + "image" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 8000000 }, - "text-embedding-large-exp-03-07": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 3072, - "input_cost_per_character": 2.5e-08, + "gemini/gemini-2.5-flash-lite": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 5e-07, "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" - }, - "textembedding-gecko": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "textembedding-gecko-multilingual": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "textembedding-gecko-multilingual@001": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "textembedding-gecko@001": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "textembedding-gecko@003": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_character": 2.5e-08, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "text-embedding-preview-0409": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_token": 6.25e-09, - "input_cost_per_token_batch_requests": 5e-09, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "text-multilingual-embedding-preview-0409": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "output_vector_size": 768, - "input_cost_per_token": 6.25e-09, - "output_cost_per_token": 0, - "litellm_provider": "vertex_ai-embedding-models", - "mode": "embedding", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "palm/chat-bison": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "palm", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "palm/chat-bison-001": { - "max_tokens": 4096, - "max_input_tokens": 8192, - "max_output_tokens": 4096, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "palm", - "mode": "chat", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "palm/text-bison": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "palm", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "palm/text-bison-001": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "palm", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "palm/text-bison-safety-off": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "palm", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "palm/text-bison-safety-recitation-off": { - "max_tokens": 1024, - "max_input_tokens": 8192, - "max_output_tokens": 1024, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 1.25e-07, - "litellm_provider": "palm", - "mode": "completion", - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" - }, - "gemini/gemini-1.5-flash-002": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, + "litellm_provider": "gemini", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, "max_pdf_size_mb": 30, - "cache_read_input_token_cost": 1.875e-08, - "cache_creation_input_token_cost": 1e-06, - "input_cost_per_token": 7.5e-08, - "input_cost_per_token_above_128k_tokens": 1.5e-07, - "output_cost_per_token": 3e-07, - "output_cost_per_token_above_128k_tokens": 6e-07, - "litellm_provider": "gemini", + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_system_messages": true, + "output_cost_per_reasoning_token": 4e-07, + "output_cost_per_token": 4e-07, + "rpm": 15, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, "supports_prompt_caching": true, - "tpm": 4000000, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini/gemini-2.5-flash-lite-preview-06-17": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_audio_token": 5e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 4e-07, + "output_cost_per_token": 4e-07, + "rpm": 15, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-lite", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini/gemini-2.5-flash-preview-04-17": { + "cache_read_input_token_cost": 3.75e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 3.5e-06, + "output_cost_per_token": 6e-07, + "rpm": 10, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini/gemini-2.5-flash-preview-05-20": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 3e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 2.5e-06, + "output_cost_per_token": 2.5e-06, + "rpm": 10, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini/gemini-2.5-flash-preview-tts": { + "cache_read_input_token_cost": 3.75e-08, + "input_cost_per_audio_token": 1e-06, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_reasoning_token": 3.5e-06, + "output_cost_per_token": 6e-07, + "rpm": 10, + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "audio" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 + }, + "gemini/gemini-2.5-pro": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "rpm": 2000, - "source": "https://ai.google.dev/pricing", - "deprecation_date": "2025-09-24", - "supports_tool_choice": true - }, - "gemini/gemini-1.5-flash-001": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "cache_read_input_token_cost": 1.875e-08, - "cache_creation_input_token_cost": 1e-06, - "input_cost_per_token": 7.5e-08, - "input_cost_per_token_above_128k_tokens": 1.5e-07, - "output_cost_per_token": 3e-07, - "output_cost_per_token_above_128k_tokens": 6e-07, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_input": true, "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, + "supports_pdf_input": true, "supports_prompt_caching": true, - "tpm": 4000000, - "rpm": 2000, - "source": "https://ai.google.dev/pricing", - "deprecation_date": "2025-05-24", - "supports_tool_choice": true + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 800000 }, - "gemini/gemini-1.5-flash": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, + "gemini/gemini-2.5-pro-exp-03-25": { + "cache_read_input_token_cost": 0.0, + "input_cost_per_token": 0.0, + "input_cost_per_token_above_200k_tokens": 0.0, + "litellm_provider": "gemini", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 7.5e-08, - "input_cost_per_token_above_128k_tokens": 1.5e-07, - "output_cost_per_token": 3e-07, - "output_cost_per_token_above_128k_tokens": 6e-07, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 2000, - "source": "https://ai.google.dev/pricing", - "supports_tool_choice": true - }, - "gemini/gemini-1.5-flash-latest": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, "max_pdf_size_mb": 30, - "input_cost_per_token": 7.5e-08, - "input_cost_per_token_above_128k_tokens": 1.5e-07, - "output_cost_per_token": 3e-07, - "output_cost_per_token_above_128k_tokens": 6e-07, - "litellm_provider": "gemini", + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_system_messages": true, + "output_cost_per_token": 0.0, + "output_cost_per_token_above_200k_tokens": 0.0, + "rpm": 5, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/completions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_input": true, "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, + "supports_pdf_input": true, "supports_prompt_caching": true, - "tpm": 4000000, - "rpm": 2000, - "source": "https://ai.google.dev/pricing", - "supports_tool_choice": true + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 250000 }, - "gemini/gemini-1.5-flash-8b": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, + "gemini/gemini-2.5-pro-preview-03-25": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "gemini", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 0, - "input_cost_per_token_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_token_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_prompt_caching": true, - "tpm": 4000000, - "rpm": 4000, - "source": "https://ai.google.dev/pricing", - "supports_tool_choice": true - }, - "gemini/gemini-1.5-flash-8b-exp-0924": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "rpm": 10000, + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.5-pro-preview-05-06": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "gemini", "max_audio_length_hours": 8.4, "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, "max_pdf_size_mb": 30, - "input_cost_per_token": 0, - "input_cost_per_token_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_token_above_128k_tokens": 0, - "litellm_provider": "gemini", + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, "mode": "chat", - "supports_system_messages": true, + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "rpm": 10000, + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, + "supports_pdf_input": true, "supports_prompt_caching": true, - "tpm": 4000000, - "rpm": 4000, - "source": "https://ai.google.dev/pricing", - "supports_tool_choice": true + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.5-pro-preview-06-05": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "rpm": 10000, + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 + }, + "gemini/gemini-2.5-pro-preview-tts": { + "cache_read_input_token_cost": 3.125e-07, + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1.25e-06, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_pdf_size_mb": 30, + "max_tokens": 65535, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "rpm": 10000, + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "audio" + ], + "supports_audio_output": false, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "tpm": 10000000 }, "gemini/gemini-exp-1114": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, "input_cost_per_token": 0, "input_cost_per_token_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_token_above_128k_tokens": 0, "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 1000, - "source": "https://ai.google.dev/pricing", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, "metadata": { "notes": "Rate limits not documented for gemini-exp-1114. Assuming same as gemini-1.5-pro.", "supports_tool_choice": true - } - }, - "gemini/gemini-exp-1206": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 0, - "input_cost_per_token_above_128k_tokens": 0, + }, + "mode": "chat", "output_cost_per_token": 0, "output_cost_per_token_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "supports_response_schema": true, - "tpm": 4000000, "rpm": 1000, "source": "https://ai.google.dev/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 4000000 + }, + "gemini/gemini-exp-1206": { + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 2097152, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, "metadata": { "notes": "Rate limits not documented for gemini-exp-1206. Assuming same as gemini-1.5-pro.", "supports_tool_choice": true - } - }, - "gemini/gemini-1.5-flash-exp-0827": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 0, - "input_cost_per_token_above_128k_tokens": 0, + }, + "mode": "chat", "output_cost_per_token": 0, "output_cost_per_token_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 2000, - "source": "https://ai.google.dev/pricing", - "supports_tool_choice": true - }, - "gemini/gemini-1.5-flash-8b-exp-0827": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_token": 0, - "input_cost_per_token_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_token_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 4000, - "source": "https://ai.google.dev/pricing", - "supports_tool_choice": true - }, - "gemini/gemini-pro": { - "max_tokens": 8192, - "max_input_tokens": 32760, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-07, - "input_cost_per_token_above_128k_tokens": 7e-07, - "output_cost_per_token": 1.05e-06, - "output_cost_per_token_above_128k_tokens": 2.1e-06, - "litellm_provider": "gemini", - "mode": "chat", - "supports_function_calling": true, - "rpd": 30000, - "tpm": 120000, - "rpm": 360, - "source": "https://ai.google.dev/gemini-api/docs/models/gemini", - "supports_tool_choice": true - }, - "gemini/gemini-1.5-pro": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-06, - "input_cost_per_token_above_128k_tokens": 7e-06, - "output_cost_per_token": 1.05e-05, - "output_cost_per_token_above_128k_tokens": 2.1e-05, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 1000, - "source": "https://ai.google.dev/pricing" - }, - "gemini/gemini-1.5-pro-002": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-06, - "input_cost_per_token_above_128k_tokens": 7e-06, - "output_cost_per_token": 1.05e-05, - "output_cost_per_token_above_128k_tokens": 2.1e-05, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "supports_prompt_caching": true, - "tpm": 4000000, "rpm": 1000, "source": "https://ai.google.dev/pricing", - "deprecation_date": "2025-09-24" - }, - "gemini/gemini-1.5-pro-001": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-06, - "input_cost_per_token_above_128k_tokens": 7e-06, - "output_cost_per_token": 1.05e-05, - "output_cost_per_token_above_128k_tokens": 2.1e-05, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, "supports_response_schema": true, - "supports_prompt_caching": true, - "tpm": 4000000, - "rpm": 1000, - "source": "https://ai.google.dev/pricing", - "deprecation_date": "2025-05-24" - }, - "gemini/gemini-1.5-pro-exp-0801": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-06, - "input_cost_per_token_above_128k_tokens": 7e-06, - "output_cost_per_token": 1.05e-05, - "output_cost_per_token_above_128k_tokens": 2.1e-05, - "litellm_provider": "gemini", - "mode": "chat", "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, "supports_tool_choice": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 1000, - "source": "https://ai.google.dev/pricing" - }, - "gemini/gemini-1.5-pro-exp-0827": { - "max_tokens": 8192, - "max_input_tokens": 2097152, - "max_output_tokens": 8192, - "input_cost_per_token": 0, - "input_cost_per_token_above_128k_tokens": 0, - "output_cost_per_token": 0, - "output_cost_per_token_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 1000, - "source": "https://ai.google.dev/pricing" - }, - "gemini/gemini-1.5-pro-latest": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-06, - "input_cost_per_token_above_128k_tokens": 7e-06, - "output_cost_per_token": 1.05e-06, - "output_cost_per_token_above_128k_tokens": 2.1e-05, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "tpm": 4000000, - "rpm": 1000, - "source": "https://ai.google.dev/pricing" - }, - "gemini/gemini-pro-vision": { - "max_tokens": 2048, - "max_input_tokens": 30720, - "max_output_tokens": 2048, - "input_cost_per_token": 3.5e-07, - "input_cost_per_token_above_128k_tokens": 7e-07, - "output_cost_per_token": 1.05e-06, - "output_cost_per_token_above_128k_tokens": 2.1e-06, - "litellm_provider": "gemini", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "rpd": 30000, - "tpm": 120000, - "rpm": 360, - "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true + "tpm": 4000000 }, "gemini/gemini-gemma-2-27b-it": { - "max_tokens": 8192, - "max_output_tokens": 8192, "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 1.05e-06, "litellm_provider": "gemini", + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, + "output_cost_per_token": 1.05e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true }, "gemini/gemini-gemma-2-9b-it": { - "max_tokens": 8192, - "max_output_tokens": 8192, "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 1.05e-06, "litellm_provider": "gemini", + "max_output_tokens": 8192, + "max_tokens": 8192, "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, + "output_cost_per_token": 1.05e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", - "supports_tool_choice": true + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true }, - "gemini/imagen-4.0-generate-001": { - "output_cost_per_image": 0.04, + "gemini/gemini-pro": { + "input_cost_per_token": 3.5e-07, + "input_cost_per_token_above_128k_tokens": 7e-07, + "litellm_provider": "gemini", + "max_input_tokens": 32760, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.05e-06, + "output_cost_per_token_above_128k_tokens": 2.1e-06, + "rpd": 30000, + "rpm": 360, + "source": "https://ai.google.dev/gemini-api/docs/models/gemini", + "supports_function_calling": true, + "supports_tool_choice": true, + "tpm": 120000 + }, + "gemini/gemini-pro-vision": { + "input_cost_per_token": 3.5e-07, + "input_cost_per_token_above_128k_tokens": 7e-07, + "litellm_provider": "gemini", + "max_input_tokens": 30720, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 1.05e-06, + "output_cost_per_token_above_128k_tokens": 2.1e-06, + "rpd": 30000, + "rpm": 360, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "tpm": 120000 + }, + "gemini/gemma-3-27b-it": { + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_input_tokens": 131072, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_token_above_128k_tokens": 0, + "source": "https://aistudio.google.com", + "supports_audio_output": false, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gemini/imagen-3.0-fast-generate-001": { "litellm_provider": "gemini", "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "gemini/imagen-4.0-ultra-generate-001": { - "output_cost_per_image": 0.06, - "litellm_provider": "gemini", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "gemini/imagen-4.0-fast-generate-001": { "output_cost_per_image": 0.02, - "litellm_provider": "gemini", - "mode": "image_generation", - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, - "gemini/imagen-3.0-generate-002": { - "output_cost_per_image": 0.04, - "litellm_provider": "gemini", - "mode": "image_generation", "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, "gemini/imagen-3.0-generate-001": { - "output_cost_per_image": 0.04, "litellm_provider": "gemini", "mode": "image_generation", + "output_cost_per_image": 0.04, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, - "gemini/imagen-3.0-fast-generate-001": { + "gemini/imagen-3.0-generate-002": { + "litellm_provider": "gemini", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "gemini/imagen-4.0-fast-generate-001": { + "litellm_provider": "gemini", + "mode": "image_generation", "output_cost_per_image": 0.02, - "litellm_provider": "gemini", - "mode": "image_generation", "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, - "command-a-03-2025": { - "max_tokens": 8000, - "max_input_tokens": 256000, - "max_output_tokens": 8000, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "command-r": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "command-r-08-2024": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "command-r7b-12-2024": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 3.75e-08, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_function_calling": true, - "source": "https://docs.cohere.com/v2/docs/command-r7b", - "supports_tool_choice": true - }, - "command-light": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_tool_choice": true - }, - "command-r-plus": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "command-r-plus-08-2024": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "cohere_chat", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "command-nightly": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "cohere", - "mode": "completion" - }, - "command": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "cohere", - "mode": "completion" - }, - "rerank-v3.5": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "rerank" - }, - "rerank-english-v3.0": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "rerank" - }, - "rerank-multilingual-v3.0": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "rerank" - }, - "rerank-english-v2.0": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "rerank" - }, - "rerank-multilingual-v2.0": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "max_query_tokens": 2048, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "rerank" - }, - "embed-english-light-v3.0": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "embedding" - }, - "embed-multilingual-v3.0": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "supports_embedding_image_input": true, - "mode": "embedding" - }, - "embed-english-v2.0": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "embedding" - }, - "embed-english-light-v2.0": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "embedding" - }, - "embed-multilingual-v2.0": { - "max_tokens": 768, - "max_input_tokens": 768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "embedding" - }, - "embed-english-v3.0": { - "max_tokens": 1024, - "max_input_tokens": 1024, - "input_cost_per_token": 1e-07, - "input_cost_per_image": 0.0001, - "output_cost_per_token": 0.0, - "litellm_provider": "cohere", - "mode": "embedding", - "supports_image_input": true, - "supports_embedding_image_input": true, - "metadata": { - "notes": "'supports_image_input' is a deprecated field. Use 'supports_embedding_image_input' instead." - } - }, - "replicate/meta/llama-2-13b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-2-13b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-2-70b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 2.75e-06, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-2-70b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 2.75e-06, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-2-7b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-2-7b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-3-70b": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 2.75e-06, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-3-70b-instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 2.75e-06, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-3-8b": { - "max_tokens": 8086, - "max_input_tokens": 8086, - "max_output_tokens": 8086, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/meta/llama-3-8b-instruct": { - "max_tokens": 8086, - "max_input_tokens": 8086, - "max_output_tokens": 8086, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/mistralai/mistral-7b-v0.1": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/mistralai/mistral-7b-instruct-v0.2": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "replicate/mistralai/mixtral-8x7b-instruct-v0.1": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1e-06, - "litellm_provider": "replicate", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/deepseek/deepseek-r1-0528": { - "max_tokens": 8192, - "max_input_tokens": 65336, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-07, - "input_cost_per_token_cache_hit": 1.4e-07, - "output_cost_per_token": 2.15e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "openrouter/deepseek/deepseek-chat-v3.1": { - "max_tokens": 8192, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 2e-07, - "input_cost_per_token_cache_hit": 2e-08, - "output_cost_per_token": 8e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "openrouter/x-ai/grok-4": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://openrouter.ai/x-ai/grok-4", - "supports_web_search": true - }, - "openrouter/bytedance/ui-tars-1.5-7b": { - "max_tokens": 2048, - "max_input_tokens": 131072, - "max_output_tokens": 2048, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "source": "https://openrouter.ai/api/v1/models/bytedance/ui-tars-1.5-7b", - "supports_tool_choice": true - }, - "openrouter/deepseek/deepseek-r1": { - "max_tokens": 8192, - "max_input_tokens": 65336, - "max_output_tokens": 8192, - "input_cost_per_token": 5.5e-07, - "input_cost_per_token_cache_hit": 1.4e-07, - "output_cost_per_token": 2.19e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "supports_prompt_caching": true - }, - "openrouter/deepseek/deepseek-chat": { - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 1.4e-07, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "openrouter", - "supports_prompt_caching": true, - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/deepseek/deepseek-chat-v3-0324": { - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 1.4e-07, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "openrouter", - "supports_prompt_caching": true, - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/deepseek/deepseek-coder": { - "max_tokens": 8192, - "max_input_tokens": 66000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.4e-07, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "openrouter", - "supports_prompt_caching": true, - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/microsoft/wizardlm-2-8x22b:nitro": { - "max_tokens": 65536, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/google/gemini-2.5-pro": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_tool_choice": true - }, - "openrouter/google/gemini-pro-1.5": { - "max_tokens": 8192, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 7.5e-06, - "input_cost_per_image": 0.00265, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/google/gemini-2.0-flash-001": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_tool_choice": true - }, - "openrouter/google/gemini-2.5-flash": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 8192, - "max_images_per_prompt": 3000, - "max_videos_per_prompt": 10, - "max_video_length": 1, - "max_audio_length_hours": 8.4, - "max_audio_per_prompt": 1, - "max_pdf_size_mb": 30, - "input_cost_per_audio_token": 7e-07, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.5e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_response_schema": true, - "supports_audio_output": true, - "supports_tool_choice": true - }, - "openrouter/mistralai/mixtral-8x22b-instruct": { - "max_tokens": 65536, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 6.5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/cohere/command-r-plus": { - "max_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/databricks/dbrx-instruct": { - "max_tokens": 32768, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3-haiku": { - "max_tokens": 200000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "input_cost_per_image": 0.0004, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3-5-haiku": { - "max_tokens": 200000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3-haiku-20240307": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 264, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3-5-haiku-20241022": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "tool_use_system_prompt_tokens": 264, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3.5-sonnet": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3.5-sonnet:beta": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3.7-sonnet": { - "supports_computer_use": true, - "max_tokens": 128000, - "max_input_tokens": 200000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_image": 0.0048, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3.7-sonnet:beta": { - "supports_computer_use": true, - "max_tokens": 128000, - "max_input_tokens": 200000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_image": 0.0048, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "tool_use_system_prompt_tokens": 159, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3-sonnet": { - "max_tokens": 200000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_image": 0.0048, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-sonnet-4": { - "supports_computer_use": true, - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "input_cost_per_image": 0.0048, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_reasoning": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-opus-4": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "input_cost_per_image": 0.0048, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "openrouter/anthropic/claude-opus-4.1": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "input_cost_per_image": 0.0048, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "openrouter/mistralai/mistral-large": { - "max_tokens": 32000, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/mistralai/mistral-small-3.1-24b-instruct": { - "max_tokens": 32000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/mistralai/mistral-small-3.2-24b-instruct": { - "max_tokens": 32000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/cognitivecomputations/dolphin-mixtral-8x7b": { - "max_tokens": 32769, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/google/gemini-pro-vision": { - "max_tokens": 45875, - "input_cost_per_token": 1.25e-07, - "output_cost_per_token": 3.75e-07, - "input_cost_per_image": 0.0025, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/fireworks/firellava-13b": { - "max_tokens": 4096, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/llama-3-8b-instruct:free": { - "max_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/llama-3-8b-instruct:extended": { - "max_tokens": 16384, - "input_cost_per_token": 2.25e-07, - "output_cost_per_token": 2.25e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/llama-3-70b-instruct:nitro": { - "max_tokens": 8192, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/llama-3-70b-instruct": { - "max_tokens": 8192, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 7.9e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/openai/o1": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "cache_read_input_token_cost": 7.5e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "openrouter/openai/o1-mini": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.2e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_tool_choice": true - }, - "openrouter/openai/o1-mini-2024-09-12": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.2e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_tool_choice": true - }, - "openrouter/openai/o1-preview": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_tool_choice": true - }, - "openrouter/openai/o1-preview-2024-09-12": { - "max_tokens": 32768, - "max_input_tokens": 128000, - "max_output_tokens": 32768, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_tool_choice": true - }, - "openrouter/openai/o3-mini": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_reasoning": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_tool_choice": true - }, - "openrouter/openai/o3-mini-high": { - "max_tokens": 65536, - "max_input_tokens": 128000, - "max_output_tokens": 65536, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_reasoning": true, - "supports_parallel_function_calling": true, - "supports_vision": false, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4o": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4o-2024-05-13": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4-vision-preview": { - "max_tokens": 130000, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "input_cost_per_image": 0.01445, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-3.5-turbo": { - "max_tokens": 4095, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/openai/gpt-3.5-turbo-16k": { - "max_tokens": 16383, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 4e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4": { - "max_tokens": 8192, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 6e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4.1": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4.1-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "cache_read_input_token_cost": 5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4.1-mini": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "cache_read_input_token_cost": 1e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4.1-mini-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "cache_read_input_token_cost": 1e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4.1-nano": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-4.1-nano-2025-04-14": { - "max_tokens": 32768, - "max_input_tokens": 1047576, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "openrouter/openai/gpt-5-mini": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2e-06, - "cache_read_input_token_cost": 2.5e-08, - "litellm_provider": "openrouter", - "mode": "chat", - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_tool_choice": true, - "supports_reasoning": true - }, - "openrouter/openai/gpt-5-nano": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 4e-07, - "cache_read_input_token_cost": 5e-09, - "litellm_provider": "openrouter", - "mode": "chat", - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_tool_choice": true, - "supports_reasoning": true - }, - "openrouter/openai/gpt-5-chat": { - "max_tokens": 128000, - "max_input_tokens": 400000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1e-05, - "cache_read_input_token_cost": 1.25e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text" - ], - "supports_tool_choice": true, - "supports_reasoning": true - }, - "openrouter/openai/gpt-oss-20b": { - "max_tokens": 32768, - "max_input_tokens": 131072, - "max_output_tokens": 32768, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "source": "https://openrouter.ai/openai/gpt-oss-20b" - }, - "openrouter/openai/gpt-oss-120b": { - "max_tokens": 32768, - "max_input_tokens": 131072, - "max_output_tokens": 32768, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_reasoning": true, - "supports_tool_choice": true, - "source": "https://openrouter.ai/openai/gpt-oss-120b" - }, - "openrouter/anthropic/claude-instant-v1": { - "max_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 1.63e-06, - "output_cost_per_token": 5.51e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-2": { - "max_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 1.102e-05, - "output_cost_per_token": 3.268e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/anthropic/claude-3-opus": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 395, - "supports_tool_choice": true - }, - "openrouter/google/palm-2-chat-bison": { - "max_tokens": 25804, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/google/palm-2-codechat-bison": { - "max_tokens": 20070, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/llama-2-13b-chat": { - "max_tokens": 4096, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/llama-2-70b-chat": { - "max_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/meta-llama/codellama-34b-instruct": { - "max_tokens": 8192, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/nousresearch/nous-hermes-llama2-13b": { - "max_tokens": 4096, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/mancer/weaver": { - "max_tokens": 8000, - "input_cost_per_token": 5.625e-06, - "output_cost_per_token": 5.625e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/gryphe/mythomax-l2-13b": { - "max_tokens": 8192, - "input_cost_per_token": 1.875e-06, - "output_cost_per_token": 1.875e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/jondurbin/airoboros-l2-70b-2.1": { - "max_tokens": 4096, - "input_cost_per_token": 1.3875e-05, - "output_cost_per_token": 1.3875e-05, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/undi95/remm-slerp-l2-13b": { - "max_tokens": 6144, - "input_cost_per_token": 1.875e-06, - "output_cost_per_token": 1.875e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/pygmalionai/mythalion-13b": { - "max_tokens": 4096, - "input_cost_per_token": 1.875e-06, - "output_cost_per_token": 1.875e-06, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/mistralai/mistral-7b-instruct": { - "max_tokens": 8192, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 1.3e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/mistralai/mistral-7b-instruct:free": { - "max_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/qwen/qwen-2.5-coder-32b-instruct": { - "max_tokens": 33792, - "max_input_tokens": 33792, - "max_output_tokens": 33792, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 1.8e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/qwen/qwen-vl-plus": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 2048, - "input_cost_per_token": 2.1e-07, - "output_cost_per_token": 6.3e-07, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/qwen/qwen3-coder": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "openrouter", - "source": "https://openrouter.ai/qwen/qwen3-coder", - "mode": "chat", - "supports_tool_choice": true - }, - "openrouter/switchpoint/router": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 8.5e-07, - "output_cost_per_token": 3.4e-06, - "litellm_provider": "openrouter", - "source": "https://openrouter.ai/switchpoint/router", - "mode": "chat", - "supports_tool_choice": true - }, - "j2-ultra": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "ai21", - "mode": "completion" - }, - "jamba-1.5-mini@001": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-1.5-large@001": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-1.5": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-1.5-mini": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-1.5-large": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-large-1.6": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-large-1.7": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-mini-1.6": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "jamba-mini-1.7": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "ai21", - "mode": "chat", - "supports_tool_choice": true - }, - "j2-mid": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 1e-05, - "litellm_provider": "ai21", - "mode": "completion" - }, - "j2-light": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "ai21", - "mode": "completion" - }, - "dolphin": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "nlp_cloud", - "mode": "completion" - }, - "chatdolphin": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "nlp_cloud", - "mode": "chat" - }, - "luminous-base": { - "max_tokens": 2048, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 3.3e-05, - "litellm_provider": "aleph_alpha", - "mode": "completion" - }, - "luminous-base-control": { - "max_tokens": 2048, - "input_cost_per_token": 3.75e-05, - "output_cost_per_token": 4.125e-05, - "litellm_provider": "aleph_alpha", - "mode": "chat" - }, - "luminous-extended": { - "max_tokens": 2048, - "input_cost_per_token": 4.5e-05, - "output_cost_per_token": 4.95e-05, - "litellm_provider": "aleph_alpha", - "mode": "completion" - }, - "luminous-extended-control": { - "max_tokens": 2048, - "input_cost_per_token": 5.625e-05, - "output_cost_per_token": 6.1875e-05, - "litellm_provider": "aleph_alpha", - "mode": "chat" - }, - "luminous-supreme": { - "max_tokens": 2048, - "input_cost_per_token": 0.000175, - "output_cost_per_token": 0.0001925, - "litellm_provider": "aleph_alpha", - "mode": "completion" - }, - "luminous-supreme-control": { - "max_tokens": 2048, - "input_cost_per_token": 0.00021875, - "output_cost_per_token": 0.000240625, - "litellm_provider": "aleph_alpha", - "mode": "chat" - }, - "ai21.j2-mid-v1": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "max_output_tokens": 8191, - "input_cost_per_token": 1.25e-05, - "output_cost_per_token": 1.25e-05, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "ai21.j2-ultra-v1": { - "max_tokens": 8191, - "max_input_tokens": 8191, - "max_output_tokens": 8191, - "input_cost_per_token": 1.88e-05, - "output_cost_per_token": 1.88e-05, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "ai21.jamba-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 70000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_system_messages": true - }, - "ai21.jamba-1-5-large-v1:0": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "ai21.jamba-1-5-mini-v1:0": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 256000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "amazon.rerank-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "max_query_tokens": 32000, - "max_document_chunks_per_query": 100, - "max_tokens_per_document_chunk": 512, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.001, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "rerank" - }, - "amazon.titan-text-lite-v1": { - "max_tokens": 4000, - "max_input_tokens": 42000, - "max_output_tokens": 4000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "amazon.titan-text-express-v1": { - "max_tokens": 8000, - "max_input_tokens": 42000, - "max_output_tokens": 8000, - "input_cost_per_token": 1.3e-06, - "output_cost_per_token": 1.7e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "amazon.titan-text-premier-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 42000, - "max_output_tokens": 32000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "amazon.titan-embed-text-v1": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1536, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding" - }, - "amazon.titan-embed-text-v2:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1024, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding" - }, - "amazon.titan-embed-image-v1": { - "max_tokens": 128, - "max_input_tokens": 128, - "output_vector_size": 1024, - "input_cost_per_token": 8e-07, - "input_cost_per_image": 6e-05, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "supports_image_input": true, - "supports_embedding_image_input": true, - "mode": "embedding", - "source": "https://us-east-1.console.aws.amazon.com/bedrock/home?region=us-east-1#/providers?model=amazon.titan-image-generator-v1", - "metadata": { - "notes": "'supports_image_input' is a deprecated field. Use 'supports_embedding_image_input' instead." - } - }, - "mistral.mistral-7b-instruct-v0:2": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "mistral.mixtral-8x7b-instruct-v0:1": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 4.5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "mistral.mistral-large-2402-v1:0": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true - }, - "mistral.mistral-large-2407-v1:0": { - "max_tokens": 8191, - "max_input_tokens": 128000, - "max_output_tokens": 8191, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 9e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true - }, - "mistral.mistral-small-2402-v1:0": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true - }, - "eu.mistral.pixtral-large-2502-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "us.mistral.pixtral-large-2502-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "bedrock/us-west-2/mistral.mixtral-8x7b-instruct-v0:1": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 4.5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/mistral.mixtral-8x7b-instruct-v0:1": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 4.5e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-west-3/mistral.mixtral-8x7b-instruct-v0:1": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 9.1e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/mistral.mistral-7b-instruct-v0:2": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/mistral.mistral-7b-instruct-v0:2": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-west-3/mistral.mistral-7b-instruct-v0:2": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2.6e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/mistral.mistral-large-2402-v1:0": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true - }, - "bedrock/us-west-2/mistral.mistral-large-2402-v1:0": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true - }, - "bedrock/eu-west-3/mistral.mistral-large-2402-v1:0": { - "max_tokens": 8191, - "max_input_tokens": 32000, - "max_output_tokens": 8191, - "input_cost_per_token": 1.04e-05, - "output_cost_per_token": 3.12e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true - }, - "amazon.nova-micro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 128000, - "max_output_tokens": 10000, - "input_cost_per_token": 3.5e-08, - "output_cost_per_token": 1.4e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "us.amazon.nova-micro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 128000, - "max_output_tokens": 10000, - "input_cost_per_token": 3.5e-08, - "output_cost_per_token": 1.4e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "eu.amazon.nova-micro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 128000, - "max_output_tokens": 10000, - "input_cost_per_token": 4.6e-08, - "output_cost_per_token": 1.84e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "amazon.nova-lite-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 6e-08, - "output_cost_per_token": 2.4e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "us.amazon.nova-lite-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 6e-08, - "output_cost_per_token": 2.4e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "eu.amazon.nova-lite-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 7.8e-08, - "output_cost_per_token": 3.12e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "amazon.nova-pro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 3.2e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "us.amazon.nova-pro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 3.2e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "1024-x-1024/50-steps/bedrock/amazon.nova-canvas-v1:0": { - "max_input_tokens": 2600, + "gemini/imagen-4.0-generate-001": { + "litellm_provider": "gemini", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "gemini/imagen-4.0-ultra-generate-001": { + "litellm_provider": "gemini", + "mode": "image_generation", "output_cost_per_image": 0.06, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "eu.amazon.nova-pro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 1.05e-06, - "output_cost_per_token": 4.2e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "source": "https://aws.amazon.com/bedrock/pricing/" - }, - "apac.amazon.nova-micro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 128000, - "max_output_tokens": 10000, - "input_cost_per_token": 3.7e-08, - "output_cost_per_token": 1.48e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "apac.amazon.nova-lite-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 6.3e-08, - "output_cost_per_token": 2.52e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "apac.amazon.nova-pro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 8.4e-07, - "output_cost_per_token": 3.36e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "us.amazon.nova-premier-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 1000000, - "max_output_tokens": 10000, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1.25e-05, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": false, - "supports_response_schema": true - }, - "anthropic.claude-3-sonnet-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "bedrock/invoke/anthropic.claude-3-5-sonnet-20240620-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true, - "metadata": { - "notes": "Anthropic via Invoke route does not currently support pdf input." - } - }, - "anthropic.claude-3-5-sonnet-20240620-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "openai.gpt-oss-20b-1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_function_calling": true, - "supports_reasoning": true - }, - "openai.gpt-oss-120b-1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_function_calling": true, - "supports_reasoning": true - }, - "anthropic.claude-opus-4-1-20250805-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "anthropic.claude-opus-4-20250514-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "anthropic.claude-sonnet-4-20250514-v1:0": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "anthropic.claude-3-7-sonnet-20250219-v1:0": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_pdf_input": true, - "supports_reasoning": true, - "supports_tool_choice": true - }, - "anthropic.claude-3-5-sonnet-20241022-v2:0": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "anthropic.claude-3-haiku-20240307-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "anthropic.claude-3-5-haiku-20241022-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 4e-06, - "cache_creation_input_token_cost": 1e-06, - "cache_read_input_token_cost": 8e-08, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_response_schema": true, - "supports_prompt_caching": true, - "supports_tool_choice": true - }, - "anthropic.claude-3-opus-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "us.anthropic.claude-3-sonnet-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "us.anthropic.claude-3-5-sonnet-20240620-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "us.anthropic.claude-3-5-sonnet-20241022-v2:0": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "us.anthropic.claude-3-7-sonnet-20250219-v1:0": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_pdf_input": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "us.anthropic.claude-opus-4-1-20250805-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "us.anthropic.claude-opus-4-20250514-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "us.anthropic.claude-sonnet-4-20250514-v1:0": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "us.anthropic.claude-3-haiku-20240307-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "us.anthropic.claude-3-5-haiku-20241022-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 4e-06, - "cache_creation_input_token_cost": 1e-06, - "cache_read_input_token_cost": 8e-08, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 4e-06, - "cache_creation_input_token_cost": 1e-06, - "cache_read_input_token_cost": 8e-08, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_function_calling": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "us.anthropic.claude-3-opus-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "eu.anthropic.claude-3-sonnet-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "eu.anthropic.claude-3-5-sonnet-20240620-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "eu.anthropic.claude-3-5-sonnet-20241022-v2:0": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "eu.anthropic.claude-3-7-sonnet-20250219-v1:0": { - "supports_computer_use": true, - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_pdf_input": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "eu.anthropic.claude-3-haiku-20240307-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "eu.anthropic.claude-opus-4-1-20250805-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "eu.anthropic.claude-opus-4-20250514-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 200000, - "max_output_tokens": 32000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 1.875e-05, - "cache_read_input_token_cost": 1.5e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "eu.anthropic.claude-sonnet-4-20250514-v1:0": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "apac.anthropic.claude-3-haiku-20240307-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "apac.anthropic.claude-3-sonnet-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "apac.anthropic.claude-3-5-sonnet-20240620-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "apac.anthropic.claude-3-5-sonnet-20241022-v2:0": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_assistant_prefill": true, - "supports_computer_use": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "apac.anthropic.claude-sonnet-4-20250514-v1:0": { - "max_tokens": 64000, - "max_input_tokens": 200000, - "max_output_tokens": 64000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "search_context_cost_per_query": { - "search_context_size_low": 0.01, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.01 - }, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "supports_computer_use": true - }, - "eu.anthropic.claude-3-5-haiku-20241022-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "supports_tool_choice": true - }, - "eu.anthropic.claude-3-opus-20240229-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_tool_choice": true - }, - "anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-east-1/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/1-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0455, - "output_cost_per_second": 0.0455, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/ap-northeast-1/6-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.02527, - "output_cost_per_second": 0.02527, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-central-1/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-central-1/1-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0415, - "output_cost_per_second": 0.0415, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-central-1/6-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.02305, - "output_cost_per_second": 0.02305, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-east-1/1-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0175, - "output_cost_per_second": 0.0175, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-east-1/6-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.00972, - "output_cost_per_second": 0.00972, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-west-2/1-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0175, - "output_cost_per_second": 0.0175, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-west-2/6-month-commitment/anthropic.claude-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.00972, - "output_cost_per_second": 0.00972, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/1-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0455, - "output_cost_per_second": 0.0455, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/6-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.02527, - "output_cost_per_second": 0.02527, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-central-1/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-06, - "output_cost_per_token": 2.4e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-central-1/1-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0415, - "output_cost_per_second": 0.0415, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-central-1/6-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.02305, - "output_cost_per_second": 0.02305, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/1-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0175, - "output_cost_per_second": 0.0175, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/6-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.00972, - "output_cost_per_second": 0.00972, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/1-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.0175, - "output_cost_per_second": 0.0175, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/6-month-commitment/anthropic.claude-v2:1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.00972, - "output_cost_per_second": 0.00972, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 2.4e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 2.4e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/1-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.011, - "output_cost_per_second": 0.011, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-east-1/6-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.00611, - "output_cost_per_second": 0.00611, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/1-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.011, - "output_cost_per_second": 0.011, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/6-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.00611, - "output_cost_per_second": 0.00611, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/us-west-2/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 2.4e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 2.23e-06, - "output_cost_per_token": 7.55e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/1-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.01475, - "output_cost_per_second": 0.01475, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/ap-northeast-1/6-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.008194, - "output_cost_per_second": 0.008194, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-central-1/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_token": 2.48e-06, - "output_cost_per_token": 8.38e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-central-1/1-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.01635, - "output_cost_per_second": 0.01635, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/eu-central-1/6-month-commitment/anthropic.claude-instant-v1": { - "max_tokens": 8191, - "max_input_tokens": 100000, - "max_output_tokens": 8191, - "input_cost_per_second": 0.009083, - "output_cost_per_second": 0.009083, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "cohere.rerank-v3-5:0": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "max_query_tokens": 32000, - "max_document_chunks_per_query": 100, - "max_tokens_per_document_chunk": 512, - "input_cost_per_token": 0.0, - "input_cost_per_query": 0.002, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "rerank" - }, - "cohere.command-text-v14": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/*/1-month-commitment/cohere.command-text-v14": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_second": 0.011, - "output_cost_per_second": 0.011, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/*/6-month-commitment/cohere.command-text-v14": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_second": 0.0066027, - "output_cost_per_second": 0.0066027, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "cohere.command-light-text-v14": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/*/1-month-commitment/cohere.command-light-text-v14": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_second": 0.001902, - "output_cost_per_second": 0.001902, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "bedrock/*/6-month-commitment/cohere.command-light-text-v14": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_second": 0.0011416, - "output_cost_per_second": 0.0011416, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "cohere.command-r-plus-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "cohere.command-r-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_tool_choice": true - }, - "cohere.embed-english-v3": { - "max_tokens": 512, - "max_input_tokens": 512, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding", - "supports_embedding_image_input": true - }, - "cohere.embed-multilingual-v3": { - "max_tokens": 512, - "max_input_tokens": 512, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding", - "supports_embedding_image_input": true - }, - "us.deepseek.r1-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.35e-06, - "output_cost_per_token": 5.4e-06, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_reasoning": true, - "supports_function_calling": false, - "supports_tool_choice": false - }, - "meta.llama3-3-70b-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama2-13b-chat-v1": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 7.5e-07, - "output_cost_per_token": 1e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "meta.llama2-70b-chat-v1": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1.95e-06, - "output_cost_per_token": 2.56e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-east-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-west-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/ap-south-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.6e-07, - "output_cost_per_token": 7.2e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/ca-central-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 6.9e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-west-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.2e-07, - "output_cost_per_token": 6.5e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-west-2/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.9e-07, - "output_cost_per_token": 7.8e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/sa-east-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.01e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2.65e-06, - "output_cost_per_token": 3.5e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-east-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2.65e-06, - "output_cost_per_token": 3.5e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-west-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2.65e-06, - "output_cost_per_token": 3.5e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/ap-south-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.18e-06, - "output_cost_per_token": 4.2e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/ca-central-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.05e-06, - "output_cost_per_token": 4.03e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-west-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2.86e-06, - "output_cost_per_token": 3.78e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/eu-west-2/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3.45e-06, - "output_cost_per_token": 4.55e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/sa-east-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 4.45e-06, - "output_cost_per_token": 5.88e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "meta.llama3-1-8b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 2.2e-07, - "output_cost_per_token": 2.2e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "us.meta.llama3-1-8b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 2.2e-07, - "output_cost_per_token": 2.2e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama3-1-70b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 9.9e-07, - "output_cost_per_token": 9.9e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "us.meta.llama3-1-70b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 2048, - "input_cost_per_token": 9.9e-07, - "output_cost_per_token": 9.9e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama3-1-405b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5.32e-06, - "output_cost_per_token": 1.6e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "us.meta.llama3-1-405b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 5.32e-06, - "output_cost_per_token": 1.6e-05, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama3-2-1b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "us.meta.llama3-2-1b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "eu.meta.llama3-2-1b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 1.3e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama3-2-3b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "us.meta.llama3-2-3b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "eu.meta.llama3-2-3b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.9e-07, - "output_cost_per_token": 1.9e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama3-2-11b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 3.5e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supports_vision": true - }, - "us.meta.llama3-2-11b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 3.5e-07, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supports_vision": true - }, - "meta.llama3-2-90b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supports_vision": true - }, - "us.meta.llama3-2-90b-instruct-v1:0": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supports_vision": true - }, - "us.meta.llama3-3-70b-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false - }, - "meta.llama4-maverick-17b-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.4e-07, - "input_cost_per_token_batches": 1.2e-07, - "output_cost_per_token": 9.7e-07, - "output_cost_per_token_batches": 4.85e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "us.meta.llama4-maverick-17b-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 2.4e-07, - "input_cost_per_token_batches": 1.2e-07, - "output_cost_per_token": 9.7e-07, - "output_cost_per_token_batches": 4.85e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "meta.llama4-scout-17b-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.7e-07, - "input_cost_per_token_batches": 8.5e-08, - "output_cost_per_token": 6.6e-07, - "output_cost_per_token_batches": 3.3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "us.meta.llama4-scout-17b-instruct-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 128000, - "max_output_tokens": 4096, - "input_cost_per_token": 1.7e-07, - "input_cost_per_token_batches": 8.5e-08, - "output_cost_per_token": 6.6e-07, - "output_cost_per_token_batches": 3.3e-07, - "litellm_provider": "bedrock_converse", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": false, - "supported_modalities": [ - "text", - "image" - ], - "supported_output_modalities": [ - "text", - "code" - ] - }, - "512-x-512/50-steps/stability.stable-diffusion-xl-v0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.018, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "512-x-512/max-steps/stability.stable-diffusion-xl-v0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.036, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "max-x-max/50-steps/stability.stable-diffusion-xl-v0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.036, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "max-x-max/max-steps/stability.stable-diffusion-xl-v0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.072, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "1024-x-1024/50-steps/stability.stable-diffusion-xl-v1": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.04, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "1024-x-1024/max-steps/stability.stable-diffusion-xl-v1": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.08, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "stability.sd3-large-v1:0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.08, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "stability.sd3-5-large-v1:0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.08, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "stability.stable-image-core-v1:0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.04, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "stability.stable-image-core-v1:1": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.04, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "stability.stable-image-ultra-v1:0": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.14, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "stability.stable-image-ultra-v1:1": { - "max_tokens": 77, - "max_input_tokens": 77, - "output_cost_per_image": 0.14, - "litellm_provider": "bedrock", - "mode": "image_generation" - }, - "sagemaker/meta-textgeneration-llama-2-7b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "sagemaker", - "mode": "completion" - }, - "sagemaker/meta-textgeneration-llama-2-7b-f": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "sagemaker", - "mode": "chat" - }, - "sagemaker/meta-textgeneration-llama-2-13b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "sagemaker", - "mode": "completion" - }, - "sagemaker/meta-textgeneration-llama-2-13b-f": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "sagemaker", - "mode": "chat" - }, - "sagemaker/meta-textgeneration-llama-2-70b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "sagemaker", - "mode": "completion" - }, - "sagemaker/meta-textgeneration-llama-2-70b-b-f": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "sagemaker", - "mode": "chat" - }, - "together-ai-up-to-4b": { - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "together_ai", - "mode": "chat" - }, - "together-ai-4.1b-8b": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "together_ai", - "mode": "chat" - }, - "together-ai-8.1b-21b": { - "max_tokens": 1000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "together_ai", - "mode": "chat" - }, - "together-ai-21.1b-41b": { - "input_cost_per_token": 8e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "together_ai", - "mode": "chat" - }, - "together-ai-41.1b-80b": { - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "together_ai", - "mode": "chat" - }, - "together-ai-81.1b-110b": { - "input_cost_per_token": 1.8e-06, - "output_cost_per_token": 1.8e-06, - "litellm_provider": "together_ai", - "mode": "chat" - }, - "together-ai-embedding-up-to-150m": { - "input_cost_per_token": 8e-09, - "output_cost_per_token": 0.0, - "litellm_provider": "together_ai", - "mode": "embedding" - }, - "together-ai-embedding-151m-to-350m": { - "input_cost_per_token": 1.6e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "together_ai", - "mode": "embedding" - }, - "together_ai/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": { - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 1.8e-07, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": { - "input_cost_per_token": 8.8e-07, - "output_cost_per_token": 8.8e-07, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": { - "input_cost_per_token": 3.5e-06, - "output_cost_per_token": 3.5e-06, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Llama-3.3-70B-Instruct-Turbo": { - "input_cost_per_token": 8.8e-07, - "output_cost_per_token": 8.8e-07, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Llama-3.3-70B-Instruct-Turbo-Free": { + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "gemini/learnlm-1.5-pro-experimental": { + "input_cost_per_audio_per_second": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "input_cost_per_character": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image": 0, + "input_cost_per_image_above_128k_tokens": 0, "input_cost_per_token": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "litellm_provider": "gemini", + "max_input_tokens": 32767, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 0, + "output_cost_per_character_above_128k_tokens": 0, "output_cost_per_token": 0, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/mistralai/Mixtral-8x7B-Instruct-v0.1": { - "input_cost_per_token": 6e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/mistralai/Mistral-7B-Instruct-v0.1": { - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/togethercomputer/CodeLlama-34b-Instruct": { - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "input_cost_per_token": 2.7e-07, - "output_cost_per_token": 8.5e-07, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Llama-4-Scout-17B-16E-Instruct": { - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 5.9e-07, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/meta-llama/Llama-3.2-3B-Instruct-Turbo": { - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/Qwen/Qwen2.5-7B-Instruct-Turbo": { - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/Qwen/Qwen2.5-72B-Instruct-Turbo": { - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/Qwen/Qwen3-235B-A22B-Instruct-2507-tput": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-06, - "max_input_tokens": 262000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true, - "source": "https://www.together.ai/models/qwen3-235b-a22b-instruct-2507-fp8" - }, - "together_ai/Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "max_input_tokens": 256000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true, - "source": "https://www.together.ai/models/qwen3-coder-480b-a35b-instruct" - }, - "together_ai/Qwen/Qwen3-235B-A22B-Thinking-2507": { - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 3e-06, - "max_input_tokens": 256000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true, - "source": "https://www.together.ai/models/qwen3-235b-a22b-thinking-2507" - }, - "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "max_input_tokens": 40000, - "litellm_provider": "together_ai", - "supports_function_calling": false, - "supports_parallel_function_calling": false, - "mode": "chat", - "supports_tool_choice": false, - "source": "https://www.together.ai/models/qwen3-235b-a22b-fp8-tput" - }, - "together_ai/deepseek-ai/DeepSeek-V3": { - "input_cost_per_token": 1.25e-06, - "output_cost_per_token": 1.25e-06, - "max_tokens": 8192, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/deepseek-ai/DeepSeek-R1": { - "input_cost_per_token": 3e-06, - "output_cost_per_token": 7e-06, - "max_tokens": 20480, - "max_input_tokens": 128000, - "max_output_tokens": 20480, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/deepseek-ai/DeepSeek-R1-0528-tput": { - "input_cost_per_token": 5.5e-07, - "output_cost_per_token": 2.19e-06, - "max_input_tokens": 128000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true, - "source": "https://www.together.ai/models/deepseek-r1-0528-throughput" - }, - "together_ai/mistralai/Mistral-Small-24B-Instruct-2501": { - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "supports_tool_choice": true - }, - "together_ai/moonshotai/Kimi-K2-Instruct": { - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "source": "https://www.together.ai/models/kimi-k2-instruct" - }, - "together_ai/openai/gpt-oss-120b": { - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "max_input_tokens": 128000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "source": "https://www.together.ai/models/gpt-oss-120b" - }, - "together_ai/openai/gpt-oss-20b": { - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2e-07, - "max_input_tokens": 128000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "source": "https://www.together.ai/models/gpt-oss-20b" - }, - "together_ai/zai-org/GLM-4.5-Air-FP8": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 1.1e-06, - "max_input_tokens": 128000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_parallel_function_calling": true, - "mode": "chat", - "source": "https://www.together.ai/models/glm-4-5-air" - }, - "together_ai/deepseek-ai/DeepSeek-V3.1": { - "input_cost_per_token": 0.6e-06, - "output_cost_per_token": 1.7e-06, - "max_tokens": 128000, - "litellm_provider": "together_ai", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_reasoning": true, - "mode": "chat", - "supports_tool_choice": true, - "source": "https://www.together.ai/models/deepseek-v3-1" - }, - "ollama/codegemma": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion" - }, - "ollama/codegeex4": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": false - }, - "ollama/deepseek-coder-v2-instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/deepseek-coder-v2-base": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion", - "supports_function_calling": true - }, - "ollama/deepseek-coder-v2-lite-instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/deepseek-coder-v2-lite-base": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion", - "supports_function_calling": true - }, - "ollama/internlm2_5-20b-chat": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/llama2": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama2:7b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama2:13b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama2:70b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama2-uncensored": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion" - }, - "ollama/llama3": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama3:8b": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama3:70b": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat" - }, - "ollama/llama3.1": { - "max_tokens": 32768, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/mistral-large-instruct-2407": { - "max_tokens": 65536, - "max_input_tokens": 65536, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/mistral": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion", - "supports_function_calling": true - }, - "ollama/mistral-7B-Instruct-v0.1": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/mistral-7B-Instruct-v0.2": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/mixtral-8x7B-Instruct-v0.1": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/mixtral-8x22B-Instruct-v0.1": { - "max_tokens": 65536, - "max_input_tokens": 65536, - "max_output_tokens": 65536, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "chat", - "supports_function_calling": true - }, - "ollama/codellama": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion" - }, - "ollama/orca-mini": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion" - }, - "ollama/vicuna": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "max_output_tokens": 2048, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ollama", - "mode": "completion" - }, - "deepinfra/Gryphe/MythoMax-L2-13b": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 7.2e-08, - "output_cost_per_token": 7.2e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/NousResearch/Hermes-3-Llama-3.1-405B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/NousResearch/Hermes-3-Llama-3.1-70B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/Qwen/QwQ-32B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen2.5-72B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3.9e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen2.5-7B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/Qwen/Qwen2.5-VL-32B-Instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-14B": { - "max_tokens": 40960, - "max_input_tokens": 40960, - "max_output_tokens": 40960, - "input_cost_per_token": 6e-08, - "output_cost_per_token": 2.4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-235B-A22B": { - "max_tokens": 40960, - "max_input_tokens": 40960, - "max_output_tokens": 40960, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-235B-A22B-Instruct-2507": { - "max_tokens": 262144, - "max_input_tokens": 262144, - "max_output_tokens": 262144, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-235B-A22B-Thinking-2507": { - "max_tokens": 262144, - "max_input_tokens": 262144, - "max_output_tokens": 262144, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-30B-A3B": { - "max_tokens": 40960, - "max_input_tokens": 40960, - "max_output_tokens": 40960, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 2.9e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-32B": { - "max_tokens": 40960, - "max_input_tokens": 40960, - "max_output_tokens": 40960, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct": { - "max_tokens": 262144, - "max_input_tokens": 262144, - "max_output_tokens": 262144, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": { - "max_tokens": 262144, - "max_input_tokens": 262144, - "max_output_tokens": 262144, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.2e-06, - "cache_read_input_token_cost": 2.4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/Sao10K/L3-8B-Lunaris-v1-Turbo": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 5e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/Sao10K/L3.1-70B-Euryale-v2.2": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 7.5e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/Sao10K/L3.3-70B-Euryale-v2.3": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6.5e-07, - "output_cost_per_token": 7.5e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/allenai/olmOCR-7B-0725-FP8": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 2.7e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/anthropic/claude-3-7-sonnet-latest": { - "max_tokens": 200000, - "max_input_tokens": 200000, - "max_output_tokens": 200000, - "input_cost_per_token": 3.3e-06, - "output_cost_per_token": 1.65e-05, - "cache_read_input_token_cost": 3.3e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/anthropic/claude-4-opus": { - "max_tokens": 200000, - "max_input_tokens": 200000, - "max_output_tokens": 200000, - "input_cost_per_token": 1.65e-05, - "output_cost_per_token": 8.25e-05, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/anthropic/claude-4-sonnet": { - "max_tokens": 200000, - "max_input_tokens": 200000, - "max_output_tokens": 200000, - "input_cost_per_token": 3.3e-06, - "output_cost_per_token": 1.65e-05, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-R1": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 2.4e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-R1-0528": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 2.15e-06, - "cache_read_input_token_cost": 4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-R1-0528-Turbo": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-R1-Turbo": { - "max_tokens": 40960, - "max_input_tokens": 40960, - "max_output_tokens": 40960, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-V3": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 3.8e-07, - "output_cost_per_token": 8.9e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-V3-0324": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 2.8e-07, - "output_cost_per_token": 8.8e-07, - "cache_read_input_token_cost": 2.24e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/deepseek-ai/DeepSeek-V3.1": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 2.7e-07, - "output_cost_per_token": 1e-06, - "cache_read_input_token_cost": 2.16e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true, - "supports_reasoning": true - }, - "deepinfra/google/gemini-2.0-flash-001": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/google/gemini-2.5-flash": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 2.1e-07, - "output_cost_per_token": 1.75e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/google/gemini-2.5-pro": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 1000000, - "input_cost_per_token": 8.75e-07, - "output_cost_per_token": 7e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/google/gemma-3-12b-it": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/google/gemma-3-27b-it": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 9e-08, - "output_cost_per_token": 1.7e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/google/gemma-3-4b-it": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 8e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 4.9e-08, - "output_cost_per_token": 4.9e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/meta-llama/Llama-3.2-3B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-08, - "output_cost_per_token": 2.4e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Llama-3.3-70B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.3e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Llama-3.3-70B-Instruct-Turbo": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3.8e-08, - "output_cost_per_token": 1.2e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - "max_tokens": 1048576, - "max_input_tokens": 1048576, - "max_output_tokens": 1048576, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Llama-4-Scout-17B-16E-Instruct": { - "max_tokens": 327680, - "max_input_tokens": 327680, - "max_output_tokens": 327680, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 3e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Llama-Guard-3-8B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5.5e-08, - "output_cost_per_token": 5.5e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/meta-llama/Llama-Guard-4-12B": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 1.8e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/meta-llama/Meta-Llama-3-8B-Instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 3e-08, - "output_cost_per_token": 6e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.3e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Meta-Llama-3.1-8B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-08, - "output_cost_per_token": 5e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.5e-08, - "output_cost_per_token": 2e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/microsoft/WizardLM-2-8x22B": { - "max_tokens": 65536, - "max_input_tokens": 65536, - "max_output_tokens": 65536, - "input_cost_per_token": 4.8e-07, - "output_cost_per_token": 4.8e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": false - }, - "deepinfra/microsoft/phi-4": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 1.4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/mistralai/Mistral-Nemo-Instruct-2407": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 4e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/mistralai/Mistral-Small-24B-Instruct-2501": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 8e-08, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/mistralai/Mistral-Small-3.2-24B-Instruct-2506": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/mistralai/Mixtral-8x7B-Instruct-v0.1": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 2.4e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/moonshotai/Kimi-K2-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/openai/gpt-oss-120b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 9e-08, - "output_cost_per_token": 4.5e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/openai/gpt-oss-20b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 1.6e-07, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/zai-org/GLM-4.5": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5.5e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "deepinfra/zai-org/GLM-4.5-Air": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 1.1e-06, - "litellm_provider": "deepinfra", - "mode": "chat", - "supports_tool_choice": true - }, - "perplexity/codellama-34b-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 3.5e-07, - "output_cost_per_token": 1.4e-06, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/codellama-70b-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 2.8e-06, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/llama-3.1-70b-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/llama-3.1-8b-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/llama-3.1-sonar-huge-128k-online": { - "max_tokens": 127072, - "max_input_tokens": 127072, - "max_output_tokens": 127072, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "perplexity", - "mode": "chat", - "deprecation_date": "2025-02-22" - }, - "perplexity/llama-3.1-sonar-large-128k-online": { - "max_tokens": 127072, - "max_input_tokens": 127072, - "max_output_tokens": 127072, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "perplexity", - "mode": "chat", - "deprecation_date": "2025-02-22" - }, - "perplexity/llama-3.1-sonar-large-128k-chat": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "perplexity", - "mode": "chat", - "deprecation_date": "2025-02-22" - }, - "perplexity/llama-3.1-sonar-small-128k-chat": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "perplexity", - "mode": "chat", - "deprecation_date": "2025-02-22" - }, - "perplexity/llama-3.1-sonar-small-128k-online": { - "max_tokens": 127072, - "max_input_tokens": 127072, - "max_output_tokens": 127072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "perplexity", - "mode": "chat", - "deprecation_date": "2025-02-22" - }, - "perplexity/pplx-7b-chat": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/pplx-70b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 2.8e-06, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/pplx-7b-online": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 2.8e-07, - "input_cost_per_request": 0.005, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/pplx-70b-online": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 2.8e-06, - "input_cost_per_request": 0.005, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/llama-2-70b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 2.8e-06, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/mistral-7b-instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/mixtral-8x7b-instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/sonar-small-chat": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/sonar-small-online": { - "max_tokens": 12000, - "max_input_tokens": 12000, - "max_output_tokens": 12000, - "input_cost_per_token": 0, - "output_cost_per_token": 2.8e-07, - "input_cost_per_request": 0.005, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/sonar-medium-chat": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 1.8e-06, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/sonar-medium-online": { - "max_tokens": 12000, - "max_input_tokens": 12000, - "max_output_tokens": 12000, - "input_cost_per_token": 0, - "output_cost_per_token": 1.8e-06, - "input_cost_per_request": 0.005, - "litellm_provider": "perplexity", - "mode": "chat" - }, - "perplexity/sonar": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "perplexity", - "mode": "chat", - "search_context_cost_per_query": { - "search_context_size_low": 0.005, - "search_context_size_medium": 0.008, - "search_context_size_high": 0.012 - }, - "supports_web_search": true - }, - "perplexity/sonar-pro": { - "max_tokens": 8000, - "max_input_tokens": 200000, - "max_output_tokens": 8000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "perplexity", - "mode": "chat", - "search_context_cost_per_query": { - "search_context_size_low": 0.006, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.014 - }, - "supports_web_search": true - }, - "perplexity/sonar-reasoning": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "perplexity", - "mode": "chat", - "search_context_cost_per_query": { - "search_context_size_low": 0.005, - "search_context_size_medium": 0.008, - "search_context_size_high": 0.014 - }, - "supports_web_search": true, - "supports_reasoning": true - }, - "perplexity/sonar-reasoning-pro": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "perplexity", - "mode": "chat", - "search_context_cost_per_query": { - "search_context_size_low": 0.006, - "search_context_size_medium": 0.01, - "search_context_size_high": 0.014 - }, - "supports_web_search": true, - "supports_reasoning": true - }, - "perplexity/sonar-deep-research": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "output_cost_per_reasoning_token": 3e-06, - "citation_cost_per_token": 2e-06, - "search_context_cost_per_query": { - "search_context_size_low": 0.005, - "search_context_size_medium": 0.005, - "search_context_size_high": 0.005 - }, - "litellm_provider": "perplexity", - "mode": "chat", - "supports_reasoning": true, - "supports_web_search": true - }, - "fireworks_ai/accounts/fireworks/models/llama-v3p2-1b-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/llama-v3p2-3b-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/llama-v3p1-8b-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/llama-v3p2-11b-vision-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_vision": true, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/llama-v3p2-90b-vision-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_tool_choice": false, - "supports_vision": true, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/accounts/fireworks/models/firefunction-v2": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", + "output_cost_per_token_above_128k_tokens": 0, + "source": "https://aistudio.google.com", + "supports_audio_output": false, "supports_function_calling": true, "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": true - }, - "fireworks_ai/accounts/fireworks/models/mixtral-8x22b-instruct-hf": { - "max_tokens": 65536, - "max_input_tokens": 65536, - "max_output_tokens": 65536, - "input_cost_per_token": 1.2e-06, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": true - }, - "fireworks_ai/accounts/fireworks/models/qwen2-72b-instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/qwen2p5-coder-32b-instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/yi-large": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/deepseek-coder-v2-instruct": { - "max_tokens": 65536, - "max_input_tokens": 65536, - "max_output_tokens": 65536, - "input_cost_per_token": 1.2e-06, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/deepseek-v3": { - "max_tokens": 8192, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/deepseek-v3-0324": { - "max_tokens": 163840, - "max_input_tokens": 163840, - "max_output_tokens": 163840, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/models/fireworks/deepseek-v3-0324", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/deepseek-r1": { - "max_tokens": 20480, - "max_input_tokens": 128000, - "max_output_tokens": 20480, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/deepseek-r1-basic": { - "max_tokens": 20480, - "max_input_tokens": 128000, - "max_output_tokens": 20480, - "input_cost_per_token": 5.5e-07, - "output_cost_per_token": 2.19e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/deepseek-r1-0528": { - "max_tokens": 160000, - "max_input_tokens": 160000, - "max_output_tokens": 160000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false, - "supports_response_schema": true - }, - "fireworks_ai/accounts/fireworks/models/deepseek-v3p1": { - "max_tokens": 8192, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "input_cost_per_token": 5.6e-07, - "output_cost_per_token": 1.68e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": true - }, - "fireworks_ai/accounts/fireworks/models/kimi-k2-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 16384, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 2.5e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://fireworks.ai/models/fireworks/kimi-k2-instruct" - }, - "fireworks_ai/accounts/fireworks/models/llama-v3p1-405b-instruct": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": true, - "supports_function_calling": true - }, - "fireworks_ai/accounts/fireworks/models/llama4-maverick-instruct-basic": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.2e-07, - "output_cost_per_token": 8.8e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/llama4-scout-instruct-basic": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_response_schema": true, - "source": "https://fireworks.ai/pricing", - "supports_tool_choice": false - }, - "fireworks_ai/accounts/fireworks/models/glm-4p5": { - "max_tokens": 96000, - "max_input_tokens": 128000, - "max_output_tokens": 96000, - "input_cost_per_token": 5.5e-07, - "output_cost_per_token": 2.19e-06, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://fireworks.ai/models/fireworks/glm-4p5" - }, - "fireworks_ai/accounts/fireworks/models/glm-4p5-air": { - "max_tokens": 96000, - "max_input_tokens": 128000, - "max_output_tokens": 96000, - "input_cost_per_token": 2.2e-07, - "output_cost_per_token": 8.8e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://artificialanalysis.ai/models/glm-4-5-air" - }, - "fireworks_ai/accounts/fireworks/models/gpt-oss-120b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/accounts/fireworks/models/gpt-oss-20b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2e-07, - "litellm_provider": "fireworks_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/nomic-ai/nomic-embed-text-v1.5": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "input_cost_per_token": 8e-09, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models", - "mode": "embedding", - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/nomic-ai/nomic-embed-text-v1": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "input_cost_per_token": 8e-09, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models", - "mode": "embedding", - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/WhereIsAI/UAE-Large-V1": { - "max_tokens": 512, - "max_input_tokens": 512, - "input_cost_per_token": 1.6e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models", - "mode": "embedding", - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/thenlper/gte-large": { - "max_tokens": 512, - "max_input_tokens": 512, - "input_cost_per_token": 1.6e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models", - "mode": "embedding", - "source": "https://fireworks.ai/pricing" - }, - "fireworks_ai/thenlper/gte-base": { - "max_tokens": 512, - "max_input_tokens": 512, - "input_cost_per_token": 8e-09, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models", - "mode": "embedding", - "source": "https://fireworks.ai/pricing" - }, - "fireworks-ai-up-to-4b": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "fireworks_ai" - }, - "fireworks-ai-4.1b-to-16b": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "fireworks_ai" - }, - "fireworks-ai-above-16b": { - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "fireworks_ai" - }, - "fireworks-ai-moe-up-to-56b": { - "input_cost_per_token": 5e-07, - "output_cost_per_token": 5e-07, - "litellm_provider": "fireworks_ai" - }, - "fireworks-ai-56b-to-176b": { - "input_cost_per_token": 1.2e-06, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "fireworks_ai" - }, - "fireworks-ai-default": { - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai" - }, - "fireworks-ai-embedding-up-to-150m": { - "input_cost_per_token": 8e-09, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models" - }, - "fireworks-ai-embedding-150m-to-350m": { - "input_cost_per_token": 1.6e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "fireworks_ai-embedding-models" - }, - "anyscale/mistralai/Mistral-7B-Instruct-v0.1": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "anyscale", - "mode": "chat", - "supports_function_calling": true, - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/mistralai-Mistral-7B-Instruct-v0.1" - }, - "anyscale/mistralai/Mixtral-8x7B-Instruct-v0.1": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "anyscale", - "mode": "chat", - "supports_function_calling": true, - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/mistralai-Mixtral-8x7B-Instruct-v0.1" - }, - "anyscale/mistralai/Mixtral-8x22B-Instruct-v0.1": { - "max_tokens": 65536, - "max_input_tokens": 65536, - "max_output_tokens": 65536, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "litellm_provider": "anyscale", - "mode": "chat", - "supports_function_calling": true, - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/mistralai-Mixtral-8x22B-Instruct-v0.1" - }, - "anyscale/HuggingFaceH4/zephyr-7b-beta": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "anyscale", - "mode": "chat" - }, - "anyscale/google/gemma-7b-it": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "anyscale", - "mode": "chat", - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/google-gemma-7b-it" - }, - "anyscale/meta-llama/Llama-2-7b-chat-hf": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "anyscale", - "mode": "chat" - }, - "anyscale/meta-llama/Llama-2-13b-chat-hf": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "anyscale", - "mode": "chat" - }, - "anyscale/meta-llama/Llama-2-70b-chat-hf": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "anyscale", - "mode": "chat" - }, - "anyscale/codellama/CodeLlama-34b-Instruct-hf": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "anyscale", - "mode": "chat" - }, - "anyscale/codellama/CodeLlama-70b-Instruct-hf": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "anyscale", - "mode": "chat", - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/codellama-CodeLlama-70b-Instruct-hf" - }, - "anyscale/meta-llama/Meta-Llama-3-8B-Instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "anyscale", - "mode": "chat", - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/meta-llama-Meta-Llama-3-8B-Instruct" - }, - "anyscale/meta-llama/Meta-Llama-3-70B-Instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "litellm_provider": "anyscale", - "mode": "chat", - "source": "https://docs.anyscale.com/preview/endpoints/text-generation/supported-models/meta-llama-Meta-Llama-3-70B-Instruct" - }, - "cloudflare/@cf/meta/llama-2-7b-chat-fp16": { - "max_tokens": 3072, - "max_input_tokens": 3072, - "max_output_tokens": 3072, - "input_cost_per_token": 1.923e-06, - "output_cost_per_token": 1.923e-06, - "litellm_provider": "cloudflare", - "mode": "chat" - }, - "cloudflare/@cf/meta/llama-2-7b-chat-int8": { - "max_tokens": 2048, - "max_input_tokens": 2048, - "max_output_tokens": 2048, - "input_cost_per_token": 1.923e-06, - "output_cost_per_token": 1.923e-06, - "litellm_provider": "cloudflare", - "mode": "chat" - }, - "cloudflare/@cf/mistral/mistral-7b-instruct-v0.1": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 1.923e-06, - "output_cost_per_token": 1.923e-06, - "litellm_provider": "cloudflare", - "mode": "chat" - }, - "cloudflare/@hf/thebloke/codellama-7b-instruct-awq": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 1.923e-06, - "output_cost_per_token": 1.923e-06, - "litellm_provider": "cloudflare", - "mode": "chat" - }, - "v0/v0-1.0-md": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "v0", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "v0/v0-1.5-md": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "litellm_provider": "v0", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "v0/v0-1.5-lg": { - "max_tokens": 512000, - "max_input_tokens": 512000, - "max_output_tokens": 512000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "litellm_provider": "v0", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/deepseek-llama3.3-70b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, "supports_system_messages": true, "supports_tool_choice": true, - "supports_reasoning": true + "supports_vision": true }, - "lambda_ai/deepseek-r1-0528": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "lambda_ai/deepseek-r1-671b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "lambda_ai/deepseek-v3-0324": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/hermes3-405b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/hermes3-70b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/hermes3-8b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.5e-08, - "output_cost_per_token": 4e-08, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/lfm-40b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/lfm-7b": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.5e-08, - "output_cost_per_token": 4e-08, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama-4-maverick-17b-128e-instruct-fp8": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama-4-scout-17b-16e-instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.1-405b-instruct-fp8": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.1-70b-instruct-fp8": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.1-8b-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.5e-08, - "output_cost_per_token": 4e-08, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.1-nemotron-70b-instruct-fp8": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.2-11b-vision-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.5e-08, - "output_cost_per_token": 2.5e-08, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.2-3b-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.5e-08, - "output_cost_per_token": 2.5e-08, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/llama3.3-70b-instruct-fp8": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/qwen25-coder-32b-instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "lambda_ai/qwen3-32b-fp8": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 1e-07, - "litellm_provider": "lambda_ai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "hyperbolic/moonshotai/Kimi-K2-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/deepseek-ai/DeepSeek-R1-0528": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 2.5e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/Qwen/Qwen3-235B-A22B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 2e-06, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/deepseek-ai/DeepSeek-V3-0324": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/Qwen/QwQ-32B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/deepseek-ai/DeepSeek-R1": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/deepseek-ai/DeepSeek-V3": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/meta-llama/Llama-3.3-70B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/Qwen/Qwen2.5-Coder-32B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/meta-llama/Llama-3.2-3B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/Qwen/Qwen2.5-72B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/meta-llama/Meta-Llama-3-70B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/NousResearch/Hermes-3-Llama-3.1-70B": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/meta-llama/Meta-Llama-3.1-405B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/meta-llama/Meta-Llama-3.1-8B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "hyperbolic/meta-llama/Meta-Llama-3.1-70B-Instruct": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "hyperbolic", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, - "voyage/voyage-lite-01": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-large-2": { - "max_tokens": 16000, - "max_input_tokens": 16000, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-finance-2": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-lite-02-instruct": { - "max_tokens": 4000, - "max_input_tokens": 4000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-law-2": { - "max_tokens": 16000, - "max_input_tokens": 16000, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-code-2": { - "max_tokens": 16000, - "max_input_tokens": 16000, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-2": { - "max_tokens": 4000, - "max_input_tokens": 4000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-3-large": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-3": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 6e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-3-lite": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-code-3": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-multimodal-3": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/voyage-context-3": { - "max_tokens": 120000, - "max_input_tokens": 120000, - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "embedding" - }, - "voyage/rerank-2": { - "max_tokens": 16000, - "max_input_tokens": 16000, - "max_output_tokens": 16000, - "max_query_tokens": 16000, - "input_cost_per_token": 5e-08, - "input_cost_per_query": 5e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "rerank" - }, - "voyage/rerank-2-lite": { - "max_tokens": 8000, - "max_input_tokens": 8000, - "max_output_tokens": 8000, - "max_query_tokens": 8000, - "input_cost_per_token": 2e-08, - "input_cost_per_query": 2e-08, - "output_cost_per_token": 0.0, - "litellm_provider": "voyage", - "mode": "rerank" - }, - "databricks/databricks-claude-3-7-sonnet": { - "max_tokens": 200000, - "max_input_tokens": 200000, - "max_output_tokens": 128000, - "input_cost_per_token": 2.5e-06, - "input_dbu_cost_per_token": 3.571e-05, - "output_cost_per_token": 1.7857e-05, - "output_db_cost_per_token": 0.000214286, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Claude 3.7 conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_assistant_prefill": true, - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true - }, - "databricks/databricks-meta-llama-3-1-405b-instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-06, - "input_dbu_cost_per_token": 7.1429e-05, - "output_cost_per_token": 1.500002e-05, - "output_db_cost_per_token": 0.000214286, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-meta-llama-3-3-70b-instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.00002e-06, - "input_dbu_cost_per_token": 1.4286e-05, - "output_cost_per_token": 2.99999e-06, - "output_dbu_cost_per_token": 4.2857e-05, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-llama-4-maverick": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 5e-06, - "input_dbu_cost_per_token": 7.143e-05, - "output_cost_per_token": 1.5e-05, - "output_dbu_cost_per_token": 0.00021429, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Databricks documentation now provides both DBU costs (_dbu_cost_per_token) and dollar costs(_cost_per_token)." - }, - "supports_tool_choice": true - }, - "databricks/databricks-meta-llama-3-70b-instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 1.00002e-06, - "input_dbu_cost_per_token": 1.4286e-05, - "output_cost_per_token": 2.99999e-06, - "output_dbu_cost_per_token": 4.2857e-05, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-llama-2-70b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5.0001e-07, - "input_dbu_cost_per_token": 7.143e-06, - "output_cost_per_token": 1.5e-06, - "output_dbu_cost_per_token": 2.1429e-05, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-mixtral-8x7b-instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5.0001e-07, - "input_dbu_cost_per_token": 7.143e-06, - "output_cost_per_token": 9.9902e-07, - "output_dbu_cost_per_token": 1.4286e-05, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-mpt-30b-instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 9.9902e-07, - "input_dbu_cost_per_token": 1.4286e-05, - "output_cost_per_token": 9.9902e-07, - "output_dbu_cost_per_token": 1.4286e-05, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-mpt-7b-instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 5.0001e-07, - "input_dbu_cost_per_token": 7.143e-06, - "output_cost_per_token": 0.0, - "output_dbu_cost_per_token": 0.0, - "litellm_provider": "databricks", - "mode": "chat", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - }, - "supports_tool_choice": true - }, - "databricks/databricks-bge-large-en": { - "max_tokens": 512, - "max_input_tokens": 512, - "output_vector_size": 1024, - "input_cost_per_token": 1.0003e-07, - "input_dbu_cost_per_token": 1.429e-06, - "output_cost_per_token": 0.0, - "output_dbu_cost_per_token": 0.0, - "litellm_provider": "databricks", - "mode": "embedding", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - } - }, - "databricks/databricks-gte-large-en": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1024, - "input_cost_per_token": 1.2999e-07, - "input_dbu_cost_per_token": 1.857e-06, - "output_cost_per_token": 0.0, - "output_dbu_cost_per_token": 0.0, - "litellm_provider": "databricks", - "mode": "embedding", - "source": "https://www.databricks.com/product/pricing/foundation-model-serving", - "metadata": { - "notes": "Input/output cost per token is dbu cost * $0.070, based on databricks Llama 3.1 70B conversion. Number provided for reference, '*_dbu_cost_per_token' used in actual calculation." - } - }, - "sambanova/Meta-Llama-3.1-8B-Instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Meta-Llama-3.1-405B-Instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 1e-05, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Meta-Llama-3.2-1B-Instruct": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 8e-08, - "litellm_provider": "sambanova", - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Meta-Llama-3.2-3B-Instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 1.6e-07, - "litellm_provider": "sambanova", - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Llama-4-Maverick-17B-128E-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6.3e-07, - "output_cost_per_token": 1.8e-06, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "supports_vision": true, - "source": "https://cloud.sambanova.ai/plans/pricing", - "metadata": { - "notes": "For vision models, images are converted to 6432 input tokens and are billed at that amount" - } - }, - "sambanova/Llama-4-Scout-17B-16E-Instruct": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 7e-07, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_response_schema": true, - "source": "https://cloud.sambanova.ai/plans/pricing", - "metadata": { - "notes": "For vision models, images are converted to 6432 input tokens and are billed at that amount" - } - }, - "sambanova/Meta-Llama-3.3-70B-Instruct": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Meta-Llama-Guard-3-8B": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-07, - "litellm_provider": "sambanova", - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Qwen3-32B": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 8e-07, - "litellm_provider": "sambanova", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/QwQ-32B": { - "max_tokens": 16384, - "max_input_tokens": 16384, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1e-06, - "litellm_provider": "sambanova", - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/Qwen2-Audio-7B-Instruct": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 4096, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 0.0001, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_audio_input": true, - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/DeepSeek-R1-Distill-Llama-70B": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 7e-07, - "output_cost_per_token": 1.4e-06, - "litellm_provider": "sambanova", - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/DeepSeek-R1": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 7e-06, - "litellm_provider": "sambanova", - "mode": "chat", - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "sambanova/DeepSeek-V3-0324": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 4.5e-06, - "litellm_provider": "sambanova", - "mode": "chat", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://cloud.sambanova.ai/plans/pricing" - }, - "assemblyai/nano": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00010278, - "output_cost_per_second": 0.0, - "litellm_provider": "assemblyai" - }, - "assemblyai/best": { - "mode": "audio_transcription", - "input_cost_per_second": 3.333e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "assemblyai" - }, - "jina-reranker-v2-base-multilingual": { - "max_tokens": 1024, + "gemini/veo-2.0-generate-001": { + "litellm_provider": "gemini", "max_input_tokens": 1024, - "max_output_tokens": 1024, - "max_document_chunks_per_query": 2048, - "input_cost_per_token": 1.8e-08, - "output_cost_per_token": 1.8e-08, - "litellm_provider": "jina_ai", - "mode": "rerank" - }, - "snowflake/deepseek-r1": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "supports_reasoning": true, - "mode": "chat" - }, - "snowflake/snowflake-arctic": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/claude-3-5-sonnet": { - "supports_computer_use": true, - "max_tokens": 18000, - "max_input_tokens": 18000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/mistral-large": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/mistral-large2": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/reka-flash": { - "max_tokens": 100000, - "max_input_tokens": 100000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/reka-core": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/jamba-instruct": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/jamba-1.5-mini": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/jamba-1.5-large": { - "max_tokens": 256000, - "max_input_tokens": 256000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/mixtral-8x7b": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama2-70b-chat": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3-8b": { - "max_tokens": 8000, - "max_input_tokens": 8000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3-70b": { - "max_tokens": 8000, - "max_input_tokens": 8000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3.1-8b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3.1-70b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3.3-70b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/snowflake-llama-3.3-70b": { - "max_tokens": 8000, - "max_input_tokens": 8000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3.1-405b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/snowflake-llama-3.1-405b": { - "max_tokens": 8000, - "max_input_tokens": 8000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3.2-1b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/llama3.2-3b": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/mistral-7b": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "snowflake/gemma-7b": { - "max_tokens": 8000, - "max_input_tokens": 8000, - "max_output_tokens": 8192, - "litellm_provider": "snowflake", - "mode": "chat" - }, - "gradient_ai/anthropic-claude-3.7-sonnet": { - "input_cost_per_token": 3e-06, - "output_cost_per_token": 15e-06, - "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 1024, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "video_generation", + "output_cost_per_second": 0.35, + "source": "https://ai.google.dev/gemini-api/docs/video", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "video" + ] + }, + "gemini/veo-3.0-fast-generate-preview": { + "litellm_provider": "gemini", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "video_generation", + "output_cost_per_second": 0.4, + "source": "https://ai.google.dev/gemini-api/docs/video", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "video" + ] + }, + "gemini/veo-3.0-generate-preview": { + "litellm_provider": "gemini", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "video_generation", + "output_cost_per_second": 0.75, + "source": "https://ai.google.dev/gemini-api/docs/video", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "video" + ] + }, + "gpt-3.5-turbo": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 4097, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-0125": { + "input_cost_per_token": 5e-07, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 16385, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-0301": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 4097, + "max_output_tokens": 4096, + "max_tokens": 4097, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-0613": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 4097, + "max_output_tokens": 4096, + "max_tokens": 4097, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-1106": { + "input_cost_per_token": 1e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 16385, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-16k": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 16385, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-16k-0613": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openai", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 16385, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-3.5-turbo-instruct": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "text-completion-openai", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "gpt-3.5-turbo-instruct-0914": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "text-completion-openai", + "max_input_tokens": 8192, + "max_output_tokens": 4097, + "max_tokens": 4097, + "mode": "completion", + "output_cost_per_token": 2e-06 + }, + "gpt-4": { + "input_cost_per_token": 3e-05, + "litellm_provider": "openai", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-0125-preview": { + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-0314": { + "input_cost_per_token": 3e-05, + "litellm_provider": "openai", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-0613": { + "deprecation_date": "2025-06-06", + "input_cost_per_token": 3e-05, + "litellm_provider": "openai", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-1106-preview": { + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-1106-vision-preview": { + "deprecation_date": "2024-12-06", + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4-32k": { + "input_cost_per_token": 6e-05, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.00012, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-32k-0314": { + "input_cost_per_token": 6e-05, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.00012, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-32k-0613": { + "input_cost_per_token": 6e-05, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.00012, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-turbo": { + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4-turbo-2024-04-09": { + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4-turbo-preview": { + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4-vision-preview": { + "deprecation_date": "2024-12-06", + "input_cost_per_token": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.1": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "openai", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-06, + "output_cost_per_token_batches": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.1-2025-04-14": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "openai", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-06, + "output_cost_per_token_batches": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.1-mini": { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "input_cost_per_token_batches": 2e-07, + "litellm_provider": "openai", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "output_cost_per_token_batches": 8e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.1-mini-2025-04-14": { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "input_cost_per_token_batches": 2e-07, + "litellm_provider": "openai", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "output_cost_per_token_batches": 8e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.1-nano": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 1e-07, + "input_cost_per_token_batches": 5e-08, + "litellm_provider": "openai", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "output_cost_per_token_batches": 2e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.1-nano-2025-04-14": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 1e-07, + "input_cost_per_token_batches": 5e-08, + "litellm_provider": "openai", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "output_cost_per_token_batches": 2e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.5-preview": { + "cache_read_input_token_cost": 3.75e-05, + "input_cost_per_token": 7.5e-05, + "input_cost_per_token_batches": 3.75e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 0.00015, + "output_cost_per_token_batches": 7.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4.5-preview-2025-02-27": { + "cache_read_input_token_cost": 3.75e-05, + "deprecation_date": "2025-07-14", + "input_cost_per_token": 7.5e-05, + "input_cost_per_token_batches": 3.75e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 0.00015, + "output_cost_per_token_batches": 7.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_batches": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_batches": 5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-2024-05-13": { + "input_cost_per_token": 5e-06, + "input_cost_per_token_batches": 2.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_batches": 7.5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-2024-08-06": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_batches": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_batches": 5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-2024-11-20": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_batches": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_batches": 5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-audio-preview": { + "input_cost_per_audio_token": 0.0001, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 0.0002, + "output_cost_per_token": 1e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-audio-preview-2024-10-01": { + "input_cost_per_audio_token": 0.0001, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 0.0002, + "output_cost_per_token": 1e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-audio-preview-2024-12-17": { + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 1e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-audio-preview-2025-06-03": { + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 1e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-mini": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_batches": 7.5e-08, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6e-07, + "output_cost_per_token_batches": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-mini-2024-07-18": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_batches": 7.5e-08, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6e-07, + "output_cost_per_token_batches": 3e-07, + "search_context_cost_per_query": { + "search_context_size_high": 0.03, + "search_context_size_low": 0.025, + "search_context_size_medium": 0.0275 + }, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-mini-audio-preview": { + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 6e-07, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-mini-audio-preview-2024-12-17": { + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 6e-07, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-mini-realtime-preview": { + "cache_creation_input_audio_token_cost": 3e-07, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 6e-07, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-mini-realtime-preview-2024-12-17": { + "cache_creation_input_audio_token_cost": 3e-07, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 6e-07, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-mini-search-preview": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_batches": 7.5e-08, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6e-07, + "output_cost_per_token_batches": 3e-07, + "search_context_cost_per_query": { + "search_context_size_high": 0.03, + "search_context_size_low": 0.025, + "search_context_size_medium": 0.0275 + }, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gpt-4o-mini-search-preview-2025-03-11": { + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_batches": 7.5e-08, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 6e-07, + "output_cost_per_token_batches": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-mini-transcribe": { + "input_cost_per_audio_token": 3e-06, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 16000, + "max_output_tokens": 2000, + "mode": "audio_transcription", + "output_cost_per_token": 5e-06, + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "gpt-4o-mini-tts": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openai", + "mode": "audio_speech", + "output_cost_per_audio_token": 1.2e-05, + "output_cost_per_second": 0.00025, + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/audio/speech" + ], + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "audio" + ] + }, + "gpt-4o-realtime-preview": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 2e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-realtime-preview-2024-10-01": { + "cache_creation_input_audio_token_cost": 2e-05, + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_audio_token": 0.0001, + "input_cost_per_token": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 0.0002, + "output_cost_per_token": 2e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-realtime-preview-2024-12-17": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 2e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-realtime-preview-2025-06-03": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_audio_token": 4e-05, + "input_cost_per_token": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 8e-05, + "output_cost_per_token": 2e-05, + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-4o-search-preview": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_batches": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_batches": 5e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.05, + "search_context_size_low": 0.03, + "search_context_size_medium": 0.035 + }, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "gpt-4o-search-preview-2025-03-11": { + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_batches": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "output_cost_per_token_batches": 5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-4o-transcribe": { + "input_cost_per_audio_token": 6e-06, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openai", + "max_input_tokens": 16000, + "max_output_tokens": 2000, + "mode": "audio_transcription", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "gpt-5": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-5-2025-08-07": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-5-chat": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": false, + "supports_native_streaming": true, + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "gpt-5-chat-latest": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": false, + "supports_native_streaming": true, + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "gpt-5-mini": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-5-mini-2025-08-07": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-5-nano": { + "cache_read_input_token_cost": 5e-09, + "input_cost_per_token": 5e-08, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-5-nano-2025-08-07": { + "cache_read_input_token_cost": 5e-09, + "input_cost_per_token": 5e-08, + "litellm_provider": "openai", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "gpt-realtime": { + "cache_creation_input_audio_token_cost": 4e-07, + "cache_read_input_token_cost": 4e-07, + "input_cost_per_audio_token": 3.2e-05, + "input_cost_per_image": 5e-06, + "input_cost_per_token": 4e-06, + "litellm_provider": "openai", + "max_input_tokens": 32000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 6.4e-05, + "output_cost_per_token": 1.6e-05, + "supported_endpoints": [ + "/v1/realtime" + ], + "supported_modalities": [ + "text", + "image", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gpt-realtime-2025-08-28": { + "cache_creation_input_audio_token_cost": 4e-07, + "cache_read_input_token_cost": 4e-07, + "input_cost_per_audio_token": 3.2e-05, + "input_cost_per_image": 5e-06, + "input_cost_per_token": 4e-06, + "litellm_provider": "openai", + "max_input_tokens": 32000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 6.4e-05, + "output_cost_per_token": 1.6e-05, + "supported_endpoints": [ + "/v1/realtime" + ], + "supported_modalities": [ + "text", + "image", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "gradient_ai/alibaba-qwen3-32b": { + "litellm_provider": "gradient_ai", + "max_tokens": 2048, + "mode": "chat", + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, - "gradient_ai/anthropic-claude-3.5-sonnet": { - "input_cost_per_token": 3e-06, - "output_cost_per_token": 15e-06, + "gradient_ai/anthropic-claude-3-opus": { + "input_cost_per_token": 1.5e-05, "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 1024, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, "gradient_ai/anthropic-claude-3.5-haiku": { "input_cost_per_token": 8e-07, - "output_cost_per_token": 4e-06, "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 1024, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "chat", + "output_cost_per_token": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, - "gradient_ai/anthropic-claude-3-opus": { - "input_cost_per_token": 15e-06, - "output_cost_per_token": 75e-06, + "gradient_ai/anthropic-claude-3.5-sonnet": { + "input_cost_per_token": 3e-06, "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 1024, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], + "supports_tool_choice": false + }, + "gradient_ai/anthropic-claude-3.7-sonnet": { + "input_cost_per_token": 3e-06, + "litellm_provider": "gradient_ai", + "max_tokens": 1024, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, "gradient_ai/deepseek-r1-distill-llama-70b": { - "input_cost_per_token": 99e-08, - "output_cost_per_token": 99e-08, + "input_cost_per_token": 9.9e-07, "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 8000, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], - "supports_tool_choice": false - }, - "gradient_ai/llama3.3-70b-instruct": { - "input_cost_per_token": 65e-08, - "output_cost_per_token": 65e-08, - "litellm_provider": "gradient_ai", "mode": "chat", - "max_tokens": 2048, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "output_cost_per_token": 9.9e-07, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, "gradient_ai/llama3-8b-instruct": { "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 512, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "chat", + "output_cost_per_token": 2e-07, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], + "supports_tool_choice": false + }, + "gradient_ai/llama3.3-70b-instruct": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "gradient_ai", + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 6.5e-07, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, "gradient_ai/mistral-nemo-instruct-2407": { "input_cost_per_token": 3e-07, - "output_cost_per_token": 3e-07, "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 512, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], - "supports_tool_choice": false - }, - "gradient_ai/openai-o3": { - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "litellm_provider": "gradient_ai", "mode": "chat", - "max_tokens": 100000, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], - "supports_tool_choice": false - }, - "gradient_ai/openai-o3-mini": { - "input_cost_per_token": 11e-07, - "output_cost_per_token": 44e-07, - "litellm_provider": "gradient_ai", - "mode": "chat", - "max_tokens": 100000, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "output_cost_per_token": 3e-07, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, "gradient_ai/openai-gpt-4o": { "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 16384, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "chat", + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, "gradient_ai/openai-gpt-4o-mini": { "litellm_provider": "gradient_ai", - "mode": "chat", "max_tokens": 16384, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "mode": "chat", + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, - "gradient_ai/alibaba-qwen3-32b": { + "gradient_ai/openai-o3": { + "input_cost_per_token": 2e-06, "litellm_provider": "gradient_ai", + "max_tokens": 100000, "mode": "chat", - "max_tokens": 2048, - "supported_endpoints": ["/v1/chat/completions"], - "supported_modalities": ["text"], + "output_cost_per_token": 8e-06, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], "supports_tool_choice": false }, - "nscale/meta-llama/Llama-4-Scout-17B-16E-Instruct": { - "input_cost_per_token": 9e-08, - "output_cost_per_token": 2.9e-07, - "litellm_provider": "nscale", + "gradient_ai/openai-o3-mini": { + "input_cost_per_token": 1.1e-06, + "litellm_provider": "gradient_ai", + "max_tokens": 100000, "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + "output_cost_per_token": 4.4e-06, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text" + ], + "supports_tool_choice": false }, - "nscale/Qwen/Qwen2.5-Coder-3B-Instruct": { - "input_cost_per_token": 1e-08, - "output_cost_per_token": 3e-08, - "litellm_provider": "nscale", + "groq/deepseek-r1-distill-llama-70b": { + "input_cost_per_token": 7.5e-07, + "litellm_provider": "groq", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + "output_cost_per_token": 9.9e-07, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true }, - "nscale/Qwen/Qwen2.5-Coder-7B-Instruct": { - "input_cost_per_token": 1e-08, - "output_cost_per_token": 3e-08, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + "groq/distil-whisper-large-v3-en": { + "input_cost_per_second": 5.56e-06, + "litellm_provider": "groq", + "mode": "audio_transcription", + "output_cost_per_second": 0.0 }, - "nscale/Qwen/Qwen2.5-Coder-32B-Instruct": { - "input_cost_per_token": 6e-08, - "output_cost_per_token": 2e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" - }, - "nscale/Qwen/QwQ-32B": { - "input_cost_per_token": 1.8e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" - }, - "nscale/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { - "input_cost_per_token": 3.75e-07, - "output_cost_per_token": 3.75e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.75/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/deepseek-ai/DeepSeek-R1-Distill-Llama-8B": { - "input_cost_per_token": 2.5e-08, - "output_cost_per_token": 2.5e-08, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.05/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B": { - "input_cost_per_token": 9e-08, - "output_cost_per_token": 9e-08, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.18/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.40/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { + "groq/gemma-7b-it": { + "deprecation_date": "2024-12-18", "input_cost_per_token": 7e-08, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", "output_cost_per_token": 7e-08, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.14/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.30/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/mistralai/mixtral-8x22b-instruct-v0.1": { - "input_cost_per_token": 6e-07, - "output_cost_per_token": 6e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $1.20/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/meta-llama/Llama-3.1-8B-Instruct": { - "input_cost_per_token": 3e-08, - "output_cost_per_token": 3e-08, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.06/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/meta-llama/Llama-3.3-70B-Instruct": { - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "litellm_provider": "nscale", - "mode": "chat", - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models", - "metadata": { - "notes": "Pricing listed as $0.40/1M tokens total. Assumed 50/50 split for input/output." - } - }, - "nscale/black-forest-labs/FLUX.1-schnell": { - "mode": "image_generation", - "input_cost_per_pixel": 1.3e-09, - "output_cost_per_pixel": 0.0, - "litellm_provider": "nscale", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#image-models" - }, - "nscale/stabilityai/stable-diffusion-xl-base-1.0": { - "mode": "image_generation", - "input_cost_per_pixel": 3e-09, - "output_cost_per_pixel": 0.0, - "litellm_provider": "nscale", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.nscale.com/docs/inference/serverless-models/current#image-models" - }, - "featherless_ai/featherless-ai/Qwerky-72B": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 4096, - "litellm_provider": "featherless_ai", - "mode": "chat" - }, - "featherless_ai/featherless-ai/Qwerky-QwQ-32B": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 4096, - "litellm_provider": "featherless_ai", - "mode": "chat" - }, - "deepgram/nova-3": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-3-general": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-3-medical": { - "mode": "audio_transcription", - "input_cost_per_second": 8.667e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0052, - "calculation": "$0.0052/60 seconds = $0.00008667 per second (multilingual)" - } - }, - "deepgram/nova-2": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-general": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-meeting": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-phonecall": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-voicemail": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-finance": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-conversationalai": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-video": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-drivethru": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-automotive": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-2-atc": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-general": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/nova-phonecall": { - "mode": "audio_transcription", - "input_cost_per_second": 7.167e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0043, - "calculation": "$0.0043/60 seconds = $0.00007167 per second" - } - }, - "deepgram/enhanced": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00024167, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0145, - "calculation": "$0.0145/60 seconds = $0.00024167 per second" - } - }, - "deepgram/enhanced-general": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00024167, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0145, - "calculation": "$0.0145/60 seconds = $0.00024167 per second" - } - }, - "deepgram/enhanced-meeting": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00024167, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0145, - "calculation": "$0.0145/60 seconds = $0.00024167 per second" - } - }, - "deepgram/enhanced-phonecall": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00024167, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0145, - "calculation": "$0.0145/60 seconds = $0.00024167 per second" - } - }, - "deepgram/enhanced-finance": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00024167, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0145, - "calculation": "$0.0145/60 seconds = $0.00024167 per second" - } - }, - "deepgram/base": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-general": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-meeting": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-phonecall": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-voicemail": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-finance": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-conversationalai": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/base-video": { - "mode": "audio_transcription", - "input_cost_per_second": 0.00020833, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "original_pricing_per_minute": 0.0125, - "calculation": "$0.0125/60 seconds = $0.00020833 per second" - } - }, - "deepgram/whisper": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" - } - }, - "deepgram/whisper-tiny": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" - } - }, - "deepgram/whisper-base": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" - } - }, - "deepgram/whisper-small": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" - } - }, - "deepgram/whisper-medium": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" - } - }, - "deepgram/whisper-large": { - "mode": "audio_transcription", - "input_cost_per_second": 0.0001, - "output_cost_per_second": 0.0, - "litellm_provider": "deepgram", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://deepgram.com/pricing", - "metadata": { - "notes": "Deepgram's hosted OpenAI Whisper models - pricing may differ from native Deepgram models" - } - }, - "elevenlabs/scribe_v1": { - "mode": "audio_transcription", - "input_cost_per_second": 6.11e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "elevenlabs", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://elevenlabs.io/pricing", - "metadata": { - "original_pricing_per_hour": 0.22, - "calculation": "$0.22/hour = $0.00366/minute = $0.0000611 per second (enterprise pricing)", - "notes": "ElevenLabs Scribe v1 - state-of-the-art speech recognition model with 99 language support" - } - }, - "elevenlabs/scribe_v1_experimental": { - "mode": "audio_transcription", - "input_cost_per_second": 6.11e-05, - "output_cost_per_second": 0.0, - "litellm_provider": "elevenlabs", - "supported_endpoints": [ - "/v1/audio/transcriptions" - ], - "source": "https://elevenlabs.io/pricing", - "metadata": { - "original_pricing_per_hour": 0.22, - "calculation": "$0.22/hour = $0.00366/minute = $0.0000611 per second (enterprise pricing)", - "notes": "ElevenLabs Scribe v1 experimental - enhanced version of the main Scribe model" - } - }, - "bedrock/us-gov-east-1/amazon.titan-embed-text-v1": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1536, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding" - }, - "bedrock/us-gov-east-1/amazon.titan-embed-text-v2:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1024, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding" - }, - "bedrock/us-gov-east-1/amazon.titan-text-express-v1": { - "max_tokens": 8000, - "max_input_tokens": 42000, - "max_output_tokens": 8000, - "input_cost_per_token": 1.3e-06, - "output_cost_per_token": 1.7e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-gov-east-1/amazon.titan-text-lite-v1": { - "max_tokens": 4000, - "max_input_tokens": 42000, - "max_output_tokens": 4000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-gov-east-1/amazon.titan-text-premier-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 42000, - "max_output_tokens": 32000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-gov-east-1/anthropic.claude-3-5-sonnet-20240620-v1:0": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3.6e-06, - "output_cost_per_token": 1.8e-05, - "litellm_provider": "bedrock", - "mode": "chat", "supports_function_calling": true, "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, "supports_tool_choice": true }, - "bedrock/us-gov-east-1/anthropic.claude-3-haiku-20240307-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "bedrock/us-gov-east-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 2048, - "max_input_tokens": 8000, - "max_output_tokens": 2048, - "input_cost_per_token": 2.65e-06, - "output_cost_per_token": 3.5e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_pdf_input": true - }, - "bedrock/us-gov-east-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 2048, - "max_input_tokens": 8000, - "max_output_tokens": 2048, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.65e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_pdf_input": true - }, - "bedrock/us-gov-west-1/amazon.titan-embed-text-v1": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1536, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding" - }, - "bedrock/us-gov-west-1/amazon.titan-embed-text-v2:0": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "output_vector_size": 1024, + "groq/gemma2-9b-it": { "input_cost_per_token": 2e-07, - "output_cost_per_token": 0.0, - "litellm_provider": "bedrock", - "mode": "embedding" - }, - "bedrock/us-gov-west-1/amazon.titan-text-express-v1": { - "max_tokens": 8000, - "max_input_tokens": 42000, - "max_output_tokens": 8000, - "input_cost_per_token": 1.3e-06, - "output_cost_per_token": 1.7e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-gov-west-1/amazon.titan-text-lite-v1": { - "max_tokens": 4000, - "max_input_tokens": 42000, - "max_output_tokens": 4000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 4e-07, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-gov-west-1/amazon.titan-text-premier-v1:0": { - "max_tokens": 32000, - "max_input_tokens": 42000, - "max_output_tokens": 32000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "bedrock", - "mode": "chat" - }, - "bedrock/us-gov-west-1/anthropic.claude-3-5-sonnet-20240620-v1:0": { + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 3.6e-06, - "output_cost_per_token": 1.8e-05, - "litellm_provider": "bedrock", "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "bedrock/us-gov-west-1/anthropic.claude-3-haiku-20240307-v1:0": { - "max_tokens": 4096, - "max_input_tokens": 200000, - "max_output_tokens": 4096, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_tool_choice": true - }, - "bedrock/us-gov-west-1/meta.llama3-70b-instruct-v1:0": { - "max_tokens": 2048, - "max_input_tokens": 8000, - "max_output_tokens": 2048, - "input_cost_per_token": 2.65e-06, - "output_cost_per_token": 3.5e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_pdf_input": true - }, - "bedrock/us-gov-west-1/meta.llama3-8b-instruct-v1:0": { - "max_tokens": 2048, - "max_input_tokens": 8000, - "max_output_tokens": 2048, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.65e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_pdf_input": true - }, - "bedrock/us-gov-east-1/amazon.nova-pro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 9.6e-07, - "output_cost_per_token": 3.84e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "bedrock/us-gov-west-1/amazon.nova-pro-v1:0": { - "max_tokens": 10000, - "max_input_tokens": 300000, - "max_output_tokens": 10000, - "input_cost_per_token": 9.6e-07, - "output_cost_per_token": 3.84e-06, - "litellm_provider": "bedrock", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "dashscope/qwen-max": { - "max_tokens": 32768, - "max_input_tokens": 30720, - "max_output_tokens": 8192, - "input_cost_per_token": 1.6e-06, - "output_cost_per_token": 6.4e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus-latest": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 32768, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 256e3], "input_cost_per_token": 4e-07, "output_cost_per_token": 1.2e-06, "output_cost_per_reasoning_token": 4e-06}, - {"range": [256e3, 1e6], "input_cost_per_token": 1.2e-06, "output_cost_per_token": 3.6e-06, "output_cost_per_reasoning_token": 1.2e-05} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-turbo-latest": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-08, "output_cost_per_token": 2e-07, - "output_cost_per_reasoning_token": 5e-07, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen3-30b-a3b": { - "max_tokens": 131072, - "max_input_tokens": 129024, - "max_output_tokens": 16384, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen3-max-preview": { - "max_tokens": 262144, - "max_input_tokens": 258048, - "max_output_tokens": 65536, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 32e3], "input_cost_per_token": 1.2e-06, "output_cost_per_token": 6e-06}, - {"range": [32e3, 128e3], "input_cost_per_token": 2.4e-06, "output_cost_per_token": 1.2e-05}, - {"range": [128e3, 252e3], "input_cost_per_token": 3.0e-06, "output_cost_per_token": 1.5e-05} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus": { - "max_tokens": 131072, - "max_input_tokens": 129024, - "max_output_tokens": 16384, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-flash": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 32768, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 256e3], "input_cost_per_token": 5e-08, "output_cost_per_token": 4e-07}, - {"range": [256e3, 1e6], "input_cost_per_token": 2.5e-07, "output_cost_per_token": 2e-06} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-coder": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 16384, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.5e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen3-coder-plus": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 65536, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 32e3], "input_cost_per_token": 1e-06, "output_cost_per_token": 5e-06, "cache_read_input_token_cost": 1e-07}, - {"range": [32e3, 128e3], "input_cost_per_token": 1.8e-06, "output_cost_per_token": 9e-06, "cache_read_input_token_cost": 1.8e-07}, - {"range": [128e3, 256e3], "input_cost_per_token": 3e-06, "output_cost_per_token": 1.5e-05, "cache_read_input_token_cost": 3e-07}, - {"range": [256e3, 1e6], "input_cost_per_token": 6e-06, "output_cost_per_token": 6e-05, "cache_read_input_token_cost": 6e-07} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen3-coder-plus-2025-07-22": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 65536, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 32e3], "input_cost_per_token": 1e-06, "output_cost_per_token": 5e-06}, - {"range": [32e3, 128e3], "input_cost_per_token": 1.8e-06, "output_cost_per_token": 9e-06}, - {"range": [128e3, 256e3], "input_cost_per_token": 3e-06, "output_cost_per_token": 1.5e-05}, - {"range": [256e3, 1e6], "input_cost_per_token": 6e-06, "output_cost_per_token": 6e-05} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen3-coder-flash": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 65536, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 32e3], "input_cost_per_token": 3e-07, "output_cost_per_token": 1.5e-06, "cache_read_input_token_cost": 8e-08}, - {"range": [32e3, 128e3], "input_cost_per_token": 5e-07, "output_cost_per_token": 2.5e-06, "cache_read_input_token_cost": 1.2e-07}, - {"range": [128e3, 256e3], "input_cost_per_token": 8e-07, "output_cost_per_token": 4e-06, "cache_read_input_token_cost": 2e-07}, - {"range": [256e3, 1e6], "input_cost_per_token": 1.6e-06, "output_cost_per_token": 9.6e-06, "cache_read_input_token_cost": 4e-07} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen3-coder-flash-2025-07-28": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 65536, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 32e3], "input_cost_per_token": 3e-07, "output_cost_per_token": 1.5e-06}, - {"range": [32e3, 128e3], "input_cost_per_token": 5e-07, "output_cost_per_token": 2.5e-06}, - {"range": [128e3, 256e3], "input_cost_per_token": 8e-07, "output_cost_per_token": 4e-06}, - {"range": [256e3, 1e6], "input_cost_per_token": 1.6e-06, "output_cost_per_token": 9.6e-06} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus-2025-09-11": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 32768, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 256e3], "input_cost_per_token": 4e-07, "output_cost_per_token": 1.2e-06, "output_cost_per_reasoning_token": 4e-06}, - {"range": [256e3, 1e6], "input_cost_per_token": 1.2e-06, "output_cost_per_token": 3.6e-06, "output_cost_per_reasoning_token": 1.2e-05} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus-2025-07-28": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 32768, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 256e3], "input_cost_per_token": 4e-07, "output_cost_per_token": 1.2e-06, "output_cost_per_reasoning_token": 4e-06}, - {"range": [256e3, 1e6], "input_cost_per_token": 1.2e-06, "output_cost_per_token": 3.6e-06, "output_cost_per_reasoning_token": 1.2e-05} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus-2025-07-14": { - "max_tokens": 131072, - "max_input_tokens": 129024, - "max_output_tokens": 16384, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.2e-06, - "output_cost_per_reasoning_token": 4e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus-2025-04-28": { - "max_tokens": 131072, - "max_input_tokens": 129024, - "max_output_tokens": 16384, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.2e-06, - "output_cost_per_reasoning_token": 4e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-plus-2025-01-25": { - "max_tokens": 131072, - "max_input_tokens": 129024, - "max_output_tokens": 8192, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-flash-2025-07-28": { - "max_tokens": 1000000, - "max_input_tokens": 997952, - "max_output_tokens": 32768, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "tiered_pricing": [ - {"range": [0, 256e3], "input_cost_per_token": 5e-08, "output_cost_per_token": 4e-07}, - {"range": [256e3, 1e6], "input_cost_per_token": 2.5e-07, "output_cost_per_token": 2e-06} - ], - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-turbo": { - "max_tokens": 131072, - "max_input_tokens": 129024, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2e-07, - "output_cost_per_reasoning_token": 5e-07, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-turbo-2025-04-28": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 16384, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2e-07, - "output_cost_per_reasoning_token": 5e-07, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwen-turbo-2024-11-01": { - "max_tokens": 1000000, - "max_input_tokens": 1000000, - "max_output_tokens": 8192, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 2e-07, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "dashscope/qwq-plus": { - "max_tokens": 131072, - "max_input_tokens": 98304, - "max_output_tokens": 8192, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 2.4e-06, - "litellm_provider": "dashscope", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "mode": "chat", - "source": "https://www.alibabacloud.com/help/en/model-studio/models" - }, - "moonshot/moonshot-v1-8k": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-32k": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-128k": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-auto": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/kimi-k2-0711-preview": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 2.5e-06, - "cache_read_input_token_cost": 1.5e-07, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_web_search": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing/chat#generation-model-kimi-k2" - }, - "moonshot/moonshot-v1-32k-0430": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-128k-0430": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-8k-0430": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/kimi-latest": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "cache_read_input_token_cost": 1.5e-07, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/kimi-latest-8k": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-06, - "cache_read_input_token_cost": 1.5e-07, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/kimi-latest-32k": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "cache_read_input_token_cost": 1.5e-07, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/kimi-latest-128k": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "cache_read_input_token_cost": 1.5e-07, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/kimi-thinking-preview": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3e-05, - "output_cost_per_token": 3e-05, - "litellm_provider": "moonshot", - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-8k-vision-preview": { - "max_tokens": 8192, - "max_input_tokens": 8192, - "max_output_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-32k-vision-preview": { - "max_tokens": 32768, - "max_input_tokens": 32768, - "max_output_tokens": 32768, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "moonshot/moonshot-v1-128k-vision-preview": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "litellm_provider": "moonshot", - "supports_function_calling": true, - "supports_tool_choice": true, - "supports_vision": true, - "mode": "chat", - "source": "https://platform.moonshot.ai/docs/pricing" - }, - "recraft/recraftv3": { - "mode": "image_generation", - "output_cost_per_image": 0.04, - "litellm_provider": "recraft", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://www.recraft.ai/docs#pricing" - }, - "recraft/recraftv2": { - "mode": "image_generation", - "output_cost_per_image": 0.022, - "litellm_provider": "recraft", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://www.recraft.ai/docs#pricing" - }, - "morph/morph-v3-fast": { - "max_tokens": 16000, - "max_input_tokens": 16000, - "max_output_tokens": 16000, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 1.2e-06, - "litellm_provider": "morph", - "mode": "chat", "supports_function_calling": false, - "supports_parallel_function_calling": false, - "supports_vision": false, - "supports_system_messages": true, + "supports_response_schema": true, "supports_tool_choice": false }, - "morph/morph-v3-large": { - "max_tokens": 16000, - "max_input_tokens": 16000, - "max_output_tokens": 16000, + "groq/llama-3.1-405b-reasoning": { + "input_cost_per_token": 5.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.9e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-3.1-70b-versatile": { + "deprecation_date": "2025-01-24", + "input_cost_per_token": 5.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.9e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-3.1-8b-instant": { + "input_cost_per_token": 5e-08, + "litellm_provider": "groq", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 8e-08, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-3.2-11b-text-preview": { + "deprecation_date": "2024-10-28", + "input_cost_per_token": 1.8e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.8e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-3.2-11b-vision-preview": { + "deprecation_date": "2025-04-14", + "input_cost_per_token": 1.8e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.8e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "groq/llama-3.2-1b-preview": { + "deprecation_date": "2025-04-14", + "input_cost_per_token": 4e-08, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4e-08, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-3.2-3b-preview": { + "deprecation_date": "2025-04-14", + "input_cost_per_token": 6e-08, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-08, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-3.2-90b-text-preview": { + "deprecation_date": "2024-11-25", "input_cost_per_token": 9e-07, - "output_cost_per_token": 1.9e-06, - "litellm_provider": "morph", - "mode": "chat", - "supports_function_calling": false, - "supports_parallel_function_calling": false, - "supports_vision": false, - "supports_system_messages": true, - "supports_tool_choice": false - }, - "heroku/claude-4-sonnet": { + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, "max_tokens": 8192, - "litellm_provider": "heroku", "mode": "chat", + "output_cost_per_token": 9e-07, "supports_function_calling": true, - "supports_system_messages": true, + "supports_response_schema": true, "supports_tool_choice": true }, - "heroku/claude-3-7-sonnet": { + "groq/llama-3.2-90b-vision-preview": { + "deprecation_date": "2025-04-14", + "input_cost_per_token": 9e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 9e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "groq/llama-3.3-70b-specdec": { + "deprecation_date": "2025-04-14", + "input_cost_per_token": 5.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 9.9e-07, + "supports_tool_choice": true + }, + "groq/llama-3.3-70b-versatile": { + "input_cost_per_token": 5.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 7.9e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama-guard-3-8b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-07 + }, + "groq/llama2-70b-4096": { + "input_cost_per_token": 7e-07, + "litellm_provider": "groq", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 8e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama3-groq-70b-8192-tool-use-preview": { + "deprecation_date": "2025-01-06", + "input_cost_per_token": 8.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 8.9e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/llama3-groq-8b-8192-tool-use-preview": { + "deprecation_date": "2025-01-06", + "input_cost_per_token": 1.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.9e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/meta-llama/llama-4-maverick-17b-128e-instruct": { + "input_cost_per_token": 2e-07, + "litellm_provider": "groq", + "max_input_tokens": 131072, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/meta-llama/llama-4-scout-17b-16e-instruct": { + "input_cost_per_token": 1.1e-07, + "litellm_provider": "groq", + "max_input_tokens": 131072, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 3.4e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/mistral-saba-24b": { + "input_cost_per_token": 7.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.9e-07 + }, + "groq/mixtral-8x7b-32768": { + "deprecation_date": "2025-03-20", + "input_cost_per_token": 2.4e-07, + "litellm_provider": "groq", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 2.4e-07, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/moonshotai/kimi-k2-instruct": { + "input_cost_per_token": 1e-06, + "litellm_provider": "groq", + "max_input_tokens": 131072, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/openai/gpt-oss-120b": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "groq", + "max_input_tokens": 131072, + "max_output_tokens": 32766, + "max_tokens": 32766, + "mode": "chat", + "output_cost_per_token": 7.5e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "groq/openai/gpt-oss-20b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "groq", + "max_input_tokens": 131072, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "groq/playai-tts": { + "input_cost_per_character": 5e-05, + "litellm_provider": "groq", + "max_input_tokens": 10000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "audio_speech" + }, + "groq/qwen/qwen3-32b": { + "input_cost_per_token": 2.9e-07, + "litellm_provider": "groq", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 5.9e-07, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "groq/whisper-large-v3": { + "input_cost_per_second": 3.083e-05, + "litellm_provider": "groq", + "mode": "audio_transcription", + "output_cost_per_second": 0.0 + }, + "groq/whisper-large-v3-turbo": { + "input_cost_per_second": 1.111e-05, + "litellm_provider": "groq", + "mode": "audio_transcription", + "output_cost_per_second": 0.0 + }, + "hd/1024-x-1024/dall-e-3": { + "input_cost_per_pixel": 7.629e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0 + }, + "hd/1024-x-1792/dall-e-3": { + "input_cost_per_pixel": 6.539e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0 + }, + "hd/1792-x-1024/dall-e-3": { + "input_cost_per_pixel": 6.539e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0 + }, + "heroku/claude-3-5-haiku": { "litellm_provider": "heroku", + "max_tokens": 4096, "mode": "chat", "supports_function_calling": true, "supports_system_messages": true, "supports_tool_choice": true }, "heroku/claude-3-5-sonnet-latest": { - "max_tokens": 8192, "litellm_provider": "heroku", + "max_tokens": 8192, "mode": "chat", "supports_function_calling": true, "supports_system_messages": true, "supports_tool_choice": true }, - "heroku/claude-3-5-haiku": { - "max_tokens": 4096, + "heroku/claude-3-7-sonnet": { "litellm_provider": "heroku", + "max_tokens": 8192, "mode": "chat", "supports_function_calling": true, "supports_system_messages": true, "supports_tool_choice": true }, - "vercel_ai_gateway/alibaba/qwen3-coder": { - "max_tokens": 262144, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "max_output_tokens": 66536, - "max_input_tokens": 262144, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/codestral-embed": { - "max_tokens": 0, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/google/gemini-2.5-pro": { - "max_tokens": 1048576, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "max_output_tokens": 65536, - "max_input_tokens": 1048576, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/deepseek/deepseek-v3": { - "max_tokens": 128000, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 9e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/amazon/nova-lite": { - "max_tokens": 300000, - "input_cost_per_token": 6e-08, - "output_cost_per_token": 2.4e-07, - "max_output_tokens": 8192, - "max_input_tokens": 300000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-4-scout": { - "max_tokens": 131072, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "max_output_tokens": 8192, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.2-1b": { - "max_tokens": 128000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/mistral-small": { - "max_tokens": 32000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "max_output_tokens": 4000, - "max_input_tokens": 32000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/google/gemini-2.5-flash": { - "max_tokens": 1000000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 2.5e-06, - "max_output_tokens": 65536, - "max_input_tokens": 1000000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/inception/mercury-coder-small": { - "max_tokens": 32000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1e-06, - "max_output_tokens": 16384, - "max_input_tokens": 32000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/text-embedding-3-small": { - "max_tokens": 0, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "embedding" - }, - "vercel_ai_gateway/xai/grok-2-vision": { - "max_tokens": 32768, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 1e-05, - "max_output_tokens": 32768, - "max_input_tokens": 32768, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/xai/grok-2": { - "max_tokens": 131072, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 1e-05, - "max_output_tokens": 4000, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/deepseek/deepseek-r1-distill-llama-70b": { - "max_tokens": 131072, - "input_cost_per_token": 7.5e-07, - "output_cost_per_token": 9.9e-07, - "max_output_tokens": 131072, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.1-70b": { - "max_tokens": 128000, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/xai/grok-3": { - "max_tokens": 131072, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 131072, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/alibaba/qwen-3-235b": { - "max_tokens": 40960, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "max_output_tokens": 16384, - "max_input_tokens": 40960, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/xai/grok-3-fast": { - "max_tokens": 131072, - "input_cost_per_token": 5e-06, - "output_cost_per_token": 2.5e-05, - "max_output_tokens": 131072, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/vercel/v0-1.5-md": { - "max_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 32768, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/o4-mini": { - "max_tokens": 200000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "max_output_tokens": 100000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 2.75e-07, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/magistral-medium": { - "max_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 5e-06, - "max_output_tokens": 64000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/amazon/titan-embed-text-v2": { - "max_tokens": 0, - "input_cost_per_token": 2e-08, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/alibaba/qwen-3-30b": { - "max_tokens": 40960, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "max_output_tokens": 16384, - "max_input_tokens": 40960, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/zai/glm-4.5-air": { - "max_tokens": 128000, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 1.1e-06, - "max_output_tokens": 96000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-4-turbo": { - "max_tokens": 128000, - "input_cost_per_token": 1e-05, - "output_cost_per_token": 3e-05, - "max_output_tokens": 4096, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/mistral-large": { - "max_tokens": 32000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "max_output_tokens": 4000, - "max_input_tokens": 32000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/perplexity/sonar-pro": { - "max_tokens": 200000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 8000, - "max_input_tokens": 200000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.2-90b": { - "max_tokens": 128000, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3-8b": { + "heroku/claude-4-sonnet": { + "litellm_provider": "heroku", "max_tokens": 8192, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 8e-08, - "max_output_tokens": 8192, - "max_input_tokens": 8192, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" + "mode": "chat", + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true }, - "vercel_ai_gateway/google/text-embedding-005": { - "max_tokens": 0, - "input_cost_per_token": 2.5e-08, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "embedding" + "high/1024-x-1024/gpt-image-1": { + "input_cost_per_pixel": 1.59263611e-07, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "vercel_ai_gateway/mistral/pixtral-large": { - "max_tokens": 128000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 6e-06, - "max_output_tokens": 4000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" + "high/1024-x-1536/gpt-image-1": { + "input_cost_per_pixel": 1.58945719e-07, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "vercel_ai_gateway/anthropic/claude-3.5-sonnet": { - "max_tokens": 200000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 8192, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_token_cost": 3.75e-06, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" + "high/1536-x-1024/gpt-image-1": { + "input_cost_per_pixel": 1.58945719e-07, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] }, - "vercel_ai_gateway/amazon/nova-micro": { - "max_tokens": 128000, - "input_cost_per_token": 3.5e-08, - "output_cost_per_token": 1.4e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/cohere/command-r": { - "max_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "max_output_tokens": 4096, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/morph/morph-v3-large": { - "max_tokens": 32768, - "input_cost_per_token": 9e-07, - "output_cost_per_token": 1.9e-06, - "max_output_tokens": 16384, - "max_input_tokens": 32768, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/mixtral-8x22b-instruct": { - "max_tokens": 65536, - "input_cost_per_token": 1.2e-06, - "output_cost_per_token": 1.2e-06, - "max_output_tokens": 2048, - "max_input_tokens": 65536, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/xai/grok-4": { - "max_tokens": 256000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 256000, - "max_input_tokens": 256000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.1-8b": { - "max_tokens": 131000, - "input_cost_per_token": 5e-08, - "output_cost_per_token": 8e-08, - "max_output_tokens": 131072, - "max_input_tokens": 131000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/anthropic/claude-3-opus": { - "max_tokens": 200000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "max_output_tokens": 4096, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 1.5e-06, - "cache_creation_input_token_cost": 1.875e-05, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/zai/glm-4.5": { - "max_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 2.2e-06, - "max_output_tokens": 131072, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-4o": { - "max_tokens": 128000, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "max_output_tokens": 16384, - "max_input_tokens": 128000, - "cache_read_input_token_cost": 1.25e-06, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/o3-mini": { - "max_tokens": 200000, - "input_cost_per_token": 1.1e-06, - "output_cost_per_token": 4.4e-06, - "max_output_tokens": 100000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 5.5e-07, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/ministral-8b": { - "max_tokens": 128000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "max_output_tokens": 4000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/o3": { - "max_tokens": 200000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "max_output_tokens": 100000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 5e-07, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/vercel/v0-1.0-md": { - "max_tokens": 128000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 32000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/google/text-multilingual-embedding-002": { - "max_tokens": 0, - "input_cost_per_token": 2.5e-08, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "embedding" - }, - "vercel_ai_gateway/amazon/nova-pro": { - "max_tokens": 300000, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 3.2e-06, - "max_output_tokens": 8192, - "max_input_tokens": 300000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/morph/morph-v3-fast": { - "max_tokens": 32768, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 1.2e-06, - "max_output_tokens": 16384, - "max_input_tokens": 32768, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-3.5-turbo": { - "max_tokens": 16385, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "max_output_tokens": 4096, - "max_input_tokens": 16385, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/codestral": { - "max_tokens": 256000, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 9e-07, - "max_output_tokens": 4000, - "max_input_tokens": 256000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.2-11b": { - "max_tokens": 128000, - "input_cost_per_token": 1.6e-07, - "output_cost_per_token": 1.6e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3-70b": { - "max_tokens": 8192, - "input_cost_per_token": 5.9e-07, - "output_cost_per_token": 7.9e-07, - "max_output_tokens": 8192, - "max_input_tokens": 8192, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/xai/grok-3-mini-fast": { - "max_tokens": 131072, - "input_cost_per_token": 6e-07, - "output_cost_per_token": 4e-06, - "max_output_tokens": 131072, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/text-embedding-3-large": { - "max_tokens": 0, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "embedding" - }, - "vercel_ai_gateway/google/gemini-2.0-flash-lite": { - "max_tokens": 1048576, - "input_cost_per_token": 7.5e-08, - "output_cost_per_token": 3e-07, - "max_output_tokens": 8192, - "max_input_tokens": 1048576, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/ministral-3b": { - "max_tokens": 128000, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 4e-08, - "max_output_tokens": 4000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/perplexity/sonar-reasoning-pro": { - "max_tokens": 127000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, - "max_output_tokens": 8000, - "max_input_tokens": 127000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/google/gemini-embedding-001": { - "max_tokens": 0, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "embedding" - }, - "vercel_ai_gateway/anthropic/claude-3-haiku": { - "max_tokens": 200000, - "input_cost_per_token": 2.5e-07, - "output_cost_per_token": 1.25e-06, - "max_output_tokens": 4096, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 3e-08, - "cache_creation_input_token_cost": 3e-07, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/o1": { - "max_tokens": 200000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 6e-05, - "max_output_tokens": 100000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 7.5e-06, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/deepseek/deepseek-r1": { - "max_tokens": 128000, - "input_cost_per_token": 5.5e-07, - "output_cost_per_token": 2.19e-06, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/mistral-embed": { - "max_tokens": 0, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-4.1-mini": { - "max_tokens": 1047576, - "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.6e-06, - "max_output_tokens": 32768, - "max_input_tokens": 1047576, - "cache_read_input_token_cost": 1e-07, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-4o-mini": { - "max_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "max_output_tokens": 16384, - "max_input_tokens": 128000, - "cache_read_input_token_cost": 7.5e-08, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/alibaba/qwen-3-14b": { - "max_tokens": 40960, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 2.4e-07, - "max_output_tokens": 16384, - "max_input_tokens": 40960, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/anthropic/claude-4-opus": { - "max_tokens": 200000, - "input_cost_per_token": 1.5e-05, - "output_cost_per_token": 7.5e-05, - "max_output_tokens": 32000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 1.5e-06, - "cache_creation_input_token_cost": 1.875e-05, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/mistral-saba-24b": { - "max_tokens": 32768, - "input_cost_per_token": 7.9e-07, - "output_cost_per_token": 7.9e-07, - "max_output_tokens": 32768, - "max_input_tokens": 32768, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/perplexity/sonar-reasoning": { - "max_tokens": 127000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 5e-06, - "max_output_tokens": 8000, - "max_input_tokens": 127000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/anthropic/claude-3.5-haiku": { - "max_tokens": 200000, - "input_cost_per_token": 8e-07, - "output_cost_per_token": 4e-06, - "max_output_tokens": 8192, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 8e-08, - "cache_creation_input_token_cost": 1e-06, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/cohere/command-a": { - "max_tokens": 256000, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "max_output_tokens": 8000, - "max_input_tokens": 256000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/google/gemma-2-9b": { - "max_tokens": 8192, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 2e-07, - "max_output_tokens": 8192, - "max_input_tokens": 8192, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.2-3b": { - "max_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-4.1-nano": { - "max_tokens": 1047576, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 4e-07, - "max_output_tokens": 32768, - "max_input_tokens": 1047576, - "cache_read_input_token_cost": 2.5e-08, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/anthropic/claude-4-sonnet": { - "max_tokens": 200000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 64000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_token_cost": 3.75e-06, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/perplexity/sonar": { - "max_tokens": 127000, - "input_cost_per_token": 1e-06, - "output_cost_per_token": 1e-06, - "max_output_tokens": 8000, - "max_input_tokens": 127000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-4-maverick": { - "max_tokens": 131072, - "input_cost_per_token": 2e-07, - "output_cost_per_token": 6e-07, - "max_output_tokens": 8192, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/text-embedding-ada-002": { - "max_tokens": 0, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "embedding" - }, - "vercel_ai_gateway/xai/grok-3-mini": { - "max_tokens": 131072, - "input_cost_per_token": 3e-07, - "output_cost_per_token": 5e-07, - "max_output_tokens": 131072, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/cohere/embed-v4.0": { - "max_tokens": 0, + "hyperbolic/NousResearch/Hermes-3-Llama-3.1-70B": { "input_cost_per_token": 1.2e-07, - "output_cost_per_token": 0.0, - "max_output_tokens": 0, - "max_input_tokens": 0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/meta/llama-3.3-70b": { - "max_tokens": 128000, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "max_output_tokens": 8192, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/cohere/command-r-plus": { - "max_tokens": 128000, - "input_cost_per_token": 2.5e-06, - "output_cost_per_token": 1e-05, - "max_output_tokens": 4096, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-3.5-turbo-instruct": { - "max_tokens": 8192, - "input_cost_per_token": 1.5e-06, - "output_cost_per_token": 2e-06, - "max_output_tokens": 4096, - "max_input_tokens": 8192, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/devstral-small": { - "max_tokens": 128000, - "input_cost_per_token": 7e-08, - "output_cost_per_token": 2.8e-07, - "max_output_tokens": 128000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/anthropic/claude-3.7-sonnet": { - "max_tokens": 200000, - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "max_output_tokens": 64000, - "max_input_tokens": 200000, - "cache_read_input_token_cost": 3e-07, - "cache_creation_input_token_cost": 3.75e-06, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/google/gemini-2.0-flash": { - "max_tokens": 1048576, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 6e-07, - "max_output_tokens": 8192, - "max_input_tokens": 1048576, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/pixtral-12b": { - "max_tokens": 128000, - "input_cost_per_token": 1.5e-07, - "output_cost_per_token": 1.5e-07, - "max_output_tokens": 4000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/mistral/magistral-small": { - "max_tokens": 128000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 1.5e-06, - "max_output_tokens": 64000, - "max_input_tokens": 128000, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/moonshotai/kimi-k2": { - "max_tokens": 131072, - "input_cost_per_token": 5.5e-07, - "output_cost_per_token": 2.2e-06, - "max_output_tokens": 16384, - "max_input_tokens": 131072, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/alibaba/qwen-3-32b": { - "max_tokens": 40960, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 3e-07, - "max_output_tokens": 16384, - "max_input_tokens": 40960, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "vercel_ai_gateway/openai/gpt-4.1": { - "max_tokens": 1047576, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 8e-06, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, "max_output_tokens": 32768, - "max_input_tokens": 1047576, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/Qwen/QwQ-32B": { + "input_cost_per_token": 2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/Qwen/Qwen2.5-72B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/Qwen/Qwen2.5-Coder-32B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/Qwen/Qwen3-235B-A22B": { + "input_cost_per_token": 2e-06, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/deepseek-ai/DeepSeek-R1": { + "input_cost_per_token": 4e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/deepseek-ai/DeepSeek-R1-0528": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/deepseek-ai/DeepSeek-V3": { + "input_cost_per_token": 2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/deepseek-ai/DeepSeek-V3-0324": { + "input_cost_per_token": 4e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/meta-llama/Llama-3.2-3B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/meta-llama/Llama-3.3-70B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/meta-llama/Meta-Llama-3-70B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/meta-llama/Meta-Llama-3.1-405B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/meta-llama/Meta-Llama-3.1-70B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/meta-llama/Meta-Llama-3.1-8B-Instruct": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "hyperbolic", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "hyperbolic/moonshotai/Kimi-K2-Instruct": { + "input_cost_per_token": 2e-06, + "litellm_provider": "hyperbolic", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "j2-light": { + "input_cost_per_token": 3e-06, + "litellm_provider": "ai21", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 3e-06 + }, + "j2-mid": { + "input_cost_per_token": 1e-05, + "litellm_provider": "ai21", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 1e-05 + }, + "j2-ultra": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "ai21", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 1.5e-05 + }, + "jamba-1.5": { + "input_cost_per_token": 2e-07, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "jamba-1.5-large": { + "input_cost_per_token": 2e-06, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_tool_choice": true + }, + "jamba-1.5-large@001": { + "input_cost_per_token": 2e-06, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_tool_choice": true + }, + "jamba-1.5-mini": { + "input_cost_per_token": 2e-07, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "jamba-1.5-mini@001": { + "input_cost_per_token": 2e-07, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "jamba-large-1.6": { + "input_cost_per_token": 2e-06, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_tool_choice": true + }, + "jamba-large-1.7": { + "input_cost_per_token": 2e-06, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_tool_choice": true + }, + "jamba-mini-1.6": { + "input_cost_per_token": 2e-07, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "jamba-mini-1.7": { + "input_cost_per_token": 2e-07, + "litellm_provider": "ai21", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "jina-reranker-v2-base-multilingual": { + "input_cost_per_token": 1.8e-08, + "litellm_provider": "jina_ai", + "max_document_chunks_per_query": 2048, + "max_input_tokens": 1024, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "rerank", + "output_cost_per_token": 1.8e-08 + }, + "lambda_ai/deepseek-llama3.3-70b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/deepseek-r1-0528": { + "input_cost_per_token": 2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/deepseek-r1-671b": { + "input_cost_per_token": 8e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 8e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/deepseek-v3-0324": { + "input_cost_per_token": 2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/hermes3-405b": { + "input_cost_per_token": 8e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 8e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/hermes3-70b": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/hermes3-8b": { + "input_cost_per_token": 2.5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-08, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/lfm-40b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/lfm-7b": { + "input_cost_per_token": 2.5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-08, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama-4-maverick-17b-128e-instruct-fp8": { + "input_cost_per_token": 5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 8192, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama-4-scout-17b-16e-instruct": { + "input_cost_per_token": 5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 16384, + "max_output_tokens": 8192, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama3.1-405b-instruct-fp8": { + "input_cost_per_token": 8e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 8e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama3.1-70b-instruct-fp8": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama3.1-8b-instruct": { + "input_cost_per_token": 2.5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-08, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama3.1-nemotron-70b-instruct-fp8": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama3.2-11b-vision-instruct": { + "input_cost_per_token": 1.5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-08, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "lambda_ai/llama3.2-3b-instruct": { + "input_cost_per_token": 1.5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-08, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/llama3.3-70b-instruct-fp8": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/qwen25-coder-32b-instruct": { + "input_cost_per_token": 5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "lambda_ai/qwen3-32b-fp8": { + "input_cost_per_token": 5e-08, + "litellm_provider": "lambda_ai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, + "low/1024-x-1024/gpt-image-1": { + "input_cost_per_pixel": 1.0490417e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "low/1024-x-1536/gpt-image-1": { + "input_cost_per_pixel": 1.0172526e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "low/1536-x-1024/gpt-image-1": { + "input_cost_per_pixel": 1.0172526e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "luminous-base": { + "input_cost_per_token": 3e-05, + "litellm_provider": "aleph_alpha", + "max_tokens": 2048, + "mode": "completion", + "output_cost_per_token": 3.3e-05 + }, + "luminous-base-control": { + "input_cost_per_token": 3.75e-05, + "litellm_provider": "aleph_alpha", + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 4.125e-05 + }, + "luminous-extended": { + "input_cost_per_token": 4.5e-05, + "litellm_provider": "aleph_alpha", + "max_tokens": 2048, + "mode": "completion", + "output_cost_per_token": 4.95e-05 + }, + "luminous-extended-control": { + "input_cost_per_token": 5.625e-05, + "litellm_provider": "aleph_alpha", + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 6.1875e-05 + }, + "luminous-supreme": { + "input_cost_per_token": 0.000175, + "litellm_provider": "aleph_alpha", + "max_tokens": 2048, + "mode": "completion", + "output_cost_per_token": 0.0001925 + }, + "luminous-supreme-control": { + "input_cost_per_token": 0.00021875, + "litellm_provider": "aleph_alpha", + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 0.000240625 + }, + "max-x-max/50-steps/stability.stable-diffusion-xl-v0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.036 + }, + "max-x-max/max-steps/stability.stable-diffusion-xl-v0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.072 + }, + "medium/1024-x-1024/gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "medium/1024-x-1536/gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "medium/1536-x-1024/gpt-image-1": { + "input_cost_per_pixel": 4.0054321e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "medlm-large": { + "input_cost_per_character": 5e-06, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "chat", + "output_cost_per_character": 1.5e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_tool_choice": true + }, + "medlm-medium": { + "input_cost_per_character": 5e-07, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 32768, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_character": 1e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models", + "supports_tool_choice": true + }, + "meta.llama2-13b-chat-v1": { + "input_cost_per_token": 7.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "meta.llama2-70b-chat-v1": { + "input_cost_per_token": 1.95e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.56e-06 + }, + "meta.llama3-1-405b-instruct-v1:0": { + "input_cost_per_token": 5.32e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.6e-05, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama3-1-70b-instruct-v1:0": { + "input_cost_per_token": 9.9e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 9.9e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama3-1-8b-instruct-v1:0": { + "input_cost_per_token": 2.2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2.2e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama3-2-11b-instruct-v1:0": { + "input_cost_per_token": 3.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3.5e-07, + "supports_function_calling": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "meta.llama3-2-1b-instruct-v1:0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama3-2-3b-instruct-v1:0": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama3-2-90b-instruct-v1:0": { + "input_cost_per_token": 2e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "meta.llama3-3-70b-instruct-v1:0": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.2e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama3-70b-instruct-v1:0": { + "input_cost_per_token": 2.65e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 3.5e-06 + }, + "meta.llama3-8b-instruct-v1:0": { + "input_cost_per_token": 3e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "meta.llama4-maverick-17b-instruct-v1:0": { + "input_cost_per_token": 2.4e-07, + "input_cost_per_token_batches": 1.2e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 9.7e-07, + "output_cost_per_token_batches": 4.85e-07, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta.llama4-scout-17b-instruct-v1:0": { + "input_cost_per_token": 1.7e-07, + "input_cost_per_token_batches": 8.5e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6.6e-07, + "output_cost_per_token_batches": 3.3e-07, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": false + }, + "meta_llama/Llama-3.3-70B-Instruct": { + "litellm_provider": "meta_llama", + "max_input_tokens": 128000, + "max_output_tokens": 4028, + "max_tokens": 128000, + "mode": "chat", + "source": "https://llama.developer.meta.com/docs/models", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "meta_llama/Llama-3.3-8B-Instruct": { + "litellm_provider": "meta_llama", + "max_input_tokens": 128000, + "max_output_tokens": 4028, + "max_tokens": 128000, + "mode": "chat", + "source": "https://llama.developer.meta.com/docs/models", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "meta_llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "litellm_provider": "meta_llama", + "max_input_tokens": 1000000, + "max_output_tokens": 4028, + "max_tokens": 128000, + "mode": "chat", + "source": "https://llama.developer.meta.com/docs/models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8": { + "litellm_provider": "meta_llama", + "max_input_tokens": 10000000, + "max_output_tokens": 4028, + "max_tokens": 128000, + "mode": "chat", + "source": "https://llama.developer.meta.com/docs/models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "mistral.mistral-7b-instruct-v0:2": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_tool_choice": true + }, + "mistral.mistral-large-2402-v1:0": { + "input_cost_per_token": 8e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_function_calling": true + }, + "mistral.mistral-large-2407-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 9e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "mistral.mistral-small-2402-v1:0": { + "input_cost_per_token": 1e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true + }, + "mistral.mixtral-8x7b-instruct-v0:1": { + "input_cost_per_token": 4.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 7e-07, + "supports_tool_choice": true + }, + "mistral/codestral-2405": { + "input_cost_per_token": 1e-06, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/codestral-latest": { + "input_cost_per_token": 1e-06, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/codestral-mamba-latest": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "mistral", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "source": "https://mistral.ai/technology/", + "supports_assistant_prefill": true, + "supports_tool_choice": true + }, + "mistral/devstral-medium-2507": { + "input_cost_per_token": 4e-07, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://mistral.ai/news/devstral", + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/devstral-small-2505": { + "input_cost_per_token": 1e-07, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://mistral.ai/news/devstral", + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/devstral-small-2507": { + "input_cost_per_token": 1e-07, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://mistral.ai/news/devstral", + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/magistral-medium-2506": { + "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/magistral-medium-latest": { + "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/magistral-small-2506": { + "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/magistral-small-latest": { + "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", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding" + }, + "mistral/mistral-large-2402": { + "input_cost_per_token": 4e-06, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 1.2e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-large-2407": { + "input_cost_per_token": 3e-06, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 9e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-large-2411": { + "input_cost_per_token": 2e-06, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-large-latest": { + "input_cost_per_token": 2e-06, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-medium": { + "input_cost_per_token": 2.7e-06, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 8.1e-06, + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-medium-2312": { + "input_cost_per_token": 2.7e-06, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 8.1e-06, + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-medium-2505": { + "input_cost_per_token": 4e-07, + "litellm_provider": "mistral", + "max_input_tokens": 131072, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-medium-latest": { + "input_cost_per_token": 4e-07, + "litellm_provider": "mistral", + "max_input_tokens": 131072, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-small": { + "input_cost_per_token": 1e-07, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-small-latest": { + "input_cost_per_token": 1e-07, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/mistral-tiny": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/open-codestral-mamba": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "mistral", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "source": "https://mistral.ai/technology/", + "supports_assistant_prefill": true, + "supports_tool_choice": true + }, + "mistral/open-mistral-7b": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/open-mistral-nemo": { + "input_cost_per_token": 3e-07, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://mistral.ai/technology/", + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/open-mistral-nemo-2407": { + "input_cost_per_token": 3e-07, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://mistral.ai/technology/", + "supports_assistant_prefill": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/open-mixtral-8x22b": { + "input_cost_per_token": 2e-06, + "litellm_provider": "mistral", + "max_input_tokens": 65336, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/open-mixtral-8x7b": { + "input_cost_per_token": 7e-07, + "litellm_provider": "mistral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 7e-07, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "mistral/pixtral-12b-2409": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "mistral/pixtral-large-2411": { + "input_cost_per_token": 2e-06, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "mistral/pixtral-large-latest": { + "input_cost_per_token": 2e-06, + "litellm_provider": "mistral", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/kimi-k2-0711-preview": { + "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 6e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://platform.moonshot.ai/docs/pricing/chat#generation-model-kimi-k2", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "moonshot/kimi-latest": { + "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/kimi-latest-128k": { + "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/kimi-latest-32k": { + "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 1e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/kimi-latest-8k": { + "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 2e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/kimi-thinking-preview": { + "input_cost_per_token": 3e-05, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-05, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_vision": true + }, + "moonshot/moonshot-v1-128k": { + "input_cost_per_token": 2e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "moonshot/moonshot-v1-128k-0430": { + "input_cost_per_token": 2e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "moonshot/moonshot-v1-128k-vision-preview": { + "input_cost_per_token": 2e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/moonshot-v1-32k": { + "input_cost_per_token": 1e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "moonshot/moonshot-v1-32k-0430": { + "input_cost_per_token": 1e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "moonshot/moonshot-v1-32k-vision-preview": { + "input_cost_per_token": 1e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/moonshot-v1-8k": { + "input_cost_per_token": 2e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "moonshot/moonshot-v1-8k-0430": { + "input_cost_per_token": 2e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "moonshot/moonshot-v1-8k-vision-preview": { + "input_cost_per_token": 2e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "moonshot/moonshot-v1-auto": { + "input_cost_per_token": 2e-06, + "litellm_provider": "moonshot", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://platform.moonshot.ai/docs/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "morph/morph-v3-fast": { + "input_cost_per_token": 8e-07, + "litellm_provider": "morph", + "max_input_tokens": 16000, + "max_output_tokens": 16000, + "max_tokens": 16000, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "supports_function_calling": false, + "supports_parallel_function_calling": false, + "supports_system_messages": true, + "supports_tool_choice": false, + "supports_vision": false + }, + "morph/morph-v3-large": { + "input_cost_per_token": 9e-07, + "litellm_provider": "morph", + "max_input_tokens": 16000, + "max_output_tokens": 16000, + "max_tokens": 16000, + "mode": "chat", + "output_cost_per_token": 1.9e-06, + "supports_function_calling": false, + "supports_parallel_function_calling": false, + "supports_system_messages": true, + "supports_tool_choice": false, + "supports_vision": false + }, + "multimodalembedding": { + "input_cost_per_character": 2e-07, + "input_cost_per_image": 0.0001, + "input_cost_per_token": 8e-07, + "input_cost_per_video_per_second": 0.0005, + "input_cost_per_video_per_second_above_15s_interval": 0.002, + "input_cost_per_video_per_second_above_8s_interval": 0.001, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 2048, + "max_tokens": 2048, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models", + "supported_endpoints": [ + "/v1/embeddings" + ], + "supported_modalities": [ + "text", + "image", + "video" + ] + }, + "multimodalembedding@001": { + "input_cost_per_character": 2e-07, + "input_cost_per_image": 0.0001, + "input_cost_per_token": 8e-07, + "input_cost_per_video_per_second": 0.0005, + "input_cost_per_video_per_second_above_15s_interval": 0.002, + "input_cost_per_video_per_second_above_8s_interval": 0.001, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 2048, + "max_tokens": 2048, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models", + "supported_endpoints": [ + "/v1/embeddings" + ], + "supported_modalities": [ + "text", + "image", + "video" + ] + }, + "nscale/Qwen/QwQ-32B": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "nscale", + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/Qwen/Qwen2.5-Coder-32B-Instruct": { + "input_cost_per_token": 6e-08, + "litellm_provider": "nscale", + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/Qwen/Qwen2.5-Coder-3B-Instruct": { + "input_cost_per_token": 1e-08, + "litellm_provider": "nscale", + "mode": "chat", + "output_cost_per_token": 3e-08, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/Qwen/Qwen2.5-Coder-7B-Instruct": { + "input_cost_per_token": 1e-08, + "litellm_provider": "nscale", + "mode": "chat", + "output_cost_per_token": 3e-08, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/black-forest-labs/FLUX.1-schnell": { + "input_cost_per_pixel": 1.3e-09, + "litellm_provider": "nscale", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#image-models", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "nscale/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { + "input_cost_per_token": 3.75e-07, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.75/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 3.75e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/deepseek-ai/DeepSeek-R1-Distill-Llama-8B": { + "input_cost_per_token": 2.5e-08, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.05/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 2.5e-08, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B": { + "input_cost_per_token": 9e-08, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.18/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 9e-08, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { + "input_cost_per_token": 7e-08, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.14/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 7e-08, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.30/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B": { + "input_cost_per_token": 2e-07, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.40/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/meta-llama/Llama-3.1-8B-Instruct": { + "input_cost_per_token": 3e-08, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.06/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 3e-08, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/meta-llama/Llama-3.3-70B-Instruct": { + "input_cost_per_token": 2e-07, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $0.40/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/meta-llama/Llama-4-Scout-17B-16E-Instruct": { + "input_cost_per_token": 9e-08, + "litellm_provider": "nscale", + "mode": "chat", + "output_cost_per_token": 2.9e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/mistralai/mixtral-8x22b-instruct-v0.1": { + "input_cost_per_token": 6e-07, + "litellm_provider": "nscale", + "metadata": { + "notes": "Pricing listed as $1.20/1M tokens total. Assumed 50/50 split for input/output." + }, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#chat-models" + }, + "nscale/stabilityai/stable-diffusion-xl-base-1.0": { + "input_cost_per_pixel": 3e-09, + "litellm_provider": "nscale", + "mode": "image_generation", + "output_cost_per_pixel": 0.0, + "source": "https://docs.nscale.com/docs/inference/serverless-models/current#image-models", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "o1": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o1-2024-12-17": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o1-mini": { + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_vision": true + }, + "o1-mini-2024-09-12": { + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 3e-06, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1.2e-05, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": true + }, + "o1-preview": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": true + }, + "o1-preview-2024-09-12": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openai", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_vision": true + }, + "o1-pro": { + "input_cost_per_token": 0.00015, + "input_cost_per_token_batches": 7.5e-05, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 0.0006, + "output_cost_per_token_batches": 0.0003, + "supported_endpoints": [ + "/v1/responses", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": false, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o1-pro-2025-03-19": { + "input_cost_per_token": 0.00015, + "input_cost_per_token_batches": 7.5e-05, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 0.0006, + "output_cost_per_token_batches": 0.0003, + "supported_endpoints": [ + "/v1/responses", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": false, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o3": { "cache_read_input_token_cost": 5e-07, - "cache_creation_input_token_cost": 0.0, - "litellm_provider": "vercel_ai_gateway", - "mode": "chat" - }, - "oci/meta.llama-4-maverick-17b-128e-instruct-fp8": { - "max_tokens": 512000, - "max_input_tokens": 512000, - "max_output_tokens": 4000, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "litellm_provider": "oci", + "input_cost_per_token": 2e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, "mode": "chat", + "output_cost_per_token": 8e-06, + "supported_endpoints": [ + "/v1/responses", + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, - "oci/meta.llama-4-scout-17b-16e-instruct": { - "max_tokens": 192000, - "max_input_tokens": 192000, - "max_output_tokens": 4000, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "litellm_provider": "oci", + "o3-2025-04-16": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, "mode": "chat", + "output_cost_per_token": 8e-06, + "supported_endpoints": [ + "/v1/responses", + "/v1/chat/completions", + "/v1/completions", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true }, - "oci/meta.llama-3.3-70b-instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4000, - "input_cost_per_token": 7.2e-07, - "output_cost_per_token": 7.2e-07, - "litellm_provider": "oci", - "mode": "chat", + "o3-deep-research": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_token": 1e-05, + "input_cost_per_token_batches": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 4e-05, + "output_cost_per_token_batches": 2e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true }, - "oci/meta.llama-3.2-90b-vision-instruct": { - "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 4000, - "input_cost_per_token": 2.0e-06, - "output_cost_per_token": 2.0e-06, - "litellm_provider": "oci", - "mode": "chat", + "o3-deep-research-2025-06-26": { + "cache_read_input_token_cost": 2.5e-06, + "input_cost_per_token": 1e-05, + "input_cost_per_token_batches": 5e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 4e-05, + "output_cost_per_token_batches": 2e-05, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o3-mini": { + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "o3-mini-2025-01-31": { + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "o3-pro": { + "input_cost_per_token": 2e-05, + "input_cost_per_token_batches": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 8e-05, + "output_cost_per_token_batches": 4e-05, + "supported_endpoints": [ + "/v1/responses", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o3-pro-2025-06-10": { + "input_cost_per_token": 2e-05, + "input_cost_per_token_batches": 1e-05, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 8e-05, + "output_cost_per_token_batches": 4e-05, + "supported_endpoints": [ + "/v1/responses", + "/v1/batch" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o4-mini": { + "cache_read_input_token_cost": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o4-mini-2025-04-16": { + "cache_read_input_token_cost": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o4-mini-deep-research": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 8e-06, + "output_cost_per_token_batches": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "o4-mini-deep-research-2025-06-26": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_batches": 1e-06, + "litellm_provider": "openai", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "responses", + "output_cost_per_token": 8e-06, + "output_cost_per_token_batches": 4e-06, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/batch", + "/v1/responses" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true }, "oci/meta.llama-3.1-405b-instruct": { - "max_tokens": 128000, + "input_cost_per_token": 1.068e-05, + "litellm_provider": "oci", "max_input_tokens": 128000, "max_output_tokens": 4000, - "input_cost_per_token": 1.068e-05, - "output_cost_per_token": 1.068e-05, - "litellm_provider": "oci", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" - }, - - "oci/xai.grok-4": { "max_tokens": 128000, - "max_input_tokens": 128000, - "max_output_tokens": 128000, - "input_cost_per_token": 3.0e-06, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "oci", "mode": "chat", + "output_cost_per_token": 1.068e-05, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_response_schema": false + }, + "oci/meta.llama-3.2-90b-vision-instruct": { + "input_cost_per_token": 2e-06, + "litellm_provider": "oci", + "max_input_tokens": 128000, + "max_output_tokens": 4000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false + }, + "oci/meta.llama-3.3-70b-instruct": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "oci", + "max_input_tokens": 128000, + "max_output_tokens": 4000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 7.2e-07, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false + }, + "oci/meta.llama-4-maverick-17b-128e-instruct-fp8": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "oci", + "max_input_tokens": 512000, + "max_output_tokens": 4000, + "max_tokens": 512000, + "mode": "chat", + "output_cost_per_token": 7.2e-07, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false + }, + "oci/meta.llama-4-scout-17b-16e-instruct": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "oci", + "max_input_tokens": 192000, + "max_output_tokens": 4000, + "max_tokens": 192000, + "mode": "chat", + "output_cost_per_token": 7.2e-07, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false }, "oci/xai.grok-3": { - "max_tokens": 131072, + "input_cost_per_token": 3e-06, + "litellm_provider": "oci", "max_input_tokens": 131072, "max_output_tokens": 131072, - "input_cost_per_token": 3.0e-06, + "max_tokens": 131072, + "mode": "chat", "output_cost_per_token": 1.5e-07, - "litellm_provider": "oci", - "mode": "chat", + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" - }, - "oci/xai.grok-3-mini": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 3.0e-07, - "output_cost_per_token": 5.0e-07, - "litellm_provider": "oci", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_response_schema": false }, "oci/xai.grok-3-fast": { - "max_tokens": 131072, + "input_cost_per_token": 5e-06, + "litellm_provider": "oci", "max_input_tokens": 131072, "max_output_tokens": 131072, - "input_cost_per_token": 5.0e-06, - "output_cost_per_token": 2.5e-05, - "litellm_provider": "oci", + "max_tokens": 131072, "mode": "chat", + "output_cost_per_token": 2.5e-05, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" + "supports_response_schema": false + }, + "oci/xai.grok-3-mini": { + "input_cost_per_token": 3e-07, + "litellm_provider": "oci", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-07, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false }, "oci/xai.grok-3-mini-fast": { - "max_tokens": 131072, + "input_cost_per_token": 6e-07, + "litellm_provider": "oci", "max_input_tokens": 131072, "max_output_tokens": 131072, - "input_cost_per_token": 6.0e-07, - "output_cost_per_token": 4.0e-06, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false + }, + "oci/xai.grok-4": { + "input_cost_per_token": 3e-06, "litellm_provider": "oci", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": false, - "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing" - }, - "aiml/flux/kontext-pro/text-to-image":{ - "output_cost_per_image": 0.042, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "Flux Pro v1.1 - Enhanced version with improved capabilities and 6x faster inference speed" - } - - }, - "aiml/flux/kontext-max/text-to-image": { - "output_cost_per_image": 0.084, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "Flux Pro v1.1 - Enhanced version with improved capabilities and 6x faster inference speed" - } - }, - "aiml/flux-pro/v1.1-ultra": { - "output_cost_per_image": 0.063, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "aiml/flux-pro/v1.1": { - "output_cost_per_image": 0.042, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ] - }, - "aiml/flux-realism": { - "output_cost_per_image": 0.037, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "Flux Pro - Professional-grade image generation model" - } - }, - "aiml/flux/schnell": { - "output_cost_per_image": 0.003, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "Flux Schnell - Fast generation model optimized for speed" - } - }, - "aiml/flux/dev": { - "output_cost_per_image": 0.026, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "Flux Dev - Development version optimized for experimentation" - } - }, - "aiml/flux-pro": { - "output_cost_per_image": 0.053, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "Flux Dev - Development version optimized for experimentation" - } - }, - "aiml/dall-e-3": { - "output_cost_per_image": 0.042, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "DALL-E 3 via AI/ML API - High-quality text-to-image generation" - } - }, - "aiml/dall-e-2": { - "output_cost_per_image": 0.021, - "litellm_provider": "aiml", - "mode": "image_generation", - "supported_endpoints": [ - "/v1/images/generations" - ], - "source": "https://docs.aimlapi.com/", - "metadata": { - "notes": "DALL-E 2 via AI/ML API - Reliable text-to-image generation" - } - }, - "doubao-embedding-large": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "output_vector_size": 2048, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "volcengine", - "mode": "embedding", - "metadata": { - "notes": "Volcengine Doubao embedding model - large version with 2048 dimensions" - } - }, - "doubao-embedding-large-text-250515": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "output_vector_size": 2048, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "volcengine", - "mode": "embedding", - "metadata": { - "notes": "Volcengine Doubao embedding model - text-250515 version with 2048 dimensions" - } - }, - "doubao-embedding-large-text-240915": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "output_vector_size": 4096, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "volcengine", - "mode": "embedding", - "metadata": { - "notes": "Volcengine Doubao embedding model - text-240915 version with 4096 dimensions" - } - }, - "doubao-embedding": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "output_vector_size": 2560, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "volcengine", - "mode": "embedding", - "metadata": { - "notes": "Volcengine Doubao embedding model - standard version with 2560 dimensions" - } - }, - "doubao-embedding-text-240715": { - "max_tokens": 4096, - "max_input_tokens": 4096, - "output_vector_size": 2560, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "volcengine", - "mode": "embedding", - "metadata": { - "notes": "Volcengine Doubao embedding model - text-240715 version with 2560 dimensions" - } - }, - "ovhcloud/Qwen2.5-VL-72B-Instruct": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 9.1e-07, - "output_cost_per_token": 9.1e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false, - "supports_vision": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/qwen2-5-vl-72b-instruct" - }, - "ovhcloud/llava-v1.6-mistral-7b-hf": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 2.9e-07, - "output_cost_per_token": 2.9e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false, - "supports_vision": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/llava-next-mistral-7b" - }, - "ovhcloud/gpt-oss-120b": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 4e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false, - "supports_reasoning": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/gpt-oss-120b" - }, - "ovhcloud/Meta-Llama-3_3-70B-Instruct": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 6.7e-07, - "output_cost_per_token": 6.7e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/meta-llama-3-3-70b-instruct" - }, - "ovhcloud/Qwen2.5-Coder-32B-Instruct": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 8.7e-07, - "output_cost_per_token": 8.7e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false, - "source": "https://endpoints.ai.cloud.ovh.net/models/qwen2-5-coder-32b-instruct" - }, - "ovhcloud/Mixtral-8x7B-Instruct-v0.1": { - "max_tokens": 32000, - "max_input_tokens": 32000, - "max_output_tokens": 32000, - "input_cost_per_token": 6.3e-07, - "output_cost_per_token": 6.3e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false, - "source": "https://endpoints.ai.cloud.ovh.net/models/mixtral-8x7b-instruct-v0-1" - }, - "ovhcloud/Meta-Llama-3_1-70B-Instruct": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 6.7e-07, - "output_cost_per_token": 6.7e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": false, - "supports_tool_choice": false, - "source": "https://endpoints.ai.cloud.ovh.net/models/meta-llama-3-1-70b-instruct" - }, - "ovhcloud/Mistral-Small-3.2-24B-Instruct-2506": { - "max_tokens": 128000, "max_input_tokens": 128000, "max_output_tokens": 128000, - "input_cost_per_token": 9e-08, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://www.oracle.com/artificial-intelligence/generative-ai/generative-ai-service/pricing", + "supports_function_calling": true, + "supports_response_schema": false + }, + "ollama/codegeex4": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 32768, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": false + }, + "ollama/codegemma": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "ollama/codellama": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "ollama/deepseek-coder-v2-base": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/deepseek-coder-v2-instruct": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 32768, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/deepseek-coder-v2-lite-base": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/deepseek-coder-v2-lite-instruct": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 32768, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/internlm2_5-20b-chat": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 32768, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/llama2": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/llama2-uncensored": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "ollama/llama2:13b": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/llama2:70b": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/llama2:7b": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/llama3": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/llama3.1": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/llama3:70b": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/llama3:8b": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "ollama/mistral": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "completion", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/mistral-7B-Instruct-v0.1": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/mistral-7B-Instruct-v0.2": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/mistral-large-instruct-2407": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/mixtral-8x22B-Instruct-v0.1": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 65536, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/mixtral-8x7B-Instruct-v0.1": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_function_calling": true + }, + "ollama/orca-mini": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "ollama/vicuna": { + "input_cost_per_token": 0.0, + "litellm_provider": "ollama", + "max_input_tokens": 2048, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "omni-moderation-2024-09-26": { + "input_cost_per_token": 0.0, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 0, + "max_tokens": 32768, + "mode": "moderation", + "output_cost_per_token": 0.0 + }, + "omni-moderation-latest": { + "input_cost_per_token": 0.0, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 0, + "max_tokens": 32768, + "mode": "moderation", + "output_cost_per_token": 0.0 + }, + "omni-moderation-latest-intents": { + "input_cost_per_token": 0.0, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 0, + "max_tokens": 32768, + "mode": "moderation", + "output_cost_per_token": 0.0 + }, + "openai.gpt-oss-120b-1:0": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "openai.gpt-oss-20b-1:0": { + "input_cost_per_token": 7e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "openrouter/anthropic/claude-2": { + "input_cost_per_token": 1.102e-05, + "litellm_provider": "openrouter", + "max_output_tokens": 8191, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 3.268e-05, + "supports_tool_choice": true + }, + "openrouter/anthropic/claude-3-5-haiku": { + "input_cost_per_token": 1e-06, + "litellm_provider": "openrouter", + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 5e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "openrouter/anthropic/claude-3-5-haiku-20241022": { + "input_cost_per_token": 1e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5e-06, + "supports_function_calling": true, + "supports_tool_choice": true, + "tool_use_system_prompt_tokens": 264 + }, + "openrouter/anthropic/claude-3-haiku": { + "input_cost_per_image": 0.0004, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "openrouter", + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/anthropic/claude-3-haiku-20240307": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 264 + }, + "openrouter/anthropic/claude-3-opus": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 395 + }, + "openrouter/anthropic/claude-3-sonnet": { + "input_cost_per_image": 0.0048, + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/anthropic/claude-3.5-sonnet": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/anthropic/claude-3.5-sonnet:beta": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/anthropic/claude-3.7-sonnet": { + "input_cost_per_image": 0.0048, + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/anthropic/claude-3.7-sonnet:beta": { + "input_cost_per_image": 0.0048, + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/anthropic/claude-instant-v1": { + "input_cost_per_token": 1.63e-06, + "litellm_provider": "openrouter", + "max_output_tokens": 8191, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 5.51e-06, + "supports_tool_choice": true + }, + "openrouter/anthropic/claude-opus-4": { + "input_cost_per_image": 0.0048, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/anthropic/claude-opus-4.1": { + "input_cost_per_image": 0.0048, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/anthropic/claude-sonnet-4": { + "input_cost_per_image": 0.0048, + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "openrouter/bytedance/ui-tars-1.5-7b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 131072, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://openrouter.ai/api/v1/models/bytedance/ui-tars-1.5-7b", + "supports_tool_choice": true + }, + "openrouter/cognitivecomputations/dolphin-mixtral-8x7b": { + "input_cost_per_token": 5e-07, + "litellm_provider": "openrouter", + "max_tokens": 32769, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_tool_choice": true + }, + "openrouter/cohere/command-r-plus": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_tool_choice": true + }, + "openrouter/databricks/dbrx-instruct": { + "input_cost_per_token": 6e-07, + "litellm_provider": "openrouter", + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_tool_choice": true + }, + "openrouter/deepseek/deepseek-chat": { + "input_cost_per_token": 1.4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", "output_cost_per_token": 2.8e-07, + "supports_prompt_caching": true, + "supports_tool_choice": true + }, + "openrouter/deepseek/deepseek-chat-v3-0324": { + "input_cost_per_token": 1.4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.8e-07, + "supports_prompt_caching": true, + "supports_tool_choice": true + }, + "openrouter/deepseek/deepseek-chat-v3.1": { + "input_cost_per_token": 2e-07, + "input_cost_per_token_cache_hit": 2e-08, + "litellm_provider": "openrouter", + "max_input_tokens": 163840, + "max_output_tokens": 163840, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 8e-07, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "openrouter/deepseek/deepseek-coder": { + "input_cost_per_token": 1.4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 66000, + "max_output_tokens": 4096, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.8e-07, + "supports_prompt_caching": true, + "supports_tool_choice": true + }, + "openrouter/deepseek/deepseek-r1": { + "input_cost_per_token": 5.5e-07, + "input_cost_per_token_cache_hit": 1.4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 65336, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.19e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "openrouter/deepseek/deepseek-r1-0528": { + "input_cost_per_token": 5e-07, + "input_cost_per_token_cache_hit": 1.4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 65336, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.15e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "openrouter/fireworks/firellava-13b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "openrouter", + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_tool_choice": true + }, + "openrouter/google/gemini-2.0-flash-001": { + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1e-07, + "litellm_provider": "openrouter", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/google/gemini-2.5-flash": { + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 3e-07, + "litellm_provider": "openrouter", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/google/gemini-2.5-pro": { + "input_cost_per_audio_token": 7e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openrouter", + "max_audio_length_hours": 8.4, + "max_audio_per_prompt": 1, + "max_images_per_prompt": 3000, + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_pdf_size_mb": 30, + "max_tokens": 8192, + "max_video_length": 1, + "max_videos_per_prompt": 10, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/google/gemini-pro-1.5": { + "input_cost_per_image": 0.00265, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 1000000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.5e-06, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/google/gemini-pro-vision": { + "input_cost_per_image": 0.0025, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "openrouter", + "max_tokens": 45875, + "mode": "chat", + "output_cost_per_token": 3.75e-07, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/google/palm-2-chat-bison": { + "input_cost_per_token": 5e-07, + "litellm_provider": "openrouter", + "max_tokens": 25804, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_tool_choice": true + }, + "openrouter/google/palm-2-codechat-bison": { + "input_cost_per_token": 5e-07, + "litellm_provider": "openrouter", + "max_tokens": 20070, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_tool_choice": true + }, + "openrouter/gryphe/mythomax-l2-13b": { + "input_cost_per_token": 1.875e-06, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.875e-06, + "supports_tool_choice": true + }, + "openrouter/jondurbin/airoboros-l2-70b-2.1": { + "input_cost_per_token": 1.3875e-05, + "litellm_provider": "openrouter", + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.3875e-05, + "supports_tool_choice": true + }, + "openrouter/mancer/weaver": { + "input_cost_per_token": 5.625e-06, + "litellm_provider": "openrouter", + "max_tokens": 8000, + "mode": "chat", + "output_cost_per_token": 5.625e-06, + "supports_tool_choice": true + }, + "openrouter/meta-llama/codellama-34b-instruct": { + "input_cost_per_token": 5e-07, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_tool_choice": true + }, + "openrouter/meta-llama/llama-2-13b-chat": { + "input_cost_per_token": 2e-07, + "litellm_provider": "openrouter", + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_tool_choice": true + }, + "openrouter/meta-llama/llama-2-70b-chat": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "openrouter", + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "supports_tool_choice": true + }, + "openrouter/meta-llama/llama-3-70b-instruct": { + "input_cost_per_token": 5.9e-07, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.9e-07, + "supports_tool_choice": true + }, + "openrouter/meta-llama/llama-3-70b-instruct:nitro": { + "input_cost_per_token": 9e-07, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 9e-07, + "supports_tool_choice": true + }, + "openrouter/meta-llama/llama-3-8b-instruct:extended": { + "input_cost_per_token": 2.25e-07, + "litellm_provider": "openrouter", + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 2.25e-06, + "supports_tool_choice": true + }, + "openrouter/meta-llama/llama-3-8b-instruct:free": { + "input_cost_per_token": 0.0, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_tool_choice": true + }, + "openrouter/microsoft/wizardlm-2-8x22b:nitro": { + "input_cost_per_token": 1e-06, + "litellm_provider": "openrouter", + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1e-06, + "supports_tool_choice": true + }, + "openrouter/mistralai/mistral-7b-instruct": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.3e-07, + "supports_tool_choice": true + }, + "openrouter/mistralai/mistral-7b-instruct:free": { + "input_cost_per_token": 0.0, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0, + "supports_tool_choice": true + }, + "openrouter/mistralai/mistral-large": { + "input_cost_per_token": 8e-06, + "litellm_provider": "openrouter", + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 2.4e-05, + "supports_tool_choice": true + }, + "openrouter/mistralai/mistral-small-3.1-24b-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "openrouter", + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_tool_choice": true + }, + "openrouter/mistralai/mistral-small-3.2-24b-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "openrouter", + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 3e-07, + "supports_tool_choice": true + }, + "openrouter/mistralai/mixtral-8x22b-instruct": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "openrouter", + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 6.5e-07, + "supports_tool_choice": true + }, + "openrouter/nousresearch/nous-hermes-llama2-13b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "openrouter", + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2e-07, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-3.5-turbo": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "openrouter", + "max_tokens": 4095, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-3.5-turbo-16k": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_tokens": 16383, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-4": { + "input_cost_per_token": 3e-05, + "litellm_provider": "openrouter", + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-4-vision-preview": { + "input_cost_per_image": 0.01445, + "input_cost_per_token": 1e-05, + "litellm_provider": "openrouter", + "max_tokens": 130000, + "mode": "chat", + "output_cost_per_token": 3e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4.1": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4.1-2025-04-14": { + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4.1-mini": { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4.1-mini-2025-04-14": { + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.6e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4.1-nano": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4.1-nano-2025-04-14": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4o": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-4o-2024-05-13": { + "input_cost_per_token": 5e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/gpt-5-chat": { + "cache_read_input_token_cost": 1.25e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_reasoning": true, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-5-mini": { + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_reasoning": true, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-5-nano": { + "cache_read_input_token_cost": 5e-09, + "input_cost_per_token": 5e-08, + "litellm_provider": "openrouter", + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_reasoning": true, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-oss-120b": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 131072, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-07, + "source": "https://openrouter.ai/openai/gpt-oss-120b", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "openrouter/openai/gpt-oss-20b": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 131072, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 8e-07, + "source": "https://openrouter.ai/openai/gpt-oss-20b", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "openrouter/openai/o1": { + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openrouter", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 100000, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "openrouter/openai/o1-mini": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1.2e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "openrouter/openai/o1-mini-2024-09-12": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1.2e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "openrouter/openai/o1-preview": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "openrouter/openai/o1-preview-2024-09-12": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "openrouter/openai/o3-mini": { + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "openrouter/openai/o3-mini-high": { + "input_cost_per_token": 1.1e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 128000, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "openrouter/pygmalionai/mythalion-13b": { + "input_cost_per_token": 1.875e-06, + "litellm_provider": "openrouter", + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.875e-06, + "supports_tool_choice": true + }, + "openrouter/qwen/qwen-2.5-coder-32b-instruct": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 33792, + "max_output_tokens": 33792, + "max_tokens": 33792, + "mode": "chat", + "output_cost_per_token": 1.8e-07, + "supports_tool_choice": true + }, + "openrouter/qwen/qwen-vl-plus": { + "input_cost_per_token": 2.1e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 8192, + "max_output_tokens": 2048, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 6.3e-07, + "supports_tool_choice": true + }, + "openrouter/qwen/qwen3-coder": { + "input_cost_per_token": 1e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 5e-06, + "source": "https://openrouter.ai/qwen/qwen3-coder", + "supports_tool_choice": true + }, + "openrouter/switchpoint/router": { + "input_cost_per_token": 8.5e-07, + "litellm_provider": "openrouter", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3.4e-06, + "source": "https://openrouter.ai/switchpoint/router", + "supports_tool_choice": true + }, + "openrouter/undi95/remm-slerp-l2-13b": { + "input_cost_per_token": 1.875e-06, + "litellm_provider": "openrouter", + "max_tokens": 6144, + "mode": "chat", + "output_cost_per_token": 1.875e-06, + "supports_tool_choice": true + }, + "openrouter/x-ai/grok-4": { + "input_cost_per_token": 3e-06, + "litellm_provider": "openrouter", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://openrouter.ai/x-ai/grok-4", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "ovhcloud/DeepSeek-R1-Distill-Llama-70B": { + "input_cost_per_token": 6.7e-07, "litellm_provider": "ovhcloud", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 6.7e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/deepseek-r1-distill-llama-70b", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "ovhcloud/Llama-3.1-8B-Instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 1e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/llama-3-1-8b-instruct", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "ovhcloud/Meta-Llama-3_1-70B-Instruct": { + "input_cost_per_token": 6.7e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 6.7e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/meta-llama-3-1-70b-instruct", + "supports_function_calling": false, + "supports_response_schema": false, + "supports_tool_choice": false + }, + "ovhcloud/Meta-Llama-3_3-70B-Instruct": { + "input_cost_per_token": 6.7e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 6.7e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/meta-llama-3-3-70b-instruct", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "ovhcloud/Mistral-7B-Instruct-v0.3": { + "input_cost_per_token": 1e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 127000, + "max_output_tokens": 127000, + "max_tokens": 127000, + "mode": "chat", + "output_cost_per_token": 1e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/mistral-7b-instruct-v0-3", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "ovhcloud/Mistral-Nemo-Instruct-2407": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 118000, + "max_output_tokens": 118000, + "max_tokens": 118000, + "mode": "chat", + "output_cost_per_token": 1.3e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/mistral-nemo-instruct-2407", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "ovhcloud/Mistral-Small-3.2-24B-Instruct-2506": { + "input_cost_per_token": 9e-08, + "litellm_provider": "ovhcloud", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2.8e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/mistral-small-3-2-24b-instruct-2506", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "ovhcloud/Mixtral-8x7B-Instruct-v0.1": { + "input_cost_per_token": 6.3e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 6.3e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/mixtral-8x7b-instruct-v0-1", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "ovhcloud/Qwen2.5-Coder-32B-Instruct": { + "input_cost_per_token": 8.7e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 8.7e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/qwen2-5-coder-32b-instruct", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "ovhcloud/Qwen2.5-VL-72B-Instruct": { + "input_cost_per_token": 9.1e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 9.1e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/qwen2-5-vl-72b-instruct", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "ovhcloud/Qwen3-32B": { + "input_cost_per_token": 8e-08, + "litellm_provider": "ovhcloud", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 2.3e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/qwen3-32b", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "ovhcloud/gpt-oss-120b": { + "input_cost_per_token": 8e-08, + "litellm_provider": "ovhcloud", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/gpt-oss-120b", + "supports_function_calling": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "ovhcloud/gpt-oss-20b": { + "input_cost_per_token": 4e-08, + "litellm_provider": "ovhcloud", + "max_input_tokens": 131000, + "max_output_tokens": 131000, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/gpt-oss-20b", + "supports_function_calling": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "ovhcloud/llava-v1.6-mistral-7b-hf": { + "input_cost_per_token": 2.9e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 2.9e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/llava-next-mistral-7b", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "ovhcloud/mamba-codestral-7B-v0.1": { + "input_cost_per_token": 1.9e-07, + "litellm_provider": "ovhcloud", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.9e-07, + "source": "https://endpoints.ai.cloud.ovh.net/models/mamba-codestral-7b-v0-1", + "supports_function_calling": false, + "supports_response_schema": true, + "supports_tool_choice": false + }, + "palm/chat-bison": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "palm", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "palm/chat-bison-001": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "palm", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "palm/text-bison": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "palm", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "palm/text-bison-001": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "palm", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "palm/text-bison-safety-off": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "palm", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "palm/text-bison-safety-recitation-off": { + "input_cost_per_token": 1.25e-07, + "litellm_provider": "palm", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "perplexity/codellama-34b-instruct": { + "input_cost_per_token": 3.5e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.4e-06 + }, + "perplexity/codellama-70b-instruct": { + "input_cost_per_token": 7e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 2.8e-06 + }, + "perplexity/llama-2-70b-chat": { + "input_cost_per_token": 7e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-06 + }, + "perplexity/llama-3.1-70b-instruct": { + "input_cost_per_token": 1e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "perplexity/llama-3.1-8b-instruct": { + "input_cost_per_token": 2e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-07 + }, + "perplexity/llama-3.1-sonar-huge-128k-online": { + "deprecation_date": "2025-02-22", + "input_cost_per_token": 5e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 127072, + "max_output_tokens": 127072, + "max_tokens": 127072, + "mode": "chat", + "output_cost_per_token": 5e-06 + }, + "perplexity/llama-3.1-sonar-large-128k-chat": { + "deprecation_date": "2025-02-22", + "input_cost_per_token": 1e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "perplexity/llama-3.1-sonar-large-128k-online": { + "deprecation_date": "2025-02-22", + "input_cost_per_token": 1e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 127072, + "max_output_tokens": 127072, + "max_tokens": 127072, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "perplexity/llama-3.1-sonar-small-128k-chat": { + "deprecation_date": "2025-02-22", + "input_cost_per_token": 2e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2e-07 + }, + "perplexity/llama-3.1-sonar-small-128k-online": { + "deprecation_date": "2025-02-22", + "input_cost_per_token": 2e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 127072, + "max_output_tokens": 127072, + "max_tokens": 127072, + "mode": "chat", + "output_cost_per_token": 2e-07 + }, + "perplexity/mistral-7b-instruct": { + "input_cost_per_token": 7e-08, + "litellm_provider": "perplexity", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "perplexity/mixtral-8x7b-instruct": { + "input_cost_per_token": 7e-08, + "litellm_provider": "perplexity", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "perplexity/pplx-70b-chat": { + "input_cost_per_token": 7e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-06 + }, + "perplexity/pplx-70b-online": { + "input_cost_per_request": 0.005, + "input_cost_per_token": 0.0, + "litellm_provider": "perplexity", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-06 + }, + "perplexity/pplx-7b-chat": { + "input_cost_per_token": 7e-08, + "litellm_provider": "perplexity", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "perplexity/pplx-7b-online": { + "input_cost_per_request": 0.005, + "input_cost_per_token": 0.0, + "litellm_provider": "perplexity", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "perplexity/sonar": { + "input_cost_per_token": 1e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.012, + "search_context_size_low": 0.005, + "search_context_size_medium": 0.008 + }, + "supports_web_search": true + }, + "perplexity/sonar-deep-research": { + "citation_cost_per_token": 2e-06, + "input_cost_per_token": 2e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_reasoning_token": 3e-06, + "output_cost_per_token": 8e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.005, + "search_context_size_low": 0.005, + "search_context_size_medium": 0.005 + }, + "supports_reasoning": true, + "supports_web_search": true + }, + "perplexity/sonar-medium-chat": { + "input_cost_per_token": 6e-07, + "litellm_provider": "perplexity", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1.8e-06 + }, + "perplexity/sonar-medium-online": { + "input_cost_per_request": 0.005, + "input_cost_per_token": 0, + "litellm_provider": "perplexity", + "max_input_tokens": 12000, + "max_output_tokens": 12000, + "max_tokens": 12000, + "mode": "chat", + "output_cost_per_token": 1.8e-06 + }, + "perplexity/sonar-pro": { + "input_cost_per_token": 3e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 200000, + "max_output_tokens": 8000, + "max_tokens": 8000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.014, + "search_context_size_low": 0.006, + "search_context_size_medium": 0.01 + }, + "supports_web_search": true + }, + "perplexity/sonar-reasoning": { + "input_cost_per_token": 1e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 5e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.014, + "search_context_size_low": 0.005, + "search_context_size_medium": 0.008 + }, + "supports_reasoning": true, + "supports_web_search": true + }, + "perplexity/sonar-reasoning-pro": { + "input_cost_per_token": 2e-06, + "litellm_provider": "perplexity", + "max_input_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "search_context_cost_per_query": { + "search_context_size_high": 0.014, + "search_context_size_low": 0.006, + "search_context_size_medium": 0.01 + }, + "supports_reasoning": true, + "supports_web_search": true + }, + "perplexity/sonar-small-chat": { + "input_cost_per_token": 7e-08, + "litellm_provider": "perplexity", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "perplexity/sonar-small-online": { + "input_cost_per_request": 0.005, + "input_cost_per_token": 0, + "litellm_provider": "perplexity", + "max_input_tokens": 12000, + "max_output_tokens": 12000, + "max_tokens": 12000, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "recraft/recraftv2": { + "litellm_provider": "recraft", + "mode": "image_generation", + "output_cost_per_image": 0.022, + "source": "https://www.recraft.ai/docs#pricing", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "recraft/recraftv3": { + "litellm_provider": "recraft", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://www.recraft.ai/docs#pricing", + "supported_endpoints": [ + "/v1/images/generations" + ] + }, + "replicate/meta/llama-2-13b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_tool_choice": true + }, + "replicate/meta/llama-2-13b-chat": { + "input_cost_per_token": 1e-07, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5e-07, + "supports_tool_choice": true + }, + "replicate/meta/llama-2-70b": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.75e-06, + "supports_tool_choice": true + }, + "replicate/meta/llama-2-70b-chat": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.75e-06, + "supports_tool_choice": true + }, + "replicate/meta/llama-2-7b": { + "input_cost_per_token": 5e-08, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_tool_choice": true + }, + "replicate/meta/llama-2-7b-chat": { + "input_cost_per_token": 5e-08, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_tool_choice": true + }, + "replicate/meta/llama-3-70b": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "replicate", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.75e-06, + "supports_tool_choice": true + }, + "replicate/meta/llama-3-70b-instruct": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "replicate", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2.75e-06, + "supports_tool_choice": true + }, + "replicate/meta/llama-3-8b": { + "input_cost_per_token": 5e-08, + "litellm_provider": "replicate", + "max_input_tokens": 8086, + "max_output_tokens": 8086, + "max_tokens": 8086, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_tool_choice": true + }, + "replicate/meta/llama-3-8b-instruct": { + "input_cost_per_token": 5e-08, + "litellm_provider": "replicate", + "max_input_tokens": 8086, + "max_output_tokens": 8086, + "max_tokens": 8086, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_tool_choice": true + }, + "replicate/mistralai/mistral-7b-instruct-v0.2": { + "input_cost_per_token": 5e-08, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_tool_choice": true + }, + "replicate/mistralai/mistral-7b-v0.1": { + "input_cost_per_token": 5e-08, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 2.5e-07, + "supports_tool_choice": true + }, + "replicate/mistralai/mixtral-8x7b-instruct-v0.1": { + "input_cost_per_token": 3e-07, + "litellm_provider": "replicate", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1e-06, + "supports_tool_choice": true + }, + "rerank-english-v2.0": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "rerank-english-v3.0": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "rerank-multilingual-v2.0": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "rerank-multilingual-v3.0": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "rerank-v3.5": { + "input_cost_per_query": 0.002, + "input_cost_per_token": 0.0, + "litellm_provider": "cohere", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_query_tokens": 2048, + "max_tokens": 4096, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "sagemaker/meta-textgeneration-llama-2-13b": { + "input_cost_per_token": 0.0, + "litellm_provider": "sagemaker", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "sagemaker/meta-textgeneration-llama-2-13b-f": { + "input_cost_per_token": 0.0, + "litellm_provider": "sagemaker", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "sagemaker/meta-textgeneration-llama-2-70b": { + "input_cost_per_token": 0.0, + "litellm_provider": "sagemaker", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "sagemaker/meta-textgeneration-llama-2-70b-b-f": { + "input_cost_per_token": 0.0, + "litellm_provider": "sagemaker", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "sagemaker/meta-textgeneration-llama-2-7b": { + "input_cost_per_token": 0.0, + "litellm_provider": "sagemaker", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "completion", + "output_cost_per_token": 0.0 + }, + "sagemaker/meta-textgeneration-llama-2-7b-f": { + "input_cost_per_token": 0.0, + "litellm_provider": "sagemaker", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "sambanova/DeepSeek-R1": { + "input_cost_per_token": 5e-06, + "litellm_provider": "sambanova", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 7e-06, + "source": "https://cloud.sambanova.ai/plans/pricing" + }, + "sambanova/DeepSeek-R1-Distill-Llama-70B": { + "input_cost_per_token": 7e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.4e-06, + "source": "https://cloud.sambanova.ai/plans/pricing" + }, + "sambanova/DeepSeek-V3-0324": { + "input_cost_per_token": 3e-06, + "litellm_provider": "sambanova", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4.5e-06, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "sambanova/Llama-4-Maverick-17B-128E-Instruct": { + "input_cost_per_token": 6.3e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "metadata": { + "notes": "For vision models, images are converted to 6432 input tokens and are billed at that amount" + }, + "mode": "chat", + "output_cost_per_token": 1.8e-06, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "sambanova/Llama-4-Scout-17B-16E-Instruct": { + "input_cost_per_token": 4e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "metadata": { + "notes": "For vision models, images are converted to 6432 input tokens and are billed at that amount" + }, + "mode": "chat", + "output_cost_per_token": 7e-07, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "sambanova/Meta-Llama-3.1-405B-Instruct": { + "input_cost_per_token": 5e-06, + "litellm_provider": "sambanova", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-05, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "sambanova/Meta-Llama-3.1-8B-Instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "sambanova/Meta-Llama-3.2-1B-Instruct": { + "input_cost_per_token": 4e-08, + "litellm_provider": "sambanova", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 8e-08, + "source": "https://cloud.sambanova.ai/plans/pricing" + }, + "sambanova/Meta-Llama-3.2-3B-Instruct": { + "input_cost_per_token": 8e-08, + "litellm_provider": "sambanova", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.6e-07, + "source": "https://cloud.sambanova.ai/plans/pricing" + }, + "sambanova/Meta-Llama-3.3-70B-Instruct": { + "input_cost_per_token": 6e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "sambanova/Meta-Llama-Guard-3-8B": { + "input_cost_per_token": 3e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://cloud.sambanova.ai/plans/pricing" + }, + "sambanova/QwQ-32B": { + "input_cost_per_token": 5e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 16384, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-06, + "source": "https://cloud.sambanova.ai/plans/pricing" + }, + "sambanova/Qwen2-Audio-7B-Instruct": { + "input_cost_per_token": 5e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 4096, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 0.0001, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_audio_input": true + }, + "sambanova/Qwen3-32B": { + "input_cost_per_token": 4e-07, + "litellm_provider": "sambanova", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 8e-07, + "source": "https://cloud.sambanova.ai/plans/pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "sample_spec": { + "code_interpreter_cost_per_session": 0.0, + "computer_use_input_cost_per_1k_tokens": 0.0, + "computer_use_output_cost_per_1k_tokens": 0.0, + "deprecation_date": "date when the model becomes deprecated in the format YYYY-MM-DD", + "file_search_cost_per_1k_calls": 0.0, + "file_search_cost_per_gb_per_day": 0.0, + "input_cost_per_audio_token": 0.0, + "input_cost_per_token": 0.0, + "litellm_provider": "one of https://docs.litellm.ai/docs/providers", + "max_input_tokens": "max input tokens, if the provider specifies it. if not default to max_tokens", + "max_output_tokens": "max output tokens, if the provider specifies it. if not default to max_tokens", + "max_tokens": "LEGACY parameter. set to max_output_tokens if provider specifies it. IF not set to max_input_tokens, if provider specifies it.", + "mode": "one of: chat, embedding, completion, image_generation, audio_transcription, audio_speech, image_generation, moderation, rerank", + "output_cost_per_reasoning_token": 0.0, + "output_cost_per_token": 0.0, + "search_context_cost_per_query": { + "search_context_size_high": 0.0, + "search_context_size_low": 0.0, + "search_context_size_medium": 0.0 + }, + "supported_regions": [ + "global", + "us-west-2", + "eu-west-1", + "ap-southeast-1", + "ap-northeast-1" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_vision": true, + "supports_web_search": true, + "vector_store_cost_per_gb_per_day": 0.0 + }, + "snowflake/claude-3-5-sonnet": { + "litellm_provider": "snowflake", + "max_input_tokens": 18000, + "max_output_tokens": 8192, + "max_tokens": 18000, + "mode": "chat", + "supports_computer_use": true + }, + "snowflake/deepseek-r1": { + "litellm_provider": "snowflake", + "max_input_tokens": 32768, + "max_output_tokens": 8192, + "max_tokens": 32768, + "mode": "chat", + "supports_reasoning": true + }, + "snowflake/gemma-7b": { + "litellm_provider": "snowflake", + "max_input_tokens": 8000, + "max_output_tokens": 8192, + "max_tokens": 8000, + "mode": "chat" + }, + "snowflake/jamba-1.5-large": { + "litellm_provider": "snowflake", + "max_input_tokens": 256000, + "max_output_tokens": 8192, + "max_tokens": 256000, + "mode": "chat" + }, + "snowflake/jamba-1.5-mini": { + "litellm_provider": "snowflake", + "max_input_tokens": 256000, + "max_output_tokens": 8192, + "max_tokens": 256000, + "mode": "chat" + }, + "snowflake/jamba-instruct": { + "litellm_provider": "snowflake", + "max_input_tokens": 256000, + "max_output_tokens": 8192, + "max_tokens": 256000, + "mode": "chat" + }, + "snowflake/llama2-70b-chat": { + "litellm_provider": "snowflake", + "max_input_tokens": 4096, + "max_output_tokens": 8192, + "max_tokens": 4096, + "mode": "chat" + }, + "snowflake/llama3-70b": { + "litellm_provider": "snowflake", + "max_input_tokens": 8000, + "max_output_tokens": 8192, + "max_tokens": 8000, + "mode": "chat" + }, + "snowflake/llama3-8b": { + "litellm_provider": "snowflake", + "max_input_tokens": 8000, + "max_output_tokens": 8192, + "max_tokens": 8000, + "mode": "chat" + }, + "snowflake/llama3.1-405b": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/llama3.1-70b": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/llama3.1-8b": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/llama3.2-1b": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/llama3.2-3b": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/llama3.3-70b": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/mistral-7b": { + "litellm_provider": "snowflake", + "max_input_tokens": 32000, + "max_output_tokens": 8192, + "max_tokens": 32000, + "mode": "chat" + }, + "snowflake/mistral-large": { + "litellm_provider": "snowflake", + "max_input_tokens": 32000, + "max_output_tokens": 8192, + "max_tokens": 32000, + "mode": "chat" + }, + "snowflake/mistral-large2": { + "litellm_provider": "snowflake", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat" + }, + "snowflake/mixtral-8x7b": { + "litellm_provider": "snowflake", + "max_input_tokens": 32000, + "max_output_tokens": 8192, + "max_tokens": 32000, + "mode": "chat" + }, + "snowflake/reka-core": { + "litellm_provider": "snowflake", + "max_input_tokens": 32000, + "max_output_tokens": 8192, + "max_tokens": 32000, + "mode": "chat" + }, + "snowflake/reka-flash": { + "litellm_provider": "snowflake", + "max_input_tokens": 100000, + "max_output_tokens": 8192, + "max_tokens": 100000, + "mode": "chat" + }, + "snowflake/snowflake-arctic": { + "litellm_provider": "snowflake", + "max_input_tokens": 4096, + "max_output_tokens": 8192, + "max_tokens": 4096, + "mode": "chat" + }, + "snowflake/snowflake-llama-3.1-405b": { + "litellm_provider": "snowflake", + "max_input_tokens": 8000, + "max_output_tokens": 8192, + "max_tokens": 8000, + "mode": "chat" + }, + "snowflake/snowflake-llama-3.3-70b": { + "litellm_provider": "snowflake", + "max_input_tokens": 8000, + "max_output_tokens": 8192, + "max_tokens": 8000, + "mode": "chat" + }, + "stability.sd3-5-large-v1:0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.08 + }, + "stability.sd3-large-v1:0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.08 + }, + "stability.stable-image-core-v1:0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.04 + }, + "stability.stable-image-core-v1:1": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.04 + }, + "stability.stable-image-ultra-v1:0": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.14 + }, + "stability.stable-image-ultra-v1:1": { + "litellm_provider": "bedrock", + "max_input_tokens": 77, + "max_tokens": 77, + "mode": "image_generation", + "output_cost_per_image": 0.14 + }, + "standard/1024-x-1024/dall-e-3": { + "input_cost_per_pixel": 3.81469e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0 + }, + "standard/1024-x-1792/dall-e-3": { + "input_cost_per_pixel": 4.359e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0 + }, + "standard/1792-x-1024/dall-e-3": { + "input_cost_per_pixel": 4.359e-08, + "litellm_provider": "openai", + "mode": "image_generation", + "output_cost_per_pixel": 0.0 + }, + "text-bison": { + "input_cost_per_character": 2.5e-07, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 2048, + "max_tokens": 2048, + "mode": "completion", + "output_cost_per_character": 5e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-bison32k": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-bison32k@002": { + "input_cost_per_character": 2.5e-07, + "input_cost_per_token": 1.25e-07, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_character": 5e-07, + "output_cost_per_token": 1.25e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-bison@001": { + "input_cost_per_character": 2.5e-07, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_character": 5e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-bison@002": { + "input_cost_per_character": 2.5e-07, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_character": 5e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-completion-codestral/codestral-2405": { + "input_cost_per_token": 0.0, + "litellm_provider": "text-completion-codestral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "completion", + "output_cost_per_token": 0.0, + "source": "https://docs.mistral.ai/capabilities/code_generation/" + }, + "text-completion-codestral/codestral-latest": { + "input_cost_per_token": 0.0, + "litellm_provider": "text-completion-codestral", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "completion", + "output_cost_per_token": 0.0, + "source": "https://docs.mistral.ai/capabilities/code_generation/" + }, + "text-embedding-004": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 2048, + "max_tokens": 2048, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + }, + "text-embedding-005": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 2048, + "max_tokens": 2048, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + }, + "text-embedding-3-large": { + "input_cost_per_token": 1.3e-07, + "input_cost_per_token_batches": 6.5e-08, + "litellm_provider": "openai", + "max_input_tokens": 8191, + "max_tokens": 8191, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_cost_per_token_batches": 0.0, + "output_vector_size": 3072 + }, + "text-embedding-3-small": { + "input_cost_per_token": 2e-08, + "input_cost_per_token_batches": 1e-08, + "litellm_provider": "openai", + "max_input_tokens": 8191, + "max_tokens": 8191, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_cost_per_token_batches": 0.0, + "output_vector_size": 1536 + }, + "text-embedding-ada-002": { + "input_cost_per_token": 1e-07, + "litellm_provider": "openai", + "max_input_tokens": 8191, + "max_tokens": 8191, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_vector_size": 1536 + }, + "text-embedding-ada-002-v2": { + "input_cost_per_token": 1e-07, + "input_cost_per_token_batches": 5e-08, + "litellm_provider": "openai", + "max_input_tokens": 8191, + "max_tokens": 8191, + "mode": "embedding", + "output_cost_per_token": 0.0, + "output_cost_per_token_batches": 0.0 + }, + "text-embedding-large-exp-03-07": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 8192, + "max_tokens": 8192, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 3072, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + }, + "text-embedding-preview-0409": { + "input_cost_per_token": 6.25e-09, + "input_cost_per_token_batch_requests": 5e-09, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "text-moderation-007": { + "input_cost_per_token": 0.0, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 0, + "max_tokens": 32768, + "mode": "moderation", + "output_cost_per_token": 0.0 + }, + "text-moderation-latest": { + "input_cost_per_token": 0.0, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 0, + "max_tokens": 32768, + "mode": "moderation", + "output_cost_per_token": 0.0 + }, + "text-moderation-stable": { + "input_cost_per_token": 0.0, + "litellm_provider": "openai", + "max_input_tokens": 32768, + "max_output_tokens": 0, + "max_tokens": 32768, + "mode": "moderation", + "output_cost_per_token": 0.0 + }, + "text-multilingual-embedding-002": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 2048, + "max_tokens": 2048, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models" + }, + "text-multilingual-embedding-preview-0409": { + "input_cost_per_token": 6.25e-09, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-unicorn": { + "input_cost_per_token": 1e-05, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_token": 2.8e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "text-unicorn@001": { + "input_cost_per_token": 1e-05, + "litellm_provider": "vertex_ai-text-models", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 1024, + "mode": "completion", + "output_cost_per_token": 2.8e-05, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "textembedding-gecko": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "textembedding-gecko-multilingual": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "textembedding-gecko-multilingual@001": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "textembedding-gecko@001": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "textembedding-gecko@003": { + "input_cost_per_character": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vertex_ai-embedding-models", + "max_input_tokens": 3072, + "max_tokens": 3072, + "mode": "embedding", + "output_cost_per_token": 0, + "output_vector_size": 768, + "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#foundation_models" + }, + "together-ai-21.1b-41b": { + "input_cost_per_token": 8e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 8e-07 + }, + "together-ai-4.1b-8b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 2e-07 + }, + "together-ai-41.1b-80b": { + "input_cost_per_token": 9e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 9e-07 + }, + "together-ai-8.1b-21b": { + "input_cost_per_token": 3e-07, + "litellm_provider": "together_ai", + "max_tokens": 1000, + "mode": "chat", + "output_cost_per_token": 3e-07 + }, + "together-ai-81.1b-110b": { + "input_cost_per_token": 1.8e-06, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 1.8e-06 + }, + "together-ai-embedding-151m-to-350m": { + "input_cost_per_token": 1.6e-08, + "litellm_provider": "together_ai", + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "together-ai-embedding-up-to-150m": { + "input_cost_per_token": 8e-09, + "litellm_provider": "together_ai", + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "together-ai-up-to-4b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 1e-07 + }, + "together_ai/Qwen/Qwen2.5-72B-Instruct-Turbo": { + "litellm_provider": "together_ai", "mode": "chat", "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/Qwen/Qwen2.5-7B-Instruct-Turbo": { + "litellm_provider": "together_ai", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/Qwen/Qwen3-235B-A22B-Instruct-2507-tput": { + "input_cost_per_token": 2e-07, + "litellm_provider": "together_ai", + "max_input_tokens": 262000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "source": "https://www.together.ai/models/qwen3-235b-a22b-instruct-2507-fp8", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/Qwen/Qwen3-235B-A22B-Thinking-2507": { + "input_cost_per_token": 6.5e-07, + "litellm_provider": "together_ai", + "max_input_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://www.together.ai/models/qwen3-235b-a22b-thinking-2507", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput": { + "input_cost_per_token": 2e-07, + "litellm_provider": "together_ai", + "max_input_tokens": 40000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://www.together.ai/models/qwen3-235b-a22b-fp8-tput", + "supports_function_calling": false, + "supports_parallel_function_calling": false, + "supports_tool_choice": false + }, + "together_ai/Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { + "input_cost_per_token": 2e-06, + "litellm_provider": "together_ai", + "max_input_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "source": "https://www.together.ai/models/qwen3-coder-480b-a35b-instruct", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/deepseek-ai/DeepSeek-R1": { + "input_cost_per_token": 3e-06, + "litellm_provider": "together_ai", + "max_input_tokens": 128000, + "max_output_tokens": 20480, + "max_tokens": 20480, + "mode": "chat", + "output_cost_per_token": 7e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/deepseek-ai/DeepSeek-R1-0528-tput": { + "input_cost_per_token": 5.5e-07, + "litellm_provider": "together_ai", + "max_input_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2.19e-06, + "source": "https://www.together.ai/models/deepseek-r1-0528-throughput", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/deepseek-ai/DeepSeek-V3": { + "input_cost_per_token": 1.25e-06, + "litellm_provider": "together_ai", + "max_input_tokens": 65536, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/deepseek-ai/DeepSeek-V3.1": { + "input_cost_per_token": 6e-07, + "litellm_provider": "together_ai", + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.7e-06, + "source": "https://www.together.ai/models/deepseek-v3-1", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Llama-3.2-3B-Instruct-Turbo": { + "litellm_provider": "together_ai", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Llama-3.3-70B-Instruct-Turbo": { + "input_cost_per_token": 8.8e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 8.8e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Llama-3.3-70B-Instruct-Turbo-Free": { + "input_cost_per_token": 0, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 0, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + "input_cost_per_token": 2.7e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 8.5e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Llama-4-Scout-17B-16E-Instruct": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 5.9e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": { + "input_cost_per_token": 3.5e-06, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 3.5e-06, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": { + "input_cost_per_token": 8.8e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 8.8e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "together_ai/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 1.8e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "together_ai/mistralai/Mistral-7B-Instruct-v0.1": { + "litellm_provider": "together_ai", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "together_ai/mistralai/Mistral-Small-24B-Instruct-2501": { + "litellm_provider": "together_ai", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/mistralai/Mixtral-8x7B-Instruct-v0.1": { + "input_cost_per_token": 6e-07, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "together_ai/moonshotai/Kimi-K2-Instruct": { + "input_cost_per_token": 1e-06, + "litellm_provider": "together_ai", + "mode": "chat", + "output_cost_per_token": 3e-06, + "source": "https://www.together.ai/models/kimi-k2-instruct", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/openai/gpt-oss-120b": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "together_ai", + "max_input_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://www.together.ai/models/gpt-oss-120b", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/openai/gpt-oss-20b": { + "input_cost_per_token": 5e-08, + "litellm_provider": "together_ai", + "max_input_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-07, + "source": "https://www.together.ai/models/gpt-oss-20b", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/togethercomputer/CodeLlama-34b-Instruct": { + "litellm_provider": "together_ai", + "mode": "chat", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "together_ai/zai-org/GLM-4.5-Air-FP8": { + "input_cost_per_token": 2e-07, + "litellm_provider": "together_ai", + "max_input_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.1e-06, + "source": "https://www.together.ai/models/glm-4-5-air", + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_tool_choice": true + }, + "tts-1": { + "input_cost_per_character": 1.5e-05, + "litellm_provider": "openai", + "mode": "audio_speech", + "supported_endpoints": [ + "/v1/audio/speech" + ] + }, + "tts-1-hd": { + "input_cost_per_character": 3e-05, + "litellm_provider": "openai", + "mode": "audio_speech", + "supported_endpoints": [ + "/v1/audio/speech" + ] + }, + "us.amazon.nova-lite-v1:0": { + "input_cost_per_token": 6e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 2.4e-07, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "us.amazon.nova-micro-v1:0": { + "input_cost_per_token": 3.5e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 1.4e-07, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "us.amazon.nova-premier-v1:0": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 1.25e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": false, + "supports_response_schema": true, + "supports_vision": true + }, + "us.amazon.nova-pro-v1:0": { + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 300000, + "max_output_tokens": 10000, + "max_tokens": 10000, + "mode": "chat", + "output_cost_per_token": 3.2e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_vision": true + }, + "us.anthropic.claude-3-5-haiku-20241022-v1:0": { + "cache_creation_input_token_cost": 1e-06, + "cache_read_input_token_cost": 8e-08, + "input_cost_per_token": 8e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 4e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true + }, + "us.anthropic.claude-3-5-sonnet-20240620-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "us.anthropic.claude-3-5-sonnet-20241022-v2:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "us.anthropic.claude-3-7-sonnet-20250219-v1:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "us.anthropic.claude-3-haiku-20240307-v1:0": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "us.anthropic.claude-3-opus-20240229-v1:0": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "us.anthropic.claude-3-sonnet-20240229-v1:0": { + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "us.anthropic.claude-opus-4-1-20250805-v1:0": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, "supports_response_schema": true, "supports_tool_choice": true, "supports_vision": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/mistral-small-3-2-24b-instruct-2506" + "tool_use_system_prompt_tokens": 159 }, - "ovhcloud/DeepSeek-R1-Distill-Llama-70B": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 6.7e-07, - "output_cost_per_token": 6.7e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/deepseek-r1-distill-llama-70b" - }, - "ovhcloud/Llama-3.1-8B-Instruct": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/llama-3-1-8b-instruct" - }, - "ovhcloud/Mistral-7B-Instruct-v0.3": { - "max_tokens": 127000, - "max_input_tokens": 127000, - "max_output_tokens": 127000, - "input_cost_per_token": 1e-07, - "output_cost_per_token": 1e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/mistral-7b-instruct-v0-3" - }, - "ovhcloud/gpt-oss-20b": { - "max_tokens": 131000, - "max_input_tokens": 131000, - "max_output_tokens": 131000, - "input_cost_per_token": 4e-08, - "output_cost_per_token": 1.5e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": false, - "supports_response_schema": true, - "supports_tool_choice": false, - "supports_reasoning": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/gpt-oss-20b" - }, - "ovhcloud/Mistral-Nemo-Instruct-2407": { - "max_tokens": 118000, - "max_input_tokens": 118000, - "max_output_tokens": 118000, - "input_cost_per_token": 1.3e-07, - "output_cost_per_token": 1.3e-07, - "litellm_provider": "ovhcloud", - "mode": "chat", - "supports_function_calling": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/mistral-nemo-instruct-2407" - }, - "ovhcloud/Qwen3-32B": { - "max_tokens": 32000, - "max_input_tokens": 32000, + "us.anthropic.claude-opus-4-20250514-v1:0": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, "max_output_tokens": 32000, - "input_cost_per_token": 8e-08, - "output_cost_per_token": 2.3e-07, - "litellm_provider": "ovhcloud", + "max_tokens": 32000, "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, "supports_response_schema": true, "supports_tool_choice": true, - "supports_reasoning": true, - "source": "https://endpoints.ai.cloud.ovh.net/models/qwen3-32b" + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 }, - "ovhcloud/mamba-codestral-7B-v0.1": { + "us.anthropic.claude-sonnet-4-20250514-v1:0": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "us.deepseek.r1-v1:0": { + "input_cost_per_token": 1.35e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 5.4e-06, + "supports_function_calling": false, + "supports_reasoning": true, + "supports_tool_choice": false + }, + "us.meta.llama3-1-405b-instruct-v1:0": { + "input_cost_per_token": 5.32e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.6e-05, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama3-1-70b-instruct-v1:0": { + "input_cost_per_token": 9.9e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 9.9e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama3-1-8b-instruct-v1:0": { + "input_cost_per_token": 2.2e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2.2e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama3-2-11b-instruct-v1:0": { + "input_cost_per_token": 3.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3.5e-07, + "supports_function_calling": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "us.meta.llama3-2-1b-instruct-v1:0": { + "input_cost_per_token": 1e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama3-2-3b-instruct-v1:0": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama3-2-90b-instruct-v1:0": { + "input_cost_per_token": 2e-06, + "litellm_provider": "bedrock", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2e-06, + "supports_function_calling": true, + "supports_tool_choice": false, + "supports_vision": true + }, + "us.meta.llama3-3-70b-instruct-v1:0": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.2e-07, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama4-maverick-17b-instruct-v1:0": { + "input_cost_per_token": 2.4e-07, + "input_cost_per_token_batches": 1.2e-07, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 9.7e-07, + "output_cost_per_token_batches": 4.85e-07, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.meta.llama4-scout-17b-instruct-v1:0": { + "input_cost_per_token": 1.7e-07, + "input_cost_per_token_batches": 8.5e-08, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 6.6e-07, + "output_cost_per_token_batches": 3.3e-07, + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": false + }, + "us.mistral.pixtral-large-2502-v1:0": { + "input_cost_per_token": 2e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_function_calling": true, + "supports_tool_choice": false + }, + "v0/v0-1.0-md": { + "input_cost_per_token": 3e-06, + "litellm_provider": "v0", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "v0/v0-1.5-lg": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "v0", + "max_input_tokens": 512000, + "max_output_tokens": 512000, + "max_tokens": 512000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "v0/v0-1.5-md": { + "input_cost_per_token": 3e-06, + "litellm_provider": "v0", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vercel_ai_gateway/alibaba/qwen-3-14b": { + "input_cost_per_token": 8e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 40960, + "max_output_tokens": 16384, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 2.4e-07 + }, + "vercel_ai_gateway/alibaba/qwen-3-235b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 40960, + "max_output_tokens": 16384, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "vercel_ai_gateway/alibaba/qwen-3-30b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 40960, + "max_output_tokens": 16384, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 3e-07 + }, + "vercel_ai_gateway/alibaba/qwen-3-32b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 40960, + "max_output_tokens": 16384, + "max_tokens": 40960, + "mode": "chat", + "output_cost_per_token": 3e-07 + }, + "vercel_ai_gateway/alibaba/qwen3-coder": { + "input_cost_per_token": 4e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 262144, + "max_output_tokens": 66536, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 1.6e-06 + }, + "vercel_ai_gateway/amazon/nova-lite": { + "input_cost_per_token": 6e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 300000, + "max_output_tokens": 8192, + "max_tokens": 300000, + "mode": "chat", + "output_cost_per_token": 2.4e-07 + }, + "vercel_ai_gateway/amazon/nova-micro": { + "input_cost_per_token": 3.5e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.4e-07 + }, + "vercel_ai_gateway/amazon/nova-pro": { + "input_cost_per_token": 8e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 300000, + "max_output_tokens": 8192, + "max_tokens": 300000, + "mode": "chat", + "output_cost_per_token": 3.2e-06 + }, + "vercel_ai_gateway/amazon/titan-embed-text-v2": { + "input_cost_per_token": 2e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/anthropic/claude-3-haiku": { + "cache_creation_input_token_cost": 3e-07, + "cache_read_input_token_cost": 3e-08, + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.25e-06 + }, + "vercel_ai_gateway/anthropic/claude-3-opus": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 7.5e-05 + }, + "vercel_ai_gateway/anthropic/claude-3.5-haiku": { + "cache_creation_input_token_cost": 1e-06, + "cache_read_input_token_cost": 8e-08, + "input_cost_per_token": 8e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 4e-06 + }, + "vercel_ai_gateway/anthropic/claude-3.5-sonnet": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/anthropic/claude-3.7-sonnet": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/anthropic/claude-4-opus": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 7.5e-05 + }, + "vercel_ai_gateway/anthropic/claude-4-sonnet": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/cohere/command-a": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 256000, + "max_output_tokens": 8000, "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1e-05 + }, + "vercel_ai_gateway/cohere/command-r": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "vercel_ai_gateway/cohere/command-r-plus": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05 + }, + "vercel_ai_gateway/cohere/embed-v4.0": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/deepseek/deepseek-r1": { + "input_cost_per_token": 5.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2.19e-06 + }, + "vercel_ai_gateway/deepseek/deepseek-r1-distill-llama-70b": { + "input_cost_per_token": 7.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 9.9e-07 + }, + "vercel_ai_gateway/deepseek/deepseek-v3": { + "input_cost_per_token": 9e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 9e-07 + }, + "vercel_ai_gateway/google/gemini-2.0-flash": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "vercel_ai_gateway/google/gemini-2.0-flash-lite": { + "input_cost_per_token": 7.5e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1048576, + "max_output_tokens": 8192, + "max_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 3e-07 + }, + "vercel_ai_gateway/google/gemini-2.5-flash": { + "input_cost_per_token": 3e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1000000, + "max_output_tokens": 65536, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06 + }, + "vercel_ai_gateway/google/gemini-2.5-pro": { + "input_cost_per_token": 2.5e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "max_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 1e-05 + }, + "vercel_ai_gateway/google/gemini-embedding-001": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/google/gemma-2-9b": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-07 + }, + "vercel_ai_gateway/google/text-embedding-005": { + "input_cost_per_token": 2.5e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/google/text-multilingual-embedding-002": { + "input_cost_per_token": 2.5e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/inception/mercury-coder-small": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32000, + "max_output_tokens": 16384, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "vercel_ai_gateway/meta/llama-3-70b": { + "input_cost_per_token": 5.9e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 7.9e-07 + }, + "vercel_ai_gateway/meta/llama-3-8b": { + "input_cost_per_token": 5e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 8e-08 + }, + "vercel_ai_gateway/meta/llama-3.1-70b": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 7.2e-07 + }, + "vercel_ai_gateway/meta/llama-3.1-8b": { + "input_cost_per_token": 5e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131000, + "max_output_tokens": 131072, + "max_tokens": 131000, + "mode": "chat", + "output_cost_per_token": 8e-08 + }, + "vercel_ai_gateway/meta/llama-3.2-11b": { + "input_cost_per_token": 1.6e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.6e-07 + }, + "vercel_ai_gateway/meta/llama-3.2-1b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-07 + }, + "vercel_ai_gateway/meta/llama-3.2-3b": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07 + }, + "vercel_ai_gateway/meta/llama-3.2-90b": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 7.2e-07 + }, + "vercel_ai_gateway/meta/llama-3.3-70b": { + "input_cost_per_token": 7.2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 8192, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 7.2e-07 + }, + "vercel_ai_gateway/meta/llama-4-maverick": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 8192, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "vercel_ai_gateway/meta/llama-4-scout": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 8192, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 3e-07 + }, + "vercel_ai_gateway/mistral/codestral": { + "input_cost_per_token": 3e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 256000, + "max_output_tokens": 4000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 9e-07 + }, + "vercel_ai_gateway/mistral/codestral-embed": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/mistral/devstral-small": { + "input_cost_per_token": 7e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 2.8e-07 + }, + "vercel_ai_gateway/mistral/magistral-medium": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 64000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 5e-06 + }, + "vercel_ai_gateway/mistral/magistral-small": { + "input_cost_per_token": 5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 64000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-06 + }, + "vercel_ai_gateway/mistral/ministral-3b": { + "input_cost_per_token": 4e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4e-08 + }, + "vercel_ai_gateway/mistral/ministral-8b": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-07 + }, + "vercel_ai_gateway/mistral/mistral-embed": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "chat", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/mistral/mistral-large": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32000, + "max_output_tokens": 4000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 6e-06 + }, + "vercel_ai_gateway/mistral/mistral-saba-24b": { + "input_cost_per_token": 7.9e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 7.9e-07 + }, + "vercel_ai_gateway/mistral/mistral-small": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32000, + "max_output_tokens": 4000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 3e-07 + }, + "vercel_ai_gateway/mistral/mixtral-8x22b-instruct": { + "input_cost_per_token": 1.2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 65536, + "max_output_tokens": 2048, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_token": 1.2e-06 + }, + "vercel_ai_gateway/mistral/pixtral-12b": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07 + }, + "vercel_ai_gateway/mistral/pixtral-large": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-06 + }, + "vercel_ai_gateway/moonshotai/kimi-k2": { + "input_cost_per_token": 5.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.2e-06 + }, + "vercel_ai_gateway/morph/morph-v3-fast": { + "input_cost_per_token": 8e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32768, + "max_output_tokens": 16384, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.2e-06 + }, + "vercel_ai_gateway/morph/morph-v3-large": { + "input_cost_per_token": 9e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32768, + "max_output_tokens": 16384, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1.9e-06 + }, + "vercel_ai_gateway/openai/gpt-3.5-turbo": { + "input_cost_per_token": 5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "max_tokens": 16385, + "mode": "chat", + "output_cost_per_token": 1.5e-06 + }, + "vercel_ai_gateway/openai/gpt-3.5-turbo-instruct": { + "input_cost_per_token": 1.5e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 8192, + "max_output_tokens": 4096, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 2e-06 + }, + "vercel_ai_gateway/openai/gpt-4-turbo": { + "input_cost_per_token": 1e-05, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-05 + }, + "vercel_ai_gateway/openai/gpt-4.1": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 1047576, + "mode": "chat", + "output_cost_per_token": 8e-06 + }, + "vercel_ai_gateway/openai/gpt-4.1-mini": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 1e-07, + "input_cost_per_token": 4e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 1047576, + "mode": "chat", + "output_cost_per_token": 1.6e-06 + }, + "vercel_ai_gateway/openai/gpt-4.1-nano": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 2.5e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "max_tokens": 1047576, + "mode": "chat", + "output_cost_per_token": 4e-07 + }, + "vercel_ai_gateway/openai/gpt-4o": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 1.25e-06, + "input_cost_per_token": 2.5e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1e-05 + }, + "vercel_ai_gateway/openai/gpt-4o-mini": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 7.5e-08, + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07 + }, + "vercel_ai_gateway/openai/o1": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 7.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 6e-05 + }, + "vercel_ai_gateway/openai/o3": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 5e-07, + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 8e-06 + }, + "vercel_ai_gateway/openai/o3-mini": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 5.5e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 4.4e-06 + }, + "vercel_ai_gateway/openai/o4-mini": { + "cache_creation_input_token_cost": 0.0, + "cache_read_input_token_cost": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 100000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 4.4e-06 + }, + "vercel_ai_gateway/openai/text-embedding-3-large": { + "input_cost_per_token": 1.3e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/openai/text-embedding-3-small": { + "input_cost_per_token": 2e-08, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/openai/text-embedding-ada-002": { + "input_cost_per_token": 1e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 0, + "max_output_tokens": 0, + "max_tokens": 0, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "vercel_ai_gateway/perplexity/sonar": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 127000, + "max_output_tokens": 8000, + "max_tokens": 127000, + "mode": "chat", + "output_cost_per_token": 1e-06 + }, + "vercel_ai_gateway/perplexity/sonar-pro": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 200000, + "max_output_tokens": 8000, + "max_tokens": 200000, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/perplexity/sonar-reasoning": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 127000, + "max_output_tokens": 8000, + "max_tokens": 127000, + "mode": "chat", + "output_cost_per_token": 5e-06 + }, + "vercel_ai_gateway/perplexity/sonar-reasoning-pro": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 127000, + "max_output_tokens": 8000, + "max_tokens": 127000, + "mode": "chat", + "output_cost_per_token": 8e-06 + }, + "vercel_ai_gateway/vercel/v0-1.0-md": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 32000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/vercel/v0-1.5-md": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 32768, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/xai/grok-2": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 4000, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-05 + }, + "vercel_ai_gateway/xai/grok-2-vision": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1e-05 + }, + "vercel_ai_gateway/xai/grok-3": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/xai/grok-3-fast": { + "input_cost_per_token": 5e-06, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-05 + }, + "vercel_ai_gateway/xai/grok-3-mini": { + "input_cost_per_token": 3e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-07 + }, + "vercel_ai_gateway/xai/grok-3-mini-fast": { + "input_cost_per_token": 6e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-06 + }, + "vercel_ai_gateway/xai/grok-4": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vercel_ai_gateway", "max_input_tokens": 256000, "max_output_tokens": 256000, - "input_cost_per_token": 1.9e-07, - "output_cost_per_token": 1.9e-07, - "litellm_provider": "ovhcloud", + "max_tokens": 256000, "mode": "chat", - "supports_function_calling": false, + "output_cost_per_token": 1.5e-05 + }, + "vercel_ai_gateway/zai/glm-4.5": { + "input_cost_per_token": 6e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.2e-06 + }, + "vercel_ai_gateway/zai/glm-4.5-air": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vercel_ai_gateway", + "max_input_tokens": 128000, + "max_output_tokens": 96000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.1e-06 + }, + "vertex_ai/claude-3-5-haiku": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_tool_choice": true + }, + "vertex_ai/claude-3-5-haiku@20241022": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_tool_choice": true + }, + "vertex_ai/claude-3-5-sonnet": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-5-sonnet-v2": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-5-sonnet-v2@20241022": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-5-sonnet@20240620": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-7-sonnet@20250219": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "deprecation_date": "2025-06-01", + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, "supports_response_schema": true, - "supports_tool_choice": false, - "source": "https://endpoints.ai.cloud.ovh.net/models/mamba-codestral-7b-v0-1" + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "vertex_ai/claude-3-haiku": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-haiku@20240307": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.25e-06, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-opus": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-opus@20240229": { + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-sonnet": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-3-sonnet@20240229": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-opus-4": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "vertex_ai/claude-opus-4-1": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "input_cost_per_token_batches": 7.5e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "output_cost_per_token_batches": 3.75e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-opus-4-1@20250805": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "input_cost_per_token_batches": 7.5e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "output_cost_per_token_batches": 3.75e-05, + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/claude-opus-4@20250514": { + "cache_creation_input_token_cost": 1.875e-05, + "cache_read_input_token_cost": 1.5e-06, + "input_cost_per_token": 1.5e-05, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 7.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "vertex_ai/claude-sonnet-4": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "vertex_ai/claude-sonnet-4@20250514": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "max_tokens": 64000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_assistant_prefill": true, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "tool_use_system_prompt_tokens": 159 + }, + "vertex_ai/codestral-2501": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/codestral@2405": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/codestral@latest": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 6e-07, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/deepseek-ai/deepseek-r1-0528-maas": { + "input_cost_per_token": 1.35e-06, + "litellm_provider": "vertex_ai-deepseek_models", + "max_input_tokens": 65336, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 5.4e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "vertex_ai/imagegeneration@006": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.02, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/imagen-3.0-fast-generate-001": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.02, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/imagen-3.0-generate-001": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/imagen-3.0-generate-002": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/imagen-4.0-fast-generate-001": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.02, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/imagen-4.0-generate-001": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.04, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/imagen-4.0-ultra-generate-001": { + "litellm_provider": "vertex_ai-image-models", + "mode": "image_generation", + "output_cost_per_image": 0.06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/jamba-1.5": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vertex_ai-ai21_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "vertex_ai/jamba-1.5-large": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vertex_ai-ai21_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_tool_choice": true + }, + "vertex_ai/jamba-1.5-large@001": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vertex_ai-ai21_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 8e-06, + "supports_tool_choice": true + }, + "vertex_ai/jamba-1.5-mini": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vertex_ai-ai21_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "vertex_ai/jamba-1.5-mini@001": { + "input_cost_per_token": 2e-07, + "litellm_provider": "vertex_ai-ai21_models", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 4e-07, + "supports_tool_choice": true + }, + "vertex_ai/meta/llama-3.1-405b-instruct-maas": { + "input_cost_per_token": 5e-06, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.6e-05, + "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/meta/llama-3.1-70b-instruct-maas": { + "input_cost_per_token": 0.0, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/meta/llama-3.1-8b-instruct-maas": { + "input_cost_per_token": 0.0, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "metadata": { + "notes": "VertexAI states that The Llama 3.1 API service for llama-3.1-70b-instruct-maas and llama-3.1-8b-instruct-maas are in public preview and at no cost." + }, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/meta/llama-3.2-90b-vision-instruct-maas": { + "input_cost_per_token": 0.0, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 128000, + "max_output_tokens": 2048, + "max_tokens": 128000, + "metadata": { + "notes": "VertexAI states that The Llama 3.2 API service is at no cost during public preview, and will be priced as per dollar-per-1M-tokens at GA." + }, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://console.cloud.google.com/vertex-ai/publishers/meta/model-garden/llama-3.2-90b-vision-instruct-maas", + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/meta/llama-4-maverick-17b-128e-instruct-maas": { + "input_cost_per_token": 3.5e-07, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 1.15e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/meta/llama-4-maverick-17b-16e-instruct-maas": { + "input_cost_per_token": 3.5e-07, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 1.15e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/meta/llama-4-scout-17b-128e-instruct-maas": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 10000000, + "max_output_tokens": 10000000, + "max_tokens": 10000000, + "mode": "chat", + "output_cost_per_token": 7e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/meta/llama-4-scout-17b-16e-instruct-maas": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 10000000, + "max_output_tokens": 10000000, + "max_tokens": 10000000, + "mode": "chat", + "output_cost_per_token": 7e-07, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text", + "code" + ], + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/meta/llama3-405b-instruct-maas": { + "input_cost_per_token": 0.0, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supports_tool_choice": true + }, + "vertex_ai/meta/llama3-70b-instruct-maas": { + "input_cost_per_token": 0.0, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supports_tool_choice": true + }, + "vertex_ai/meta/llama3-8b-instruct-maas": { + "input_cost_per_token": 0.0, + "litellm_provider": "vertex_ai-llama_models", + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "max_tokens": 32000, + "mode": "chat", + "output_cost_per_token": 0.0, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#partner-models", + "supports_tool_choice": true + }, + "vertex_ai/mistral-large-2411": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/mistral-large@2407": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/mistral-large@2411-001": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/mistral-large@latest": { + "input_cost_per_token": 2e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 6e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/mistral-nemo@2407": { + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/mistral-nemo@latest": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-07, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/mistral-small-2503": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 128000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "vertex_ai/mistral-small-2503@001": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vertex_ai-mistral_models", + "max_input_tokens": 32000, + "max_output_tokens": 8191, + "max_tokens": 8191, + "mode": "chat", + "output_cost_per_token": 3e-06, + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/openai/gpt-oss-120b-maas": { + "input_cost_per_token": 1.5e-07, + "litellm_provider": "vertex_ai-openai_models", + "max_input_tokens": 131072, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 6e-07, + "source": "https://console.cloud.google.com/vertex-ai/publishers/openai/model-garden/gpt-oss-120b-maas", + "supports_reasoning": true + }, + "vertex_ai/openai/gpt-oss-20b-maas": { + "input_cost_per_token": 7.5e-08, + "litellm_provider": "vertex_ai-openai_models", + "max_input_tokens": 131072, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 3e-07, + "source": "https://console.cloud.google.com/vertex-ai/publishers/openai/model-garden/gpt-oss-120b-maas", + "supports_reasoning": true + }, + "vertex_ai/qwen/qwen3-235b-a22b-instruct-2507-maas": { + "input_cost_per_token": 2.5e-07, + "litellm_provider": "vertex_ai-qwen_models", + "max_input_tokens": 262144, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_token": 1e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/qwen/qwen3-coder-480b-a35b-instruct-maas": { + "input_cost_per_token": 1e-06, + "litellm_provider": "vertex_ai-qwen_models", + "max_input_tokens": 262144, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supports_function_calling": true, + "supports_tool_choice": true + }, + "vertex_ai/veo-2.0-generate-001": { + "litellm_provider": "vertex_ai-video-models", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "video_generation", + "output_cost_per_second": 0.35, + "source": "https://ai.google.dev/gemini-api/docs/video", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "video" + ] + }, + "vertex_ai/veo-3.0-fast-generate-preview": { + "litellm_provider": "vertex_ai-video-models", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "video_generation", + "output_cost_per_second": 0.4, + "source": "https://ai.google.dev/gemini-api/docs/video", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "video" + ] + }, + "vertex_ai/veo-3.0-generate-preview": { + "litellm_provider": "vertex_ai-video-models", + "max_input_tokens": 1024, + "max_tokens": 1024, + "mode": "video_generation", + "output_cost_per_second": 0.75, + "source": "https://ai.google.dev/gemini-api/docs/video", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "video" + ] + }, + "voyage/rerank-2": { + "input_cost_per_query": 5e-08, + "input_cost_per_token": 5e-08, + "litellm_provider": "voyage", + "max_input_tokens": 16000, + "max_output_tokens": 16000, + "max_query_tokens": 16000, + "max_tokens": 16000, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "voyage/rerank-2-lite": { + "input_cost_per_query": 2e-08, + "input_cost_per_token": 2e-08, + "litellm_provider": "voyage", + "max_input_tokens": 8000, + "max_output_tokens": 8000, + "max_query_tokens": 8000, + "max_tokens": 8000, + "mode": "rerank", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-2": { + "input_cost_per_token": 1e-07, + "litellm_provider": "voyage", + "max_input_tokens": 4000, + "max_tokens": 4000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-3": { + "input_cost_per_token": 6e-08, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-3-large": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-3-lite": { + "input_cost_per_token": 2e-08, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-code-2": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "voyage", + "max_input_tokens": 16000, + "max_tokens": 16000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-code-3": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-context-3": { + "input_cost_per_token": 1.8e-07, + "litellm_provider": "voyage", + "max_input_tokens": 120000, + "max_tokens": 120000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-finance-2": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-large-2": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "voyage", + "max_input_tokens": 16000, + "max_tokens": 16000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-law-2": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "voyage", + "max_input_tokens": 16000, + "max_tokens": 16000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-lite-01": { + "input_cost_per_token": 1e-07, + "litellm_provider": "voyage", + "max_input_tokens": 4096, + "max_tokens": 4096, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-lite-02-instruct": { + "input_cost_per_token": 1e-07, + "litellm_provider": "voyage", + "max_input_tokens": 4000, + "max_tokens": 4000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "voyage/voyage-multimodal-3": { + "input_cost_per_token": 1.2e-07, + "litellm_provider": "voyage", + "max_input_tokens": 32000, + "max_tokens": 32000, + "mode": "embedding", + "output_cost_per_token": 0.0 + }, + "watsonx/ibm/granite-3-8b-instruct": { + "input_cost_per_token": 0.0002, + "litellm_provider": "watsonx", + "max_input_tokens": 8192, + "max_output_tokens": 1024, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 0.0002, + "supports_audio_input": false, + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "watsonx/mistralai/mistral-large": { + "input_cost_per_token": 3e-06, + "litellm_provider": "watsonx", + "max_input_tokens": 131072, + "max_output_tokens": 16384, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_audio_input": false, + "supports_audio_output": false, + "supports_function_calling": true, + "supports_parallel_function_calling": false, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": false + }, + "whisper-1": { + "input_cost_per_second": 0.0001, + "litellm_provider": "openai", + "mode": "audio_transcription", + "output_cost_per_second": 0.0001, + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "xai/grok-2": { + "input_cost_per_token": 2e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-2-1212": { + "input_cost_per_token": 2e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-2-latest": { + "input_cost_per_token": 2e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-2-vision": { + "input_cost_per_image": 2e-06, + "input_cost_per_token": 2e-06, + "litellm_provider": "xai", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "xai/grok-2-vision-1212": { + "input_cost_per_image": 2e-06, + "input_cost_per_token": 2e-06, + "litellm_provider": "xai", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "xai/grok-2-vision-latest": { + "input_cost_per_image": 2e-06, + "input_cost_per_token": 2e-06, + "litellm_provider": "xai", + "max_input_tokens": 32768, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 1e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "xai/grok-3": { + "input_cost_per_token": 3e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-beta": { + "input_cost_per_token": 3e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-fast-beta": { + "input_cost_per_token": 5e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-05, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-fast-latest": { + "input_cost_per_token": 5e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.5e-05, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-latest": { + "input_cost_per_token": 3e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-mini": { + "input_cost_per_token": 3e-07, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-07, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-mini-beta": { + "input_cost_per_token": 3e-07, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-07, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-mini-fast": { + "input_cost_per_token": 6e-07, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-mini-fast-beta": { + "input_cost_per_token": 6e-07, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-mini-fast-latest": { + "input_cost_per_token": 6e-07, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-3-mini-latest": { + "input_cost_per_token": 3e-07, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 5e-07, + "source": "https://x.ai/api#pricing", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": false, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-4": { + "input_cost_per_token": 3e-06, + "litellm_provider": "xai", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-4-0709": { + "input_cost_per_token": 3e-06, + "litellm_provider": "xai", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-4-latest": { + "input_cost_per_token": 3e-06, + "litellm_provider": "xai", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_web_search": true + }, + "xai/grok-beta": { + "input_cost_per_token": 5e-06, + "litellm_provider": "xai", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true + }, + "xai/grok-code-fast": { + "cache_read_input_token_cost": 2e-08, + "input_cost_per_token": 2e-07, + "litellm_provider": "xai", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "xai/grok-code-fast-1": { + "cache_read_input_token_cost": 2e-08, + "input_cost_per_token": 2e-07, + "litellm_provider": "xai", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "xai/grok-code-fast-1-0825": { + "cache_read_input_token_cost": 2e-08, + "input_cost_per_token": 2e-07, + "litellm_provider": "xai", + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "max_tokens": 256000, + "mode": "chat", + "output_cost_per_token": 1.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true + }, + "xai/grok-vision-beta": { + "input_cost_per_image": 5e-06, + "input_cost_per_token": 5e-06, + "litellm_provider": "xai", + "max_input_tokens": 8192, + "max_output_tokens": 8192, + "max_tokens": 8192, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "supports_function_calling": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true } -} +} \ No newline at end of file diff --git a/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py b/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py index a075de13fb..6afed97fe9 100644 --- a/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py +++ b/litellm/proxy/_experimental/mcp_server/auth/user_api_key_auth_mcp.py @@ -28,12 +28,16 @@ class MCPRequestHandler: LITELLM_MCP_SERVERS_HEADER_NAME = SpecialHeaders.mcp_servers.value LITELLM_MCP_ACCESS_GROUPS_HEADER_NAME = SpecialHeaders.mcp_access_groups.value - + # MCP Protocol Version header MCP_PROTOCOL_VERSION_HEADER_NAME = "MCP-Protocol-Version" @staticmethod - async def process_mcp_request(scope: Scope) -> Tuple[UserAPIKeyAuth, Optional[str], Optional[List[str]], Optional[Dict[str, str]], Optional[str]]: + async def process_mcp_request( + scope: Scope, + ) -> Tuple[ + UserAPIKeyAuth, Optional[str], Optional[List[str]], Optional[Dict[str, str]] + ]: """ Process and validate MCP request headers from the ASGI scope. This includes: @@ -49,7 +53,6 @@ class MCPRequestHandler: mcp_auth_header: Optional[str] MCP auth header to be passed to the MCP server (deprecated) mcp_servers: Optional[List[str]] List of MCP servers and access groups to use mcp_server_auth_headers: Optional[Dict[str, str]] Server-specific auth headers in format {server_alias: auth_value} - mcp_protocol_version: Optional[str] MCP protocol version from request header Raises: HTTPException: If headers are invalid or missing required headers @@ -58,39 +61,50 @@ class MCPRequestHandler: litellm_api_key = ( MCPRequestHandler.get_litellm_api_key_from_headers(headers) or "" ) - + # Get the old mcp_auth_header for backward compatibility mcp_auth_header = MCPRequestHandler._get_mcp_auth_header_from_headers(headers) - - # Get the new server-specific auth headers - mcp_server_auth_headers = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers) - # Get MCP protocol version from header - mcp_protocol_version = headers.get(MCPRequestHandler.MCP_PROTOCOL_VERSION_HEADER_NAME) + # Get the new server-specific auth headers + mcp_server_auth_headers = ( + MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers) + ) # Parse MCP servers from header - mcp_servers_header = headers.get(MCPRequestHandler.LITELLM_MCP_SERVERS_HEADER_NAME) + mcp_servers_header = headers.get( + MCPRequestHandler.LITELLM_MCP_SERVERS_HEADER_NAME + ) verbose_logger.debug(f"Raw MCP servers header: {mcp_servers_header}") mcp_servers = None if mcp_servers_header is not None: try: - mcp_servers = [s.strip() for s in mcp_servers_header.split(",") if s.strip()] + mcp_servers = [ + s.strip() for s in mcp_servers_header.split(",") if s.strip() + ] verbose_logger.debug(f"Parsed MCP servers: {mcp_servers}") except Exception as e: verbose_logger.debug(f"Error parsing mcp_servers header: {e}") mcp_servers = None - if mcp_servers_header == "" or (mcp_servers is not None and len(mcp_servers) == 0): + if mcp_servers_header == "" or ( + mcp_servers is not None and len(mcp_servers) == 0 + ): mcp_servers = [] # Create a proper Request object with mock body method to avoid ASGI receive channel issues request = Request(scope=scope) + async def mock_body(): return b"{}" + request.body = mock_body # type: ignore validated_user_api_key_auth = await user_api_key_auth( api_key=litellm_api_key, request=request ) - return validated_user_api_key_auth, mcp_auth_header, mcp_servers, mcp_server_auth_headers, mcp_protocol_version - + return ( + validated_user_api_key_auth, + mcp_auth_header, + mcp_servers, + mcp_server_auth_headers, + ) @staticmethod def _get_mcp_auth_header_from_headers(headers: Headers) -> Optional[str]: @@ -104,10 +118,12 @@ class MCPRequestHandler: Support this auth: https://docs.litellm.ai/docs/mcp#using-your-mcp-with-client-side-credentials If you want to use a different header name, you can set the `LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME` in the secret manager or `mcp_client_side_auth_header_name` in the general settings. - + DEPRECATED: This method is deprecated in favor of server-specific auth headers using the format x-mcp-{{server_alias}}-{{header_name}} instead. """ - mcp_client_side_auth_header_name: str = MCPRequestHandler._get_mcp_client_side_auth_header_name() + mcp_client_side_auth_header_name: str = ( + MCPRequestHandler._get_mcp_client_side_auth_header_name() + ) auth_header = headers.get(mcp_client_side_auth_header_name) if auth_header: verbose_logger.warning( @@ -115,42 +131,49 @@ class MCPRequestHandler: f"Please use server-specific auth headers in the format 'x-mcp-{{server_alias}}-{{header_name}}' instead." ) return auth_header - + @staticmethod def _get_mcp_server_auth_headers_from_headers(headers: Headers) -> Dict[str, str]: """ Parse server-specific MCP auth headers from the request headers. - + Looks for headers in the format: x-mcp-{server_alias}-{header_name} Examples: - x-mcp-github-authorization: Bearer token123 - x-mcp-zapier-x-api-key: api_key_456 - x-mcp-deepwiki-authorization: Basic base64_encoded_creds - + Returns: Dict[str, str]: Mapping of server alias to auth value """ server_auth_headers = {} prefix = "x-mcp-" - + for header_name, header_value in headers.items(): if header_name.lower().startswith(prefix): # Skip the access groups header as it's not a server auth header - if header_name.lower() == MCPRequestHandler.LITELLM_MCP_ACCESS_GROUPS_HEADER_NAME.lower() or header_name.lower() == MCPRequestHandler.LITELLM_MCP_SERVERS_HEADER_NAME.lower(): + if ( + header_name.lower() + == MCPRequestHandler.LITELLM_MCP_ACCESS_GROUPS_HEADER_NAME.lower() + or header_name.lower() + == MCPRequestHandler.LITELLM_MCP_SERVERS_HEADER_NAME.lower() + ): continue - + # Extract server_alias and header_name from x-mcp-{server_alias}-{header_name} - remaining = header_name[len(prefix):].lower() - if '-' in remaining: + remaining = header_name[len(prefix) :].lower() + if "-" in remaining: # Split on the last dash to separate server_alias from header_name - parts = remaining.rsplit('-', 1) + parts = remaining.rsplit("-", 1) if len(parts) == 2: server_alias, auth_header_name = parts server_auth_headers[server_alias] = header_value - verbose_logger.debug(f"Found server auth header: {server_alias} -> {auth_header_name}: {header_value[:10]}...") - + verbose_logger.debug( + f"Found server auth header: {server_alias} -> {auth_header_name}: {header_value[:10]}..." + ) + return server_auth_headers - + @staticmethod def _get_mcp_client_side_auth_header_name() -> str: """ @@ -162,13 +185,21 @@ class MCPRequestHandler: """ from litellm.proxy.proxy_server import general_settings from litellm.secret_managers.main import get_secret_str - MCP_CLIENT_SIDE_AUTH_HEADER_NAME: str = MCPRequestHandler.LITELLM_MCP_AUTH_HEADER_NAME - if get_secret_str("LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME") is not None: - MCP_CLIENT_SIDE_AUTH_HEADER_NAME = get_secret_str("LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME") or MCP_CLIENT_SIDE_AUTH_HEADER_NAME - elif general_settings.get("mcp_client_side_auth_header_name") is not None: - MCP_CLIENT_SIDE_AUTH_HEADER_NAME = general_settings.get("mcp_client_side_auth_header_name") or MCP_CLIENT_SIDE_AUTH_HEADER_NAME - return MCP_CLIENT_SIDE_AUTH_HEADER_NAME + MCP_CLIENT_SIDE_AUTH_HEADER_NAME: str = ( + MCPRequestHandler.LITELLM_MCP_AUTH_HEADER_NAME + ) + if get_secret_str("LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME") is not None: + MCP_CLIENT_SIDE_AUTH_HEADER_NAME = ( + get_secret_str("LITELLM_MCP_CLIENT_SIDE_AUTH_HEADER_NAME") + or MCP_CLIENT_SIDE_AUTH_HEADER_NAME + ) + elif general_settings.get("mcp_client_side_auth_header_name") is not None: + MCP_CLIENT_SIDE_AUTH_HEADER_NAME = ( + general_settings.get("mcp_client_side_auth_header_name") + or MCP_CLIENT_SIDE_AUTH_HEADER_NAME + ) + return MCP_CLIENT_SIDE_AUTH_HEADER_NAME @staticmethod def get_litellm_api_key_from_headers(headers: Headers) -> Optional[str]: @@ -229,10 +260,14 @@ class MCPRequestHandler: try: allowed_mcp_servers: List[str] = [] allowed_mcp_servers_for_key = ( - await MCPRequestHandler._get_allowed_mcp_servers_for_key(user_api_key_auth) + await MCPRequestHandler._get_allowed_mcp_servers_for_key( + user_api_key_auth + ) ) allowed_mcp_servers_for_team = ( - await MCPRequestHandler._get_allowed_mcp_servers_for_team(user_api_key_auth) + await MCPRequestHandler._get_allowed_mcp_servers_for_team( + user_api_key_auth + ) ) ######################################################### @@ -274,7 +309,9 @@ class MCPRequestHandler: try: key_object_permission = ( await prisma_client.db.litellm_objectpermissiontable.find_unique( - where={"object_permission_id": user_api_key_auth.object_permission_id}, + where={ + "object_permission_id": user_api_key_auth.object_permission_id + }, ) ) if key_object_permission is None: @@ -282,17 +319,21 @@ class MCPRequestHandler: # Get direct MCP servers direct_mcp_servers = key_object_permission.mcp_servers or [] - + # Get MCP servers from access groups - access_group_servers = await MCPRequestHandler._get_mcp_servers_from_access_groups( - key_object_permission.mcp_access_groups or [] + access_group_servers = ( + await MCPRequestHandler._get_mcp_servers_from_access_groups( + key_object_permission.mcp_access_groups or [] + ) ) - + # Combine both lists all_servers = direct_mcp_servers + access_group_servers return list(set(all_servers)) except Exception as e: - verbose_logger.warning(f"Failed to get allowed MCP servers for key: {str(e)}") + verbose_logger.warning( + f"Failed to get allowed MCP servers for key: {str(e)}" + ) return [] @staticmethod @@ -318,10 +359,10 @@ class MCPRequestHandler: return [] try: - team_obj: Optional[LiteLLM_TeamTable] = ( - await prisma_client.db.litellm_teamtable.find_unique( - where={"team_id": user_api_key_auth.team_id}, - ) + team_obj: Optional[ + LiteLLM_TeamTable + ] = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": user_api_key_auth.team_id}, ) if team_obj is None: verbose_logger.debug("team_obj is None") @@ -333,21 +374,27 @@ class MCPRequestHandler: # Get direct MCP servers direct_mcp_servers = object_permissions.mcp_servers or [] - + # Get MCP servers from access groups - access_group_servers = await MCPRequestHandler._get_mcp_servers_from_access_groups( - object_permissions.mcp_access_groups or [] + access_group_servers = ( + await MCPRequestHandler._get_mcp_servers_from_access_groups( + object_permissions.mcp_access_groups or [] + ) ) - + # Combine both lists all_servers = direct_mcp_servers + access_group_servers return list(set(all_servers)) except Exception as e: - verbose_logger.warning(f"Failed to get allowed MCP servers for team: {str(e)}") + verbose_logger.warning( + f"Failed to get allowed MCP servers for team: {str(e)}" + ) return [] @staticmethod - def _get_config_server_ids_for_access_groups(config_mcp_servers, access_groups: List[str]) -> Set[str]: + def _get_config_server_ids_for_access_groups( + config_mcp_servers, access_groups: List[str] + ) -> Set[str]: """ Helper to get server_ids from config-loaded servers that match any of the given access groups. """ @@ -359,7 +406,9 @@ class MCPRequestHandler: return server_ids @staticmethod - async def _get_db_server_ids_for_access_groups(prisma_client, access_groups: List[str]) -> Set[str]: + async def _get_db_server_ids_for_access_groups( + prisma_client, access_groups: List[str] + ) -> Set[str]: """ Helper to get server_ids from DB servers that match any of the given access groups. """ @@ -367,21 +416,19 @@ class MCPRequestHandler: if access_groups and prisma_client is not None: try: mcp_servers = await prisma_client.db.litellm_mcpservertable.find_many( - where={ - "mcp_access_groups": { - "hasSome": access_groups - } - } + where={"mcp_access_groups": {"hasSome": access_groups}} ) for server in mcp_servers: server_ids.add(server.server_id) except Exception as e: - verbose_logger.debug(f"Error getting MCP servers from access groups: {e}") + verbose_logger.debug( + f"Error getting MCP servers from access groups: {e}" + ) return server_ids @staticmethod async def _get_mcp_servers_from_access_groups( - access_groups: List[str] + access_groups: List[str], ) -> List[str]: """ Resolve MCP access groups to server IDs by querying BOTH the MCP server table (DB) AND config-loaded servers @@ -390,22 +437,28 @@ class MCPRequestHandler: try: # Import here to avoid circular import - from litellm.proxy._experimental.mcp_server.mcp_server_manager import global_mcp_server_manager - + from litellm.proxy._experimental.mcp_server.mcp_server_manager import ( + global_mcp_server_manager, + ) + # Use the new helper for config-loaded servers server_ids = MCPRequestHandler._get_config_server_ids_for_access_groups( global_mcp_server_manager.config_mcp_servers, access_groups ) # Use the new helper for DB servers - db_server_ids = await MCPRequestHandler._get_db_server_ids_for_access_groups( - prisma_client, access_groups + db_server_ids = ( + await MCPRequestHandler._get_db_server_ids_for_access_groups( + prisma_client, access_groups + ) ) server_ids.update(db_server_ids) return list(server_ids) except Exception as e: - verbose_logger.warning(f"Failed to get MCP servers from access groups: {str(e)}") + verbose_logger.warning( + f"Failed to get MCP servers from access groups: {str(e)}" + ) return [] @staticmethod @@ -418,8 +471,8 @@ class MCPRequestHandler: from typing import List access_groups: List[str] = [] - access_groups_for_key = ( - await MCPRequestHandler._get_mcp_access_groups_for_key(user_api_key_auth) + access_groups_for_key = await MCPRequestHandler._get_mcp_access_groups_for_key( + user_api_key_auth ) access_groups_for_team = ( await MCPRequestHandler._get_mcp_access_groups_for_team(user_api_key_auth) @@ -482,10 +535,10 @@ class MCPRequestHandler: verbose_logger.debug("prisma_client is None") return [] - team_obj: Optional[LiteLLM_TeamTable] = ( - await prisma_client.db.litellm_teamtable.find_unique( - where={"team_id": user_api_key_auth.team_id}, - ) + team_obj: Optional[ + LiteLLM_TeamTable + ] = await prisma_client.db.litellm_teamtable.find_unique( + where={"team_id": user_api_key_auth.team_id}, ) if team_obj is None: verbose_logger.debug("team_obj is None") @@ -502,10 +555,14 @@ class MCPRequestHandler: """ Extract and parse the x-mcp-access-groups header as a list of strings. """ - mcp_access_groups_header = headers.get(MCPRequestHandler.LITELLM_MCP_ACCESS_GROUPS_HEADER_NAME) + mcp_access_groups_header = headers.get( + MCPRequestHandler.LITELLM_MCP_ACCESS_GROUPS_HEADER_NAME + ) if mcp_access_groups_header is not None: try: - return [s.strip() for s in mcp_access_groups_header.split(",") if s.strip()] + return [ + s.strip() for s in mcp_access_groups_header.split(",") if s.strip() + ] except Exception: return None return None @@ -516,4 +573,4 @@ class MCPRequestHandler: Extract and parse the x-mcp-access-groups header from an ASGI scope. """ headers = MCPRequestHandler._safe_get_headers_from_scope(scope) - return MCPRequestHandler.get_mcp_access_groups_from_headers(headers) \ No newline at end of file + return MCPRequestHandler.get_mcp_access_groups_from_headers(headers) diff --git a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py index b35b3ad93d..d0eadb36ba 100644 --- a/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py +++ b/litellm/proxy/_experimental/mcp_server/mcp_server_manager.py @@ -34,8 +34,6 @@ from litellm.proxy._experimental.mcp_server.utils import ( from litellm.proxy._types import ( LiteLLM_MCPServerTable, MCPAuthType, - MCPSpecVersion, - MCPSpecVersionType, MCPTransport, MCPTransportType, UserAPIKeyAuth, @@ -70,38 +68,6 @@ def _deserialize_env_dict(env_data: Any) -> Optional[Dict[str, str]]: return env_data -def _convert_protocol_version_to_enum( - protocol_version: Optional[str | MCPSpecVersionType], -) -> MCPSpecVersionType: - """ - Convert string protocol version to MCPSpecVersion enum. - - Args: - protocol_version: String protocol version, enum, or None - - Returns: - MCPSpecVersionType: The enum value - """ - if not protocol_version: - return cast(MCPSpecVersionType, MCPSpecVersion.jun_2025) - - # If it's already an MCPSpecVersion enum, return it - if isinstance(protocol_version, MCPSpecVersion): - return cast(MCPSpecVersionType, protocol_version) - - # If it's a string, try to match it to enum values - if isinstance(protocol_version, str): - for version in MCPSpecVersion: - if version.value == protocol_version: - return cast(MCPSpecVersionType, version) - - # If no match found, return default - verbose_logger.warning( - f"Unknown protocol version '{protocol_version}', using default" - ) - return cast(MCPSpecVersionType, MCPSpecVersion.jun_2025) - - class MCPServerManager: def __init__(self): self.registry: Dict[str, MCPServer] = {} @@ -113,8 +79,7 @@ class MCPServerManager: "name": "zapier_mcp_server", "url": "https://actions.zapier.com/mcp/sk-ak-2ew3bofIeQIkNoeKIdXrF1Hhhp/sse" "transport": "sse", - "auth_type": "api_key", - "spec_version": "2025-03-26" + "auth_type": "api_key" }, "uuid-2": { "name": "google_drive_mcp_server", @@ -223,7 +188,6 @@ class MCPServerManager: server_name=server_name, url=server_config.get("url", None) or "", transport=server_config.get("transport", MCPTransport.http), - spec_version=server_config.get("spec_version", MCPSpecVersion.jun_2025), auth_type=server_config.get("auth_type", None), alias=alias, ) @@ -239,7 +203,6 @@ class MCPServerManager: env=server_config.get("env", None) or {}, # TODO: utility fn the default values transport=server_config.get("transport", MCPTransport.http), - spec_version=server_config.get("spec_version", MCPSpecVersion.jun_2025), auth_type=server_config.get("auth_type", None), authentication_token=server_config.get( "authentication_token", server_config.get("auth_value", None) @@ -287,7 +250,6 @@ class MCPServerManager: server_name=getattr(mcp_server, "server_name", None), url=mcp_server.url, transport=cast(MCPTransportType, mcp_server.transport), - spec_version=_convert_protocol_version_to_enum(mcp_server.spec_version), auth_type=cast(MCPAuthType, mcp_server.auth_type), mcp_info=MCPInfo( server_name=mcp_server.server_name or mcp_server.server_id, @@ -350,7 +312,6 @@ class MCPServerManager: user_api_key_auth: Optional[UserAPIKeyAuth] = None, mcp_auth_header: Optional[str] = None, mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, ) -> List[MCPTool]: """ List all tools available across all MCP Servers. @@ -390,7 +351,6 @@ class MCPServerManager: tools = await self._get_tools_from_server( server=server, mcp_auth_header=server_auth_header, - mcp_protocol_version=mcp_protocol_version, ) list_tools_result.extend(tools) verbose_logger.info( @@ -414,7 +374,6 @@ class MCPServerManager: self, server: MCPServer, mcp_auth_header: Optional[str] = None, - protocol_version: Optional[str] = None, ) -> MCPClient: """ Create an MCPClient instance for the given server. @@ -422,18 +381,12 @@ class MCPServerManager: Args: server (MCPServer): The server configuration mcp_auth_header: MCP auth header to be passed to the MCP server. This is optional and will be used if provided. - protocol_version: Optional MCP protocol version to use. If not provided, uses server's default. Returns: MCPClient: Configured MCP client instance """ transport = server.transport or MCPTransport.sse - # Convert protocol version string to enum - protocol_version_enum = _convert_protocol_version_to_enum( - protocol_version or server.spec_version - ) - # Handle stdio transport if transport == MCPTransport.stdio: # For stdio, we need to get the stdio config from the server @@ -450,7 +403,6 @@ class MCPServerManager: auth_value=mcp_auth_header or server.authentication_token, timeout=60.0, stdio_config=stdio_config, - protocol_version=protocol_version_enum, ) else: # For HTTP/SSE transports @@ -461,14 +413,12 @@ class MCPServerManager: auth_type=server.auth_type, auth_value=mcp_auth_header or server.authentication_token, timeout=60.0, - protocol_version=protocol_version_enum, ) async def _get_tools_from_server( self, server: MCPServer, mcp_auth_header: Optional[str] = None, - mcp_protocol_version: Optional[str] = None, ) -> List[MCPTool]: """ Helper method to get tools from a single MCP server with prefixed names. @@ -483,22 +433,18 @@ class MCPServerManager: verbose_logger.debug(f"Connecting to url: {server.url}") verbose_logger.info(f"_get_tools_from_server for {server.name}...") - protocol_version = ( - mcp_protocol_version if mcp_protocol_version else server.spec_version - ) client = None try: client = self._create_mcp_client( server=server, mcp_auth_header=mcp_auth_header, - protocol_version=protocol_version, ) tools = await self._fetch_tools_with_timeout(client, server.name) - + prefixed_tools = self._create_prefixed_tools(tools, server) - + return prefixed_tools except Exception as e: @@ -530,7 +476,7 @@ class MCPServerManager: async def _list_tools_task(): try: await client.connect() - + tools = await client.list_tools() verbose_logger.debug(f"Tools from {server_name}: {tools}") return tools @@ -609,7 +555,6 @@ class MCPServerManager: user_api_key_auth: Optional[UserAPIKeyAuth] = None, mcp_auth_header: Optional[str] = None, mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, proxy_logging_obj: Optional[ProxyLogging] = None, ) -> CallToolResult: """ @@ -660,32 +605,54 @@ class MCPServerManager: "arguments": arguments, "server_name": server_name_from_prefix, "user_api_key_auth": user_api_key_auth, - "user_api_key_user_id": getattr(user_api_key_auth, 'user_id', None) if user_api_key_auth else None, - "user_api_key_team_id": getattr(user_api_key_auth, 'team_id', None) if user_api_key_auth else None, - "user_api_key_end_user_id": getattr(user_api_key_auth, 'end_user_id', None) if user_api_key_auth else None, - "user_api_key_hash": getattr(user_api_key_auth, 'api_key_hash', None) if user_api_key_auth else None, + "user_api_key_user_id": getattr(user_api_key_auth, "user_id", None) + if user_api_key_auth + else None, + "user_api_key_team_id": getattr(user_api_key_auth, "team_id", None) + if user_api_key_auth + else None, + "user_api_key_end_user_id": getattr( + user_api_key_auth, "end_user_id", None + ) + if user_api_key_auth + else None, + "user_api_key_hash": getattr(user_api_key_auth, "api_key_hash", None) + if user_api_key_auth + else None, } - + # Create MCP request object for processing - mcp_request_obj = proxy_logging_obj._create_mcp_request_object_from_kwargs(pre_hook_kwargs) - + mcp_request_obj = proxy_logging_obj._create_mcp_request_object_from_kwargs( + pre_hook_kwargs + ) + # Convert to LLM format for existing guardrail compatibility - synthetic_llm_data = proxy_logging_obj._convert_mcp_to_llm_format(mcp_request_obj, pre_hook_kwargs) - + synthetic_llm_data = proxy_logging_obj._convert_mcp_to_llm_format( + mcp_request_obj, pre_hook_kwargs + ) + try: # Use standard pre_call_hook with call_type="mcp_call" modified_data = await proxy_logging_obj.pre_call_hook( - user_api_key_dict=user_api_key_auth, #type: ignore + user_api_key_dict=user_api_key_auth, # type: ignore data=synthetic_llm_data, - call_type="mcp_call" #type: ignore + call_type="mcp_call", # type: ignore ) if modified_data: # Convert response back to MCP format and apply modifications - modified_kwargs = proxy_logging_obj._convert_mcp_hook_response_to_kwargs(modified_data, pre_hook_kwargs) + modified_kwargs = ( + proxy_logging_obj._convert_mcp_hook_response_to_kwargs( + modified_data, pre_hook_kwargs + ) + ) if modified_kwargs.get("arguments") != arguments: arguments = modified_kwargs["arguments"] - - except (BlockedPiiEntityError, GuardrailRaisedException, HTTPException) as e: + + except ( + BlockedPiiEntityError, + GuardrailRaisedException, + HTTPException, + ) as e: # Re-raise guardrail exceptions to properly fail the MCP call verbose_logger.error( f"Guardrail blocked MCP tool call pre call: {str(e)}" @@ -706,11 +673,9 @@ class MCPServerManager: client = self._create_mcp_client( server=mcp_server, mcp_auth_header=server_auth_header, - protocol_version=mcp_protocol_version, ) async with client: - # Use the original tool name (without prefix) for the actual call call_tool_params = MCPCallToolRequestParams( name=original_tool_name, @@ -721,7 +686,7 @@ class MCPServerManager: # Create synthetic LLM data for during hook processing from litellm.types.llms.base import HiddenParams from litellm.types.mcp import MCPDuringCallRequestObject - + request_obj = MCPDuringCallRequestObject( tool_name=name, arguments=arguments, @@ -729,28 +694,29 @@ class MCPServerManager: start_time=start_time.timestamp() if start_time else None, hidden_params=HiddenParams(), ) - + during_hook_kwargs = { "name": name, "arguments": arguments, "server_name": server_name_from_prefix, "user_api_key_auth": user_api_key_auth, } - - synthetic_llm_data = proxy_logging_obj._convert_mcp_to_llm_format(request_obj, during_hook_kwargs) - + + synthetic_llm_data = proxy_logging_obj._convert_mcp_to_llm_format( + request_obj, during_hook_kwargs + ) + during_hook_task = asyncio.create_task( proxy_logging_obj.during_call_hook( user_api_key_dict=user_api_key_auth, data=synthetic_llm_data, - call_type="mcp_call" #type: ignore + call_type="mcp_call", # type: ignore ) ) tasks.append(during_hook_task) tasks.append(asyncio.create_task(client.call_tool(call_tool_params))) try: - mcp_responses = await asyncio.gather(*tasks) # If proxy_logging_obj is None, the tool call result is at index 0 @@ -839,19 +805,21 @@ class MCPServerManager: ) verbose_logger.info("Loading MCP servers from database into registry...") - + # perform authz check to filter the mcp servers user has access to prisma_client = get_prisma_client_or_throw( "Database not connected. Connect a database to your proxy" ) db_mcp_servers = await get_all_mcp_servers(prisma_client) verbose_logger.info(f"Found {len(db_mcp_servers)} MCP servers in database") - + # ensure the global_mcp_server_manager is up to date with the db for server in db_mcp_servers: - verbose_logger.debug(f"Adding server to registry: {server.server_id} ({server.server_name})") + verbose_logger.debug( + f"Adding server to registry: {server.server_id} ({server.server_name})" + ) self.add_update_server(server) - + verbose_logger.info(f"Registry now contains {len(self.get_registry())} servers") def get_mcp_server_by_id(self, server_id: str) -> Optional[MCPServer]: @@ -869,7 +837,6 @@ class MCPServerManager: server_name: str, url: str, transport: str, - spec_version: str, auth_type: Optional[str] = None, alias: Optional[str] = None, ) -> str: @@ -885,7 +852,6 @@ class MCPServerManager: server_name: Name of the server url: Server URL transport: Transport type (sse, http, etc.) - spec_version: MCP spec version auth_type: Authentication type (optional) alias: Server alias (optional) @@ -893,7 +859,9 @@ class MCPServerManager: A deterministic server ID string """ # Create a string from all the identifying parameters - params_string = f"{server_name}|{url}|{transport}|{spec_version}|{auth_type or ''}|{alias or ''}" + params_string = ( + f"{server_name}|{url}|{transport}|{auth_type or ''}|{alias or ''}" + ) # Generate SHA-256 hash hash_object = hashlib.sha256(params_string.encode("utf-8")) @@ -1050,11 +1018,12 @@ class MCPServerManager: alias=_server_config.alias, url=_server_config.url, transport=_server_config.transport, - spec_version=_server_config.spec_version, auth_type=_server_config.auth_type, created_at=datetime.datetime.now(), updated_at=datetime.datetime.now(), - description=_server_config.mcp_info.get("description") if _server_config.mcp_info else None, + description=_server_config.mcp_info.get("description") + if _server_config.mcp_info + else None, mcp_info=_server_config.mcp_info, mcp_access_groups=_server_config.access_groups or [], # Stdio-specific fields @@ -1111,7 +1080,6 @@ class MCPServerManager: description=server.description, url=server.url, transport=server.transport, - spec_version=server.spec_version, auth_type=server.auth_type, created_at=server.created_at, created_by=server.created_by, diff --git a/litellm/proxy/_experimental/mcp_server/rest_endpoints.py b/litellm/proxy/_experimental/mcp_server/rest_endpoints.py index 048b25fa35..2a9174717d 100644 --- a/litellm/proxy/_experimental/mcp_server/rest_endpoints.py +++ b/litellm/proxy/_experimental/mcp_server/rest_endpoints.py @@ -23,7 +23,6 @@ router = APIRouter( if MCP_AVAILABLE: from litellm.experimental_mcp_client.client import MCPTool from litellm.proxy._experimental.mcp_server.mcp_server_manager import ( - _convert_protocol_version_to_enum, global_mcp_server_manager, ) from litellm.proxy._experimental.mcp_server.server import ( @@ -34,18 +33,24 @@ if MCP_AVAILABLE: ######################################################## ############ MCP Server REST API Routes ################# def _get_server_auth_header( - server, mcp_server_auth_headers: Optional[Dict[str, str]], mcp_auth_header: Optional[str] + server, + mcp_server_auth_headers: Optional[Dict[str, str]], + mcp_auth_header: Optional[str], ) -> Optional[str]: """Helper function to get server-specific auth header with case-insensitive matching.""" if mcp_server_auth_headers and server.alias: normalized_server_alias = server.alias.lower() - normalized_headers = {k.lower(): v for k, v in mcp_server_auth_headers.items()} + normalized_headers = { + k.lower(): v for k, v in mcp_server_auth_headers.items() + } server_auth = normalized_headers.get(normalized_server_alias) if server_auth is not None: return server_auth elif mcp_server_auth_headers and server.server_name: normalized_server_name = server.server_name.lower() - normalized_headers = {k.lower(): v for k, v in mcp_server_auth_headers.items()} + normalized_headers = { + k.lower(): v for k, v in mcp_server_auth_headers.items() + } server_auth = normalized_headers.get(normalized_server_name) if server_auth is not None: return server_auth @@ -63,12 +68,11 @@ if MCP_AVAILABLE: for tool in tools ] - async def _get_tools_for_single_server(server, server_auth_header, mcp_protocol_version): + async def _get_tools_for_single_server(server, server_auth_header): """Helper function to get tools for a single server.""" tools = await global_mcp_server_manager._get_tools_from_server( server=server, mcp_auth_header=server_auth_header, - mcp_protocol_version=mcp_protocol_version, ) return _create_tool_response_objects(tools, server.mcp_info) @@ -104,17 +108,20 @@ if MCP_AVAILABLE: from litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp import ( MCPRequestHandler, ) - + try: # Extract auth headers from request headers = request.headers - mcp_auth_header = MCPRequestHandler._get_mcp_auth_header_from_headers(headers) - mcp_server_auth_headers = MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers) - mcp_protocol_version = headers.get(MCPRequestHandler.MCP_PROTOCOL_VERSION_HEADER_NAME) - + mcp_auth_header = MCPRequestHandler._get_mcp_auth_header_from_headers( + headers + ) + mcp_server_auth_headers = ( + MCPRequestHandler._get_mcp_server_auth_headers_from_headers(headers) + ) + list_tools_result = [] error_message = None - + # If server_id is specified, only query that specific server if server_id: server = global_mcp_server_manager.get_mcp_server_by_id(server_id) @@ -122,49 +129,67 @@ if MCP_AVAILABLE: return { "tools": [], "error": "server_not_found", - "message": f"Server with id {server_id} not found" + "message": f"Server with id {server_id} not found", } - - server_auth_header = _get_server_auth_header(server, mcp_server_auth_headers, mcp_auth_header) - + + server_auth_header = _get_server_auth_header( + server, mcp_server_auth_headers, mcp_auth_header + ) + try: - list_tools_result = await _get_tools_for_single_server(server, server_auth_header, mcp_protocol_version) + list_tools_result = await _get_tools_for_single_server( + server, server_auth_header + ) except Exception as e: - verbose_logger.exception(f"Error getting tools from {server.name}: {e}") + verbose_logger.exception( + f"Error getting tools from {server.name}: {e}" + ) return { "tools": [], "error": "server_error", - "message": f"Failed to get tools from server {server.name}: {str(e)}" + "message": f"Failed to get tools from server {server.name}: {str(e)}", } else: # Query all servers errors = [] for server in global_mcp_server_manager.get_registry().values(): - server_auth_header = _get_server_auth_header(server, mcp_server_auth_headers, mcp_auth_header) - + server_auth_header = _get_server_auth_header( + server, mcp_server_auth_headers, mcp_auth_header + ) + try: - tools_result = await _get_tools_for_single_server(server, server_auth_header, mcp_protocol_version) + tools_result = await _get_tools_for_single_server( + server, server_auth_header + ) list_tools_result.extend(tools_result) except Exception as e: - verbose_logger.exception(f"Error getting tools from {server.name}: {e}") + verbose_logger.exception( + f"Error getting tools from {server.name}: {e}" + ) errors.append(f"{server.name}: {str(e)}") continue - + if errors and not list_tools_result: - error_message = "Failed to get tools from servers: " + "; ".join(errors) - + error_message = "Failed to get tools from servers: " + "; ".join( + errors + ) + return { "tools": list_tools_result, "error": "partial_failure" if error_message else None, - "message": error_message if error_message else "Successfully retrieved tools" + "message": error_message + if error_message + else "Successfully retrieved tools", } - + except Exception as e: - verbose_logger.exception("Unexpected error in list_tool_rest_api: %s", str(e)) + verbose_logger.exception( + "Unexpected error in list_tool_rest_api: %s", str(e) + ) return { "tools": [], "error": "unexpected_error", - "message": f"An unexpected error occurred: {str(e)}" + "message": f"An unexpected error occurred: {str(e)}", } @router.post("/tools/call", dependencies=[Depends(user_api_key_auth)]) @@ -196,9 +221,9 @@ if MCP_AVAILABLE: detail={ "error": "blocked_pii_entity", "message": str(e), - "entity_type": getattr(e, 'entity_type', None), - "guardrail_name": getattr(e, 'guardrail_name', None) - } + "entity_type": getattr(e, "entity_type", None), + "guardrail_name": getattr(e, "guardrail_name", None), + }, ) except GuardrailRaisedException as e: verbose_logger.error(f"GuardrailRaisedException in MCP tool call: {str(e)}") @@ -207,8 +232,8 @@ if MCP_AVAILABLE: detail={ "error": "guardrail_violation", "message": str(e), - "guardrail_name": getattr(e, 'guardrail_name', None) - } + "guardrail_name": getattr(e, "guardrail_name", None), + }, ) except HTTPException as e: # Re-raise HTTPException as-is to preserve status code and detail @@ -220,10 +245,10 @@ if MCP_AVAILABLE: status_code=500, detail={ "error": "internal_server_error", - "message": f"An unexpected error occurred: {str(e)}" - } + "message": f"An unexpected error occurred: {str(e)}", + }, ) - + ######################################################## # MCP Connection testing routes # /health -> Test if we can connect to the MCP server @@ -234,15 +259,15 @@ if MCP_AVAILABLE: from litellm.proxy.management_endpoints.mcp_management_endpoints import ( NewMCPServerRequest, ) - + async def _execute_with_mcp_client(request: NewMCPServerRequest, operation): """ Common helper to create MCP client, execute operation, and ensure proper cleanup. - + Args: request: MCP server configuration operation: Async function that takes a client and returns the operation result - + Returns: Operation result or error response """ @@ -254,15 +279,14 @@ if MCP_AVAILABLE: name=request.alias or request.server_name or "", url=request.url, transport=request.transport, - spec_version=_convert_protocol_version_to_enum(request.spec_version), auth_type=request.auth_type, mcp_info=request.mcp_info, ), mcp_auth_header=None, ) - + return await operation(client) - + except Exception as e: verbose_logger.error(f"Error in MCP operation: {e}", exc_info=True) return {"status": "error", "message": "An internal error has occurred."} @@ -273,6 +297,7 @@ if MCP_AVAILABLE: await client.disconnect() except Exception as e: verbose_logger.warning(f"Error disconnecting MCP client: {e}") + @router.post("/test/connection") async def test_connection( request: NewMCPServerRequest, @@ -280,13 +305,13 @@ if MCP_AVAILABLE: """ Test if we can connect to the provided MCP server before adding it """ + async def _test_connection_operation(client): await client.connect() return {"status": "ok"} - + return await _execute_with_mcp_client(request, _test_connection_operation) - - + @router.post("/test/tools/list") async def test_tools_list( request: NewMCPServerRequest, @@ -295,13 +320,16 @@ if MCP_AVAILABLE: """ Preview tools available from MCP server before adding it """ + async def _list_tools_operation(client): list_tools_result: List[MCPTool] = await client.list_tools() - model_dumped_tools: List[dict] = [tool.model_dump() for tool in list_tools_result] + model_dumped_tools: List[dict] = [ + tool.model_dump() for tool in list_tools_result + ] return { "tools": model_dumped_tools, "error": None, - "message": "Successfully retrieved tools" + "message": "Successfully retrieved tools", } - + return await _execute_with_mcp_client(request, _list_tools_operation) diff --git a/litellm/proxy/_experimental/mcp_server/server.py b/litellm/proxy/_experimental/mcp_server/server.py index 51c19beb78..2cf91c84dc 100644 --- a/litellm/proxy/_experimental/mcp_server/server.py +++ b/litellm/proxy/_experimental/mcp_server/server.py @@ -130,7 +130,9 @@ if MCP_AVAILABLE: await _sse_session_manager_cm.__aenter__() _SESSION_MANAGERS_INITIALIZED = True - verbose_logger.info("MCP Server started with StreamableHTTP and SSE session managers!") + verbose_logger.info( + "MCP Server started with StreamableHTTP and SSE session managers!" + ) async def shutdown_session_managers(): """Shutdown the session managers.""" @@ -171,11 +173,18 @@ if MCP_AVAILABLE: """ try: # Get user authentication from context variable - user_api_key_auth, mcp_auth_header, mcp_servers, mcp_server_auth_headers, mcp_protocol_version = ( - get_auth_context() + ( + user_api_key_auth, + mcp_auth_header, + mcp_servers, + mcp_server_auth_headers, + ) = get_auth_context() + verbose_logger.debug( + f"MCP list_tools - User API Key Auth from context: {user_api_key_auth}" + ) + verbose_logger.debug( + f"MCP list_tools - MCP servers from context: {mcp_servers}" ) - verbose_logger.debug(f"MCP list_tools - User API Key Auth from context: {user_api_key_auth}") - verbose_logger.debug(f"MCP list_tools - MCP servers from context: {mcp_servers}") verbose_logger.debug( f"MCP list_tools - MCP server auth headers: {list(mcp_server_auth_headers.keys()) if mcp_server_auth_headers else None}" ) @@ -186,9 +195,10 @@ if MCP_AVAILABLE: mcp_auth_header=mcp_auth_header, mcp_servers=mcp_servers, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, ) - verbose_logger.info(f"MCP list_tools - Successfully returned {len(tools)} tools") + verbose_logger.info( + f"MCP list_tools - Successfully returned {len(tools)} tools" + ) return tools except Exception as e: verbose_logger.exception(f"Error in list_tools endpoint: {str(e)}") @@ -220,9 +230,16 @@ if MCP_AVAILABLE: from litellm.proxy.proxy_server import proxy_config # Validate arguments - user_api_key_auth, mcp_auth_header, _, mcp_server_auth_headers, mcp_protocol_version = get_auth_context() + ( + user_api_key_auth, + mcp_auth_header, + _, + mcp_server_auth_headers, + ) = get_auth_context() - verbose_logger.debug(f"MCP mcp_server_tool_call - User API Key Auth from context: {user_api_key_auth}") + verbose_logger.debug( + f"MCP mcp_server_tool_call - User API Key Auth from context: {user_api_key_auth}" + ) try: # Create a body date for logging body_data = {"name": name, "arguments": arguments} @@ -249,17 +266,22 @@ if MCP_AVAILABLE: user_api_key_auth=user_api_key_auth, mcp_auth_header=mcp_auth_header, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, **data, # for logging ) except BlockedPiiEntityError as e: verbose_logger.error(f"BlockedPiiEntityError in MCP tool call: {str(e)}") # Return error as text content for MCP protocol - return [TextContent(text=f"Error: Blocked PII entity detected - {str(e)}", type="text")] + return [ + TextContent( + text=f"Error: Blocked PII entity detected - {str(e)}", type="text" + ) + ] except GuardrailRaisedException as e: verbose_logger.error(f"GuardrailRaisedException in MCP tool call: {str(e)}") # Return error as text content for MCP protocol - return [TextContent(text=f"Error: Guardrail violation - {str(e)}", type="text")] + return [ + TextContent(text=f"Error: Guardrail violation - {str(e)}", type="text") + ] except HTTPException as e: verbose_logger.error(f"HTTPException in MCP tool call: {str(e)}") # Return error as text content for MCP protocol @@ -287,6 +309,7 @@ if MCP_AVAILABLE: Get the filtered MCP servers from the MCP server names """ from typing import Set + filtered_server_ids: Set[str] = set() # Filter servers based on mcp_servers parameter if provided if mcp_servers is not None: @@ -297,7 +320,11 @@ if MCP_AVAILABLE: server = global_mcp_server_manager.get_mcp_server_by_id(server_id) if server: - match_list = [s.lower() for s in [server.alias, server.server_name, server_id] if s is not None] + match_list = [ + s.lower() + for s in [server.alias, server.server_name, server_id] + if s is not None + ] if server_or_group.lower() in match_list: filtered_server_ids.add(server_id) @@ -306,19 +333,23 @@ if MCP_AVAILABLE: if not server_name_matched: try: - access_group_server_ids = await MCPRequestHandler._get_mcp_servers_from_access_groups( - [server_or_group] + access_group_server_ids = ( + await MCPRequestHandler._get_mcp_servers_from_access_groups( + [server_or_group] + ) ) # Only include servers that the user has access to for server_id in access_group_server_ids: if server_id in allowed_mcp_servers: filtered_server_ids.add(server_id) except Exception as e: - verbose_logger.debug(f"Could not resolve '{server_or_group}' as access group: {e}") + verbose_logger.debug( + f"Could not resolve '{server_or_group}' as access group: {e}" + ) if filtered_server_ids: allowed_mcp_servers = list(filtered_server_ids) - + return allowed_mcp_servers async def _get_tools_from_mcp_servers( @@ -326,7 +357,6 @@ if MCP_AVAILABLE: mcp_auth_header: Optional[str], mcp_servers: Optional[List[str]], mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, ) -> List[MCPTool]: """ Helper method to fetch tools from MCP servers based on server filtering criteria. @@ -344,7 +374,9 @@ if MCP_AVAILABLE: return [] # Get allowed MCP servers based on user permissions - allowed_mcp_servers = await global_mcp_server_manager.get_allowed_mcp_servers(user_api_key_auth) + allowed_mcp_servers = await global_mcp_server_manager.get_allowed_mcp_servers( + user_api_key_auth + ) if mcp_servers is not None: allowed_mcp_servers = await _get_allowed_mcp_servers_from_mcp_server_names( @@ -352,7 +384,6 @@ if MCP_AVAILABLE: allowed_mcp_servers=allowed_mcp_servers, ) - # Get tools from each allowed server all_tools = [] for server_id in allowed_mcp_servers: @@ -375,15 +406,20 @@ if MCP_AVAILABLE: tools = await global_mcp_server_manager._get_tools_from_server( server=server, mcp_auth_header=server_auth_header, - mcp_protocol_version=mcp_protocol_version, ) all_tools.extend(tools) - verbose_logger.debug(f"Successfully fetched {len(tools)} tools from server {server.name}") + verbose_logger.debug( + f"Successfully fetched {len(tools)} tools from server {server.name}" + ) except Exception as e: - verbose_logger.exception(f"Error getting tools from server {server.name}: {str(e)}") + verbose_logger.exception( + f"Error getting tools from server {server.name}: {str(e)}" + ) # Continue with other servers instead of failing completely - verbose_logger.info(f"Successfully fetched {len(all_tools)} tools total from all MCP servers") + verbose_logger.info( + f"Successfully fetched {len(all_tools)} tools total from all MCP servers" + ) return all_tools async def _list_mcp_tools( @@ -391,7 +427,6 @@ if MCP_AVAILABLE: mcp_auth_header: Optional[str] = None, mcp_servers: Optional[List[str]] = None, mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, ) -> List[MCPTool]: """ List all available MCP tools. @@ -415,11 +450,14 @@ if MCP_AVAILABLE: mcp_auth_header=mcp_auth_header, mcp_servers=mcp_servers, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, ) - verbose_logger.debug(f"Successfully fetched {len(managed_tools)} tools from managed MCP servers") + verbose_logger.debug( + f"Successfully fetched {len(managed_tools)} tools from managed MCP servers" + ) except Exception as e: - verbose_logger.exception(f"Error getting tools from managed MCP servers: {str(e)}") + verbose_logger.exception( + f"Error getting tools from managed MCP servers: {str(e)}" + ) # Continue with empty managed tools list instead of failing completely # Get tools from local registry @@ -430,10 +468,16 @@ if MCP_AVAILABLE: # Convert local tools to MCPTool format for tool in local_tools_raw: # Convert from litellm.types.mcp_server.tool_registry.MCPTool to mcp.types.Tool - mcp_tool = MCPTool(name=tool.name, description=tool.description, inputSchema=tool.input_schema) + mcp_tool = MCPTool( + name=tool.name, + description=tool.description, + inputSchema=tool.input_schema, + ) local_tools.append(mcp_tool) except Exception as e: - verbose_logger.exception(f"Error getting tools from local registry: {str(e)}") + verbose_logger.exception( + f"Error getting tools from local registry: {str(e)}" + ) # Continue with empty local tools list instead of failing completely # Combine all tools @@ -448,7 +492,6 @@ if MCP_AVAILABLE: user_api_key_auth: Optional[UserAPIKeyAuth] = None, mcp_auth_header: Optional[str] = None, mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, **kwargs: Any, ) -> List[Union[TextContent, ImageContent, EmbeddedResource]]: """ @@ -456,35 +499,46 @@ if MCP_AVAILABLE: """ start_time = datetime.now() if arguments is None: - raise HTTPException(status_code=400, detail="Request arguments are required") + raise HTTPException( + status_code=400, detail="Request arguments are required" + ) # Remove prefix from tool name for logging and processing - original_tool_name, server_name_from_prefix = get_server_name_prefix_tool_mcp(name) - - standard_logging_mcp_tool_call: StandardLoggingMCPToolCall = _get_standard_logging_mcp_tool_call( - name=original_tool_name, # Use original name for logging - arguments=arguments, - server_name=server_name_from_prefix, + original_tool_name, server_name_from_prefix = get_server_name_prefix_tool_mcp( + name + ) + + standard_logging_mcp_tool_call: StandardLoggingMCPToolCall = ( + _get_standard_logging_mcp_tool_call( + name=original_tool_name, # Use original name for logging + arguments=arguments, + server_name=server_name_from_prefix, + ) + ) + litellm_logging_obj: Optional[LiteLLMLoggingObj] = kwargs.get( + "litellm_logging_obj", None ) - litellm_logging_obj: Optional[LiteLLMLoggingObj] = kwargs.get("litellm_logging_obj", None) if litellm_logging_obj: - litellm_logging_obj.model_call_details["mcp_tool_call_metadata"] = standard_logging_mcp_tool_call + litellm_logging_obj.model_call_details[ + "mcp_tool_call_metadata" + ] = standard_logging_mcp_tool_call litellm_logging_obj.model = f"MCP: {name}" # Try managed server tool first (pass the full prefixed name) # Primary and recommended way to use MCP servers ######################################################### - mcp_server: Optional[MCPServer] = global_mcp_server_manager._get_mcp_server_from_tool_name(name) + mcp_server: Optional[ + MCPServer + ] = global_mcp_server_manager._get_mcp_server_from_tool_name(name) if mcp_server: - standard_logging_mcp_tool_call["mcp_server_cost_info"] = (mcp_server.mcp_info or {}).get( - "mcp_server_cost_info" - ) + standard_logging_mcp_tool_call["mcp_server_cost_info"] = ( + mcp_server.mcp_info or {} + ).get("mcp_server_cost_info") response = await _handle_managed_mcp_tool( name=name, # Pass the full name (potentially prefixed) arguments=arguments, user_api_key_auth=user_api_key_auth, mcp_auth_header=mcp_auth_header, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, litellm_logging_obj=litellm_logging_obj, ) @@ -537,7 +591,6 @@ if MCP_AVAILABLE: user_api_key_auth: Optional[UserAPIKeyAuth] = None, mcp_auth_header: Optional[str] = None, mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, litellm_logging_obj: Optional[Any] = None, ) -> List[Union[TextContent, ImageContent, EmbeddedResource]]: """Handle tool execution for managed server tools""" @@ -577,12 +630,39 @@ if MCP_AVAILABLE: Get the MCP servers from the path """ import re + mcp_servers_from_path: Optional[List[str]] = None - mcp_path_match = re.match(r"^/mcp/([^/]+/[^/]+|[^/]+)(/.*)?$", path) + # Match /mcp/ + # Where servers can be comma-separated list of server names + # Server names can contain slashes (e.g., "custom_solutions/user_123") + mcp_path_match = re.match(r"^/mcp/([^?#]+)(?:\?.*)?(?:#.*)?$", path) if mcp_path_match: - mcp_servers_str = mcp_path_match.group(1) - if mcp_servers_str: - mcp_servers_from_path = [s.strip() for s in mcp_servers_str.split(",") if s.strip()] + servers_and_path = mcp_path_match.group(1) + + if servers_and_path: + # Check if it contains commas (comma-separated servers) + if ',' in servers_and_path: + # For comma-separated, look for a path at the end + # Common patterns: /tools, /chat/completions, etc. + path_match = re.search(r'/([^/,]+(?:/[^/,]+)*)$', servers_and_path) + if path_match: + # Path found at the end, remove it from servers + path_part = '/' + path_match.group(1) + servers_part = servers_and_path[:-len(path_part)] + mcp_servers_from_path = [s.strip() for s in servers_part.split(',') if s.strip()] + else: + # No path, just comma-separated servers + mcp_servers_from_path = [s.strip() for s in servers_and_path.split(',') if s.strip()] + else: + # Single server case - use regex approach for server/path separation + # This handles cases like "custom_solutions/user_123/chat/completions" + # where we want to extract "custom_solutions/user_123" as the server name + single_server_match = re.match(r"^([^/]+(?:/[^/]+)?)(?:/.*)?$", servers_and_path) + if single_server_match: + server_name = single_server_match.group(1) + mcp_servers_from_path = [server_name] + else: + mcp_servers_from_path = [servers_and_path] return mcp_servers_from_path async def extract_mcp_auth_context(scope, path): @@ -597,7 +677,6 @@ if MCP_AVAILABLE: mcp_auth_header, _, mcp_server_auth_headers, - mcp_protocol_version, ) = await MCPRequestHandler.process_mcp_request(scope) mcp_servers = mcp_servers_from_path else: @@ -606,11 +685,12 @@ if MCP_AVAILABLE: mcp_auth_header, mcp_servers, mcp_server_auth_headers, - mcp_protocol_version, ) = await MCPRequestHandler.process_mcp_request(scope) - return user_api_key_auth, mcp_auth_header, mcp_servers, mcp_server_auth_headers, mcp_protocol_version + return user_api_key_auth, mcp_auth_header, mcp_servers, mcp_server_auth_headers - async def handle_streamable_http_mcp(scope: Scope, receive: Receive, send: Send) -> None: + async def handle_streamable_http_mcp( + scope: Scope, receive: Receive, send: Send + ) -> None: """Handle MCP requests through StreamableHTTP.""" try: path = scope.get("path", "") @@ -619,20 +699,19 @@ if MCP_AVAILABLE: mcp_auth_header, mcp_servers, mcp_server_auth_headers, - mcp_protocol_version, ) = await extract_mcp_auth_context(scope, path) - verbose_logger.debug(f"MCP request mcp_servers (header/path): {mcp_servers}") + verbose_logger.debug( + f"MCP request mcp_servers (header/path): {mcp_servers}" + ) verbose_logger.debug( f"MCP server auth headers: {list(mcp_server_auth_headers.keys()) if mcp_server_auth_headers else None}" ) - verbose_logger.debug(f"MCP protocol version: {mcp_protocol_version}") # Set the auth context variable for easy access in MCP functions set_auth_context( user_api_key_auth=user_api_key_auth, mcp_auth_header=mcp_auth_header, mcp_servers=mcp_servers, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, ) # Ensure session managers are initialized @@ -656,7 +735,9 @@ if MCP_AVAILABLE: ) await error_response(scope, receive, send) except Exception as response_error: - verbose_logger.exception(f"Failed to send error response: {response_error}") + verbose_logger.exception( + f"Failed to send error response: {response_error}" + ) # If we can't send a proper response, re-raise the original error raise e @@ -669,19 +750,18 @@ if MCP_AVAILABLE: mcp_auth_header, mcp_servers, mcp_server_auth_headers, - mcp_protocol_version, ) = await extract_mcp_auth_context(scope, path) - verbose_logger.debug(f"MCP request mcp_servers (header/path): {mcp_servers}") + verbose_logger.debug( + f"MCP request mcp_servers (header/path): {mcp_servers}" + ) verbose_logger.debug( f"MCP server auth headers: {list(mcp_server_auth_headers.keys()) if mcp_server_auth_headers else None}" ) - verbose_logger.debug(f"MCP protocol version: {mcp_protocol_version}") set_auth_context( user_api_key_auth=user_api_key_auth, mcp_auth_header=mcp_auth_header, mcp_servers=mcp_servers, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, ) if not _SESSION_MANAGERS_INITIALIZED: @@ -703,7 +783,9 @@ if MCP_AVAILABLE: ) await error_response(scope, receive, send) except Exception as response_error: - verbose_logger.exception(f"Failed to send error response: {response_error}") + verbose_logger.exception( + f"Failed to send error response: {response_error}" + ) # If we can't send a proper response, re-raise the original error raise e @@ -739,7 +821,6 @@ if MCP_AVAILABLE: mcp_auth_header: Optional[str] = None, mcp_servers: Optional[List[str]] = None, mcp_server_auth_headers: Optional[Dict[str, str]] = None, - mcp_protocol_version: Optional[str] = None, ) -> None: """ Set the UserAPIKeyAuth in the auth context variable. @@ -755,13 +836,17 @@ if MCP_AVAILABLE: mcp_auth_header=mcp_auth_header, mcp_servers=mcp_servers, mcp_server_auth_headers=mcp_server_auth_headers, - mcp_protocol_version=mcp_protocol_version, ) auth_context_var.set(auth_user) - def get_auth_context() -> Tuple[ - Optional[UserAPIKeyAuth], Optional[str], Optional[List[str]], Optional[Dict[str, str]], Optional[str] - ]: + def get_auth_context() -> ( + Tuple[ + Optional[UserAPIKeyAuth], + Optional[str], + Optional[List[str]], + Optional[Dict[str, str]], + ] + ): """ Get the UserAPIKeyAuth from the auth context variable. @@ -776,9 +861,8 @@ if MCP_AVAILABLE: auth_user.mcp_auth_header, auth_user.mcp_servers, auth_user.mcp_server_auth_headers, - auth_user.mcp_protocol_version, ) - return None, None, None, None, None + return None, None, None, None ######################################################## ############ End of Auth Context Functions ############# diff --git a/litellm/proxy/_experimental/out/_next/static/fhuPj8WYsuMGymIUE7Xgu/_buildManifest.js b/litellm/proxy/_experimental/out/_next/static/0oPk2eYtSaTLaPyVixqA8/_buildManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/fhuPj8WYsuMGymIUE7Xgu/_buildManifest.js rename to litellm/proxy/_experimental/out/_next/static/0oPk2eYtSaTLaPyVixqA8/_buildManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/fhuPj8WYsuMGymIUE7Xgu/_ssgManifest.js b/litellm/proxy/_experimental/out/_next/static/0oPk2eYtSaTLaPyVixqA8/_ssgManifest.js similarity index 100% rename from litellm/proxy/_experimental/out/_next/static/fhuPj8WYsuMGymIUE7Xgu/_ssgManifest.js rename to litellm/proxy/_experimental/out/_next/static/0oPk2eYtSaTLaPyVixqA8/_ssgManifest.js diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/117-a0da667066d322b6.js b/litellm/proxy/_experimental/out/_next/static/chunks/117-6a9f6a591033d4a0.js similarity index 99% rename from litellm/proxy/_experimental/out/_next/static/chunks/117-a0da667066d322b6.js rename to litellm/proxy/_experimental/out/_next/static/chunks/117-6a9f6a591033d4a0.js index 21cf536ca5..54b5be8263 100644 --- a/litellm/proxy/_experimental/out/_next/static/chunks/117-a0da667066d322b6.js +++ b/litellm/proxy/_experimental/out/_next/static/chunks/117-6a9f6a591033d4a0.js @@ -1,2 +1,2 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[117],{65157:function(e,t){"use strict";function n(){return""}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getDeploymentIdQueryOrEmptyString",{enumerable:!0,get:function(){return n}})},91572:function(){"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(e,t){return t=this.concat.apply([],this),e>1&&t.some(Array.isArray)?t.flat(e-1):t},Array.prototype.flatMap=function(e,t){return this.map(e,t).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(e){if("function"!=typeof e)return this.then(e,e);var t=this.constructor||Promise;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(e){return Array.from(e).reduce(function(e,t){return e[t[0]]=t[1],e},{})}),Array.prototype.at||(Array.prototype.at=function(e){var t=Math.trunc(e)||0;if(t<0&&(t+=this.length),!(t<0||t>=this.length))return this[t]}),Object.hasOwn||(Object.hasOwn=function(e,t){if(null==e)throw TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(Object(e),t)}),"canParse"in URL||(URL.canParse=function(e,t){try{return new URL(e,t),!0}catch(e){return!1}})},1634:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addBasePath",{enumerable:!0,get:function(){return u}});let r=n(68498),o=n(33068);function u(e,t){return(0,o.normalizePathTrailingSlash)((0,r.addPathPrefix)(e,""))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},75266:function(e,t){"use strict";function n(e){var t,n;t=self.__next_s,n=()=>{e()},t&&t.length?t.reduce((e,t)=>{let[n,r]=t;return e.then(()=>new Promise((e,t)=>{let o=document.createElement("script");if(r)for(let e in r)"children"!==e&&o.setAttribute(e,r[e]);n?(o.src=n,o.onload=()=>e(),o.onerror=t):r&&(o.innerHTML=r.children,setTimeout(e)),document.head.appendChild(o)}))},Promise.resolve()).catch(e=>{console.error(e)}).then(()=>{n()}):n()}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"appBootstrap",{enumerable:!0,get:function(){return n}}),window.next={version:"14.2.30",appDir:!0},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},83079:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"callServer",{enumerable:!0,get:function(){return o}});let r=n(12846);async function o(e,t){let n=(0,r.getServerActionDispatcher)();if(!n)throw Error("Invariant: missing action dispatcher.");return new Promise((r,o)=>{n({actionId:e,actionArgs:t,resolve:r,reject:o})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},92304:function(e,t,n){"use strict";let r,o;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hydrate",{enumerable:!0,get:function(){return x}});let u=n(47043),l=n(53099),a=n(57437);n(91572);let i=u._(n(34040)),c=l._(n(2265)),s=n(6671),f=n(48701),d=u._(n(61404)),p=n(83079),h=n(89721),y=n(2103);n(70647);let _=window.console.error;window.console.error=function(){for(var e=arguments.length,t=Array(e),n=0;n{if((0,h.isNextRouterError)(e.error)){e.preventDefault();return}});let v=document,b=new TextEncoder,g=!1,m=!1,R=null;function P(e){if(0===e[0])r=[];else if(1===e[0]){if(!r)throw Error("Unexpected server data: missing bootstrap script.");o?o.enqueue(b.encode(e[1])):r.push(e[1])}else 2===e[0]&&(R=e[1])}let j=function(){o&&!m&&(o.close(),m=!0,r=void 0),g=!0};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",j,!1):j();let O=self.__next_f=self.__next_f||[];O.forEach(P),O.push=P;let S=new ReadableStream({start(e){r&&(r.forEach(t=>{e.enqueue(b.encode(t))}),g&&!m&&(e.close(),m=!0,r=void 0)),o=e}}),E=(0,s.createFromReadableStream)(S,{callServer:p.callServer});function w(){return(0,c.use)(E)}let T=c.default.StrictMode;function M(e){let{children:t}=e;return t}function x(){let e=(0,y.createMutableActionQueue)(),t=(0,a.jsx)(T,{children:(0,a.jsx)(f.HeadManagerContext.Provider,{value:{appDir:!0},children:(0,a.jsx)(y.ActionQueueContext.Provider,{value:e,children:(0,a.jsx)(M,{children:(0,a.jsx)(w,{})})})})}),n=window.__next_root_layout_missing_tags,r=!!(null==n?void 0:n.length),o={onRecoverableError:d.default};"__next_error__"===document.documentElement.id||r?i.default.createRoot(v,o).render(t):c.default.startTransition(()=>i.default.hydrateRoot(v,t,{...o,formState:R}))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54278:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(19506),(0,n(75266).appBootstrap)(()=>{let{hydrate:e}=n(92304);n(12846),n(4707),e()}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},19506:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(65157);{let e=n.u;n.u=function(){for(var t=arguments.length,n=Array(t),r=0;r(l(function(){var e;let t=document.getElementsByName(u)[0];if(null==t?void 0:null==(e=t.shadowRoot)?void 0:e.childNodes[0])return t.shadowRoot.childNodes[0];{let e=document.createElement(u);e.style.cssText="position:absolute";let t=document.createElement("div");return t.ariaLive="assertive",t.id="__next-route-announcer__",t.role="alert",t.style.cssText="position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal",e.attachShadow({mode:"open"}).appendChild(t),document.body.appendChild(e),t}}()),()=>{let e=document.getElementsByTagName(u)[0];(null==e?void 0:e.isConnected)&&document.body.removeChild(e)}),[]);let[a,i]=(0,r.useState)(""),c=(0,r.useRef)();return(0,r.useEffect)(()=>{let e="";if(document.title)e=document.title;else{let t=document.querySelector("h1");t&&(e=t.innerText||t.textContent||"")}void 0!==c.current&&c.current!==e&&i(e),c.current=e},[t]),n?(0,o.createPortal)(a,n):null}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6866:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ACTION:function(){return r},FLIGHT_PARAMETERS:function(){return i},NEXT_DID_POSTPONE_HEADER:function(){return s},NEXT_ROUTER_PREFETCH_HEADER:function(){return u},NEXT_ROUTER_STATE_TREE:function(){return o},NEXT_RSC_UNION_QUERY:function(){return c},NEXT_URL:function(){return l},RSC_CONTENT_TYPE_HEADER:function(){return a},RSC_HEADER:function(){return n}});let n="RSC",r="Next-Action",o="Next-Router-State-Tree",u="Next-Router-Prefetch",l="Next-Url",a="text/x-component",i=[[n],[o],[u]],c="_rsc",s="x-nextjs-postponed";("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},12846:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{createEmptyCacheNode:function(){return C},default:function(){return I},getServerActionDispatcher:function(){return E},urlToUrlWithoutFlightMarker:function(){return T}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(61956),a=n(24673),i=n(33456),c=n(79060),s=n(47744),f=n(61060),d=n(82952),p=n(86146),h=n(1634),y=n(6495),_=n(4123),v=n(39320),b=n(38137),g=n(6866),m=n(35076),R=n(11283),P=n(84541),j="undefined"==typeof window,O=j?null:new Map,S=null;function E(){return S}let w={};function T(e){let t=new URL(e,location.origin);if(t.searchParams.delete(g.NEXT_RSC_UNION_QUERY),t.pathname.endsWith(".txt")){let{pathname:e}=t,n=e.endsWith("/index.txt")?10:4;t.pathname=e.slice(0,-n)}return t}function M(e){return e.origin!==window.location.origin}function x(e){let{appRouterState:t,sync:n}=e;return(0,u.useInsertionEffect)(()=>{let{tree:e,pushRef:r,canonicalUrl:o}=t,u={...r.preserveCustomHistoryState?window.history.state:{},__NA:!0,__PRIVATE_NEXTJS_INTERNALS_TREE:e};r.pendingPush&&(0,i.createHrefFromUrl)(new URL(window.location.href))!==o?(r.pendingPush=!1,window.history.pushState(u,"",o)):window.history.replaceState(u,"",o),n(t)},[t,n]),null}function C(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null}}function A(e){null==e&&(e={});let t=window.history.state,n=null==t?void 0:t.__NA;n&&(e.__NA=n);let r=null==t?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE;return r&&(e.__PRIVATE_NEXTJS_INTERNALS_TREE=r),e}function N(e){let{headCacheNode:t}=e,n=null!==t?t.head:null,r=null!==t?t.prefetchHead:null,o=null!==r?r:n;return(0,u.useDeferredValue)(n,o)}function D(e){let t,{buildId:n,initialHead:r,initialTree:i,urlParts:f,initialSeedData:g,couldBeIntercepted:E,assetPrefix:T,missingSlots:C}=e,D=(0,u.useMemo)(()=>(0,d.createInitialRouterState)({buildId:n,initialSeedData:g,urlParts:f,initialTree:i,initialParallelRoutes:O,location:j?null:window.location,initialHead:r,couldBeIntercepted:E}),[n,g,f,i,r,E]),[I,U,k]=(0,s.useReducerWithReduxDevtools)(D);(0,u.useEffect)(()=>{O=null},[]);let{canonicalUrl:F}=(0,s.useUnwrapState)(I),{searchParams:L,pathname:H}=(0,u.useMemo)(()=>{let e=new URL(F,"undefined"==typeof window?"http://n":window.location.href);return{searchParams:e.searchParams,pathname:(0,R.hasBasePath)(e.pathname)?(0,m.removeBasePath)(e.pathname):e.pathname}},[F]),$=(0,u.useCallback)(e=>{let{previousTree:t,serverResponse:n}=e;(0,u.startTransition)(()=>{U({type:a.ACTION_SERVER_PATCH,previousTree:t,serverResponse:n})})},[U]),G=(0,u.useCallback)((e,t,n)=>{let r=new URL((0,h.addBasePath)(e),location.href);return U({type:a.ACTION_NAVIGATE,url:r,isExternalUrl:M(r),locationSearch:location.search,shouldScroll:null==n||n,navigateType:t})},[U]);S=(0,u.useCallback)(e=>{(0,u.startTransition)(()=>{U({...e,type:a.ACTION_SERVER_ACTION})})},[U]);let z=(0,u.useMemo)(()=>({back:()=>window.history.back(),forward:()=>window.history.forward(),prefetch:(e,t)=>{let n;if(!(0,p.isBot)(window.navigator.userAgent)){try{n=new URL((0,h.addBasePath)(e),window.location.href)}catch(t){throw Error("Cannot prefetch '"+e+"' because it cannot be converted to a URL.")}M(n)||(0,u.startTransition)(()=>{var e;U({type:a.ACTION_PREFETCH,url:n,kind:null!=(e=null==t?void 0:t.kind)?e:a.PrefetchKind.FULL})})}},replace:(e,t)=>{void 0===t&&(t={}),(0,u.startTransition)(()=>{var n;G(e,"replace",null==(n=t.scroll)||n)})},push:(e,t)=>{void 0===t&&(t={}),(0,u.startTransition)(()=>{var n;G(e,"push",null==(n=t.scroll)||n)})},refresh:()=>{(0,u.startTransition)(()=>{U({type:a.ACTION_REFRESH,origin:window.location.origin})})},fastRefresh:()=>{throw Error("fastRefresh can only be used in development mode. Please use refresh instead.")}}),[U,G]);(0,u.useEffect)(()=>{window.next&&(window.next.router=z)},[z]),(0,u.useEffect)(()=>{function e(e){var t;e.persisted&&(null==(t=window.history.state)?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE)&&(w.pendingMpaPath=void 0,U({type:a.ACTION_RESTORE,url:new URL(window.location.href),tree:window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE}))}return window.addEventListener("pageshow",e),()=>{window.removeEventListener("pageshow",e)}},[U]);let{pushRef:B}=(0,s.useUnwrapState)(I);if(B.mpaNavigation){if(w.pendingMpaPath!==F){let e=window.location;B.pendingPush?e.assign(F):e.replace(F),w.pendingMpaPath=F}(0,u.use)(b.unresolvedThenable)}(0,u.useEffect)(()=>{let e=window.history.pushState.bind(window.history),t=window.history.replaceState.bind(window.history),n=e=>{var t;let n=window.location.href,r=null==(t=window.history.state)?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE;(0,u.startTransition)(()=>{U({type:a.ACTION_RESTORE,url:new URL(null!=e?e:n,n),tree:r})})};window.history.pushState=function(t,r,o){return(null==t?void 0:t.__NA)||(null==t?void 0:t._N)||(t=A(t),o&&n(o)),e(t,r,o)},window.history.replaceState=function(e,r,o){return(null==e?void 0:e.__NA)||(null==e?void 0:e._N)||(e=A(e),o&&n(o)),t(e,r,o)};let r=e=>{let{state:t}=e;if(t){if(!t.__NA){window.location.reload();return}(0,u.startTransition)(()=>{U({type:a.ACTION_RESTORE,url:new URL(window.location.href),tree:t.__PRIVATE_NEXTJS_INTERNALS_TREE})})}};return window.addEventListener("popstate",r),()=>{window.history.pushState=e,window.history.replaceState=t,window.removeEventListener("popstate",r)}},[U]);let{cache:W,tree:K,nextUrl:V,focusAndScrollRef:Y}=(0,s.useUnwrapState)(I),X=(0,u.useMemo)(()=>(0,v.findHeadInCache)(W,K[1]),[W,K]),q=(0,u.useMemo)(()=>(function e(t,n){for(let r of(void 0===n&&(n={}),Object.values(t[1]))){let t=r[0],o=Array.isArray(t),u=o?t[1]:t;!u||u.startsWith(P.PAGE_SEGMENT_KEY)||(o&&("c"===t[2]||"oc"===t[2])?n[t[0]]=t[1].split("/"):o&&(n[t[0]]=t[1]),n=e(r,n))}return n})(K),[K]);if(null!==X){let[e,n]=X;t=(0,o.jsx)(N,{headCacheNode:e},n)}else t=null;let J=(0,o.jsxs)(_.RedirectBoundary,{children:[t,W.rsc,(0,o.jsx)(y.AppRouterAnnouncer,{tree:K})]});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(x,{appRouterState:(0,s.useUnwrapState)(I),sync:k}),(0,o.jsx)(c.PathParamsContext.Provider,{value:q,children:(0,o.jsx)(c.PathnameContext.Provider,{value:H,children:(0,o.jsx)(c.SearchParamsContext.Provider,{value:L,children:(0,o.jsx)(l.GlobalLayoutRouterContext.Provider,{value:{buildId:n,changeByServerResponse:$,tree:K,focusAndScrollRef:Y,nextUrl:V},children:(0,o.jsx)(l.AppRouterContext.Provider,{value:z,children:(0,o.jsx)(l.LayoutRouterContext.Provider,{value:{childNodes:W.parallelRoutes,tree:K,url:F,loading:W.loading},children:J})})})})})})]})}function I(e){let{globalErrorComponent:t,...n}=e;return(0,o.jsx)(f.ErrorBoundary,{errorComponent:t,children:(0,o.jsx)(D,{...n})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},96149:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"bailoutToClientRendering",{enumerable:!0,get:function(){return u}});let r=n(18993),o=n(51845);function u(e){let t=o.staticGenerationAsyncStorage.getStore();if((null==t||!t.forceStatic)&&(null==t?void 0:t.isStaticGeneration))throw new r.BailoutToCSRError(e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},19107:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ClientPageRoot",{enumerable:!0,get:function(){return u}});let r=n(57437),o=n(54535);function u(e){let{Component:t,props:n}=e;return n.searchParams=(0,o.createDynamicallyTrackedSearchParams)(n.searchParams||{}),(0,r.jsx)(t,{...n})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},61060:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ErrorBoundary:function(){return h},ErrorBoundaryHandler:function(){return f},GlobalError:function(){return d},default:function(){return p}});let r=n(47043),o=n(57437),u=r._(n(2265)),l=n(35475),a=n(89721),i=n(51845),c={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},text:{fontSize:"14px",fontWeight:400,lineHeight:"28px",margin:"0 8px"}};function s(e){let{error:t}=e,n=i.staticGenerationAsyncStorage.getStore();if((null==n?void 0:n.isRevalidate)||(null==n?void 0:n.isStaticGeneration))throw console.error(t),t;return null}class f extends u.default.Component{static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw e;return{error:e}}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.error?{error:null,previousPathname:e.pathname}:{error:t.error,previousPathname:e.pathname}}render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s,{error:this.state.error}),this.props.errorStyles,this.props.errorScripts,(0,o.jsx)(this.props.errorComponent,{error:this.state.error,reset:this.reset})]}):this.props.children}constructor(e){super(e),this.reset=()=>{this.setState({error:null})},this.state={error:null,previousPathname:this.props.pathname}}}function d(e){let{error:t}=e,n=null==t?void 0:t.digest;return(0,o.jsxs)("html",{id:"__next_error__",children:[(0,o.jsx)("head",{}),(0,o.jsxs)("body",{children:[(0,o.jsx)(s,{error:t}),(0,o.jsx)("div",{style:c.error,children:(0,o.jsxs)("div",{children:[(0,o.jsx)("h2",{style:c.text,children:"Application error: a "+(n?"server":"client")+"-side exception has occurred (see the "+(n?"server logs":"browser console")+" for more information)."}),n?(0,o.jsx)("p",{style:c.text,children:"Digest: "+n}):null]})})]})]})}let p=d;function h(e){let{errorComponent:t,errorStyles:n,errorScripts:r,children:u}=e,a=(0,l.usePathname)();return t?(0,o.jsx)(f,{pathname:a,errorComponent:t,errorStyles:n,errorScripts:r,children:u}):(0,o.jsx)(o.Fragment,{children:u})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},46177:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{DynamicServerError:function(){return r},isDynamicServerError:function(){return o}});let n="DYNAMIC_SERVER_USAGE";class r extends Error{constructor(e){super("Dynamic server usage: "+e),this.description=e,this.digest=n}}function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"==typeof e.digest&&e.digest===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},89721:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isNextRouterError",{enumerable:!0,get:function(){return u}});let r=n(98200),o=n(88968);function u(e){return e&&e.digest&&((0,o.isRedirectError)(e)||(0,r.isNotFoundError)(e))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4707:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return S}});let r=n(47043),o=n(53099),u=n(57437),l=o._(n(2265)),a=r._(n(54887)),i=n(61956),c=n(44848),s=n(38137),f=n(61060),d=n(76015),p=n(7092),h=n(4123),y=n(80),_=n(73171),v=n(78505),b=n(28077),g=["bottom","height","left","right","top","width","x","y"];function m(e,t){let n=e.getBoundingClientRect();return n.top>=0&&n.top<=t}class R extends l.default.Component{componentDidMount(){this.handlePotentialScroll()}componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePotentialScroll()}render(){return this.props.children}constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focusAndScrollRef:e,segmentPath:t}=this.props;if(e.apply){var n;if(0!==e.segmentPaths.length&&!e.segmentPaths.some(e=>t.every((t,n)=>(0,d.matchSegment)(t,e[n]))))return;let r=null,o=e.hashFragment;if(o&&(r="top"===o?document.body:null!=(n=document.getElementById(o))?n:document.getElementsByName(o)[0]),r||(r="undefined"==typeof window?null:a.default.findDOMNode(this)),!(r instanceof Element))return;for(;!(r instanceof HTMLElement)||function(e){if(["sticky","fixed"].includes(getComputedStyle(e).position))return!0;let t=e.getBoundingClientRect();return g.every(e=>0===t[e])}(r);){if(null===r.nextElementSibling)return;r=r.nextElementSibling}e.apply=!1,e.hashFragment=null,e.segmentPaths=[],(0,p.handleSmoothScroll)(()=>{if(o){r.scrollIntoView();return}let e=document.documentElement,t=e.clientHeight;!m(r,t)&&(e.scrollTop=0,m(r,t)||r.scrollIntoView())},{dontForceLayout:!0,onlyHashChange:e.onlyHashChange}),e.onlyHashChange=!1,r.focus()}}}}function P(e){let{segmentPath:t,children:n}=e,r=(0,l.useContext)(i.GlobalLayoutRouterContext);if(!r)throw Error("invariant global layout router not mounted");return(0,u.jsx)(R,{segmentPath:t,focusAndScrollRef:r.focusAndScrollRef,children:n})}function j(e){let{parallelRouterKey:t,url:n,childNodes:r,segmentPath:o,tree:a,cacheKey:f}=e,p=(0,l.useContext)(i.GlobalLayoutRouterContext);if(!p)throw Error("invariant global layout router not mounted");let{buildId:h,changeByServerResponse:y,tree:_}=p,v=r.get(f);if(void 0===v){let e={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null};v=e,r.set(f,e)}let g=null!==v.prefetchRsc?v.prefetchRsc:v.rsc,m=(0,l.useDeferredValue)(v.rsc,g),R="object"==typeof m&&null!==m&&"function"==typeof m.then?(0,l.use)(m):m;if(!R){let e=v.lazyData;if(null===e){let t=function e(t,n){if(t){let[r,o]=t,u=2===t.length;if((0,d.matchSegment)(n[0],r)&&n[1].hasOwnProperty(o)){if(u){let t=e(void 0,n[1][o]);return[n[0],{...n[1],[o]:[t[0],t[1],t[2],"refetch"]}]}return[n[0],{...n[1],[o]:e(t.slice(2),n[1][o])}]}}return n}(["",...o],_),r=(0,b.hasInterceptionRouteInCurrentTree)(_);v.lazyData=e=(0,c.fetchServerResponse)(new URL(n,location.origin),t,r?p.nextUrl:null,h),v.lazyDataResolved=!1}let t=(0,l.use)(e);v.lazyDataResolved||(setTimeout(()=>{(0,l.startTransition)(()=>{y({previousTree:_,serverResponse:t})})}),v.lazyDataResolved=!0),(0,l.use)(s.unresolvedThenable)}return(0,u.jsx)(i.LayoutRouterContext.Provider,{value:{tree:a[1][t],childNodes:v.parallelRoutes,url:n,loading:v.loading},children:R})}function O(e){let{children:t,hasLoading:n,loading:r,loadingStyles:o,loadingScripts:a}=e;return n?(0,u.jsx)(l.Suspense,{fallback:(0,u.jsxs)(u.Fragment,{children:[o,a,r]}),children:t}):(0,u.jsx)(u.Fragment,{children:t})}function S(e){let{parallelRouterKey:t,segmentPath:n,error:r,errorStyles:o,errorScripts:a,templateStyles:c,templateScripts:s,template:d,notFound:p,notFoundStyles:b}=e,g=(0,l.useContext)(i.LayoutRouterContext);if(!g)throw Error("invariant expected layout router to be mounted");let{childNodes:m,tree:R,url:S,loading:E}=g,w=m.get(t);w||(w=new Map,m.set(t,w));let T=R[1][t][0],M=(0,_.getSegmentValue)(T),x=[T];return(0,u.jsx)(u.Fragment,{children:x.map(e=>{let l=(0,_.getSegmentValue)(e),g=(0,v.createRouterCacheKey)(e);return(0,u.jsxs)(i.TemplateContext.Provider,{value:(0,u.jsx)(P,{segmentPath:n,children:(0,u.jsx)(f.ErrorBoundary,{errorComponent:r,errorStyles:o,errorScripts:a,children:(0,u.jsx)(O,{hasLoading:!!E,loading:null==E?void 0:E[0],loadingStyles:null==E?void 0:E[1],loadingScripts:null==E?void 0:E[2],children:(0,u.jsx)(y.NotFoundBoundary,{notFound:p,notFoundStyles:b,children:(0,u.jsx)(h.RedirectBoundary,{children:(0,u.jsx)(j,{parallelRouterKey:t,url:S,tree:R,childNodes:w,segmentPath:n,cacheKey:g,isActive:M===l})})})})})}),children:[c,s,d]},(0,v.createRouterCacheKey)(e,!0))})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},76015:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{canSegmentBeOverridden:function(){return u},matchSegment:function(){return o}});let r=n(87417),o=(e,t)=>"string"==typeof e?"string"==typeof t&&e===t:"string"!=typeof t&&e[0]===t[0]&&e[1]===t[1],u=(e,t)=>{var n;return!Array.isArray(e)&&!!Array.isArray(t)&&(null==(n=(0,r.getSegmentParam)(e))?void 0:n.param)===t[0]};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},35475:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ReadonlyURLSearchParams:function(){return i.ReadonlyURLSearchParams},RedirectType:function(){return i.RedirectType},ServerInsertedHTMLContext:function(){return c.ServerInsertedHTMLContext},notFound:function(){return i.notFound},permanentRedirect:function(){return i.permanentRedirect},redirect:function(){return i.redirect},useParams:function(){return p},usePathname:function(){return f},useRouter:function(){return d},useSearchParams:function(){return s},useSelectedLayoutSegment:function(){return y},useSelectedLayoutSegments:function(){return h},useServerInsertedHTML:function(){return c.useServerInsertedHTML}});let r=n(2265),o=n(61956),u=n(79060),l=n(73171),a=n(84541),i=n(52646),c=n(55501);function s(){let e=(0,r.useContext)(u.SearchParamsContext),t=(0,r.useMemo)(()=>e?new i.ReadonlyURLSearchParams(e):null,[e]);if("undefined"==typeof window){let{bailoutToClientRendering:e}=n(96149);e("useSearchParams()")}return t}function f(){return(0,r.useContext)(u.PathnameContext)}function d(){let e=(0,r.useContext)(o.AppRouterContext);if(null===e)throw Error("invariant expected app router to be mounted");return e}function p(){return(0,r.useContext)(u.PathParamsContext)}function h(e){void 0===e&&(e="children");let t=(0,r.useContext)(o.LayoutRouterContext);return t?function e(t,n,r,o){let u;if(void 0===r&&(r=!0),void 0===o&&(o=[]),r)u=t[1][n];else{var i;let e=t[1];u=null!=(i=e.children)?i:Object.values(e)[0]}if(!u)return o;let c=u[0],s=(0,l.getSegmentValue)(c);return!s||s.startsWith(a.PAGE_SEGMENT_KEY)?o:(o.push(s),e(u,n,!1,o))}(t.tree,e):null}function y(e){void 0===e&&(e="children");let t=h(e);if(!t||0===t.length)return null;let n="children"===e?t[0]:t[t.length-1];return n===a.DEFAULT_SEGMENT_KEY?null:n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},52646:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ReadonlyURLSearchParams:function(){return l},RedirectType:function(){return r.RedirectType},notFound:function(){return o.notFound},permanentRedirect:function(){return r.permanentRedirect},redirect:function(){return r.redirect}});let r=n(88968),o=n(98200);class u extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class l extends URLSearchParams{append(){throw new u}delete(){throw new u}set(){throw new u}sort(){throw new u}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},80:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NotFoundBoundary",{enumerable:!0,get:function(){return s}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(35475),a=n(98200);n(31765);let i=n(61956);class c extends u.default.Component{componentDidCatch(){}static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{notFoundTriggered:!0};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.notFoundTriggered?{notFoundTriggered:!1,previousPathname:e.pathname}:{notFoundTriggered:t.notFoundTriggered,previousPathname:e.pathname}}render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"robots",content:"noindex"}),!1,this.props.notFoundStyles,this.props.notFound]}):this.props.children}constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,previousPathname:e.pathname}}}function s(e){let{notFound:t,notFoundStyles:n,asNotFound:r,children:a}=e,s=(0,l.usePathname)(),f=(0,u.useContext)(i.MissingSlotContext);return t?(0,o.jsx)(c,{pathname:s,notFound:t,notFoundStyles:n,asNotFound:r,missingSlots:f,children:a}):(0,o.jsx)(o.Fragment,{children:a})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},98200:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{isNotFoundError:function(){return o},notFound:function(){return r}});let n="NEXT_NOT_FOUND";function r(){let e=Error(n);throw e.digest=n,e}function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},29744:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PromiseQueue",{enumerable:!0,get:function(){return c}});let r=n(2522),o=n(90675);var u=o._("_maxConcurrency"),l=o._("_runningCount"),a=o._("_queue"),i=o._("_processNext");class c{enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try{r._(this,l)[l]++;let n=await e();t(n)}catch(e){n(e)}finally{r._(this,l)[l]--,r._(this,i)[i]()}};return r._(this,a)[a].push({promiseFn:o,task:u}),r._(this,i)[i](),o}bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){let e=r._(this,a)[a].splice(t,1)[0];r._(this,a)[a].unshift(e),r._(this,i)[i](!0)}}constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.defineProperty(this,u,{writable:!0,value:void 0}),Object.defineProperty(this,l,{writable:!0,value:void 0}),Object.defineProperty(this,a,{writable:!0,value:void 0}),r._(this,u)[u]=e,r._(this,l)[l]=0,r._(this,a)[a]=[]}}function s(e){if(void 0===e&&(e=!1),(r._(this,l)[l]0){var t;null==(t=r._(this,a)[a].shift())||t.task()}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4123:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{RedirectBoundary:function(){return s},RedirectErrorBoundary:function(){return c}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(35475),a=n(88968);function i(e){let{redirect:t,reset:n,redirectType:r}=e,o=(0,l.useRouter)();return(0,u.useEffect)(()=>{u.default.startTransition(()=>{r===a.RedirectType.push?o.push(t,{}):o.replace(t,{}),n()})},[t,r,n,o]),null}class c extends u.default.Component{static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{redirect:(0,a.getURLFromRedirectError)(e),redirectType:(0,a.getRedirectTypeFromError)(e)};throw e}render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&null!==t?(0,o.jsx)(i,{redirect:e,redirectType:t,reset:()=>this.setState({redirect:null})}):this.props.children}constructor(e){super(e),this.state={redirect:null,redirectType:null}}}function s(e){let{children:t}=e,n=(0,l.useRouter)();return(0,o.jsx)(c,{router:n,children:t})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5001:function(e,t){"use strict";var n,r;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"RedirectStatusCode",{enumerable:!0,get:function(){return n}}),(r=n||(n={}))[r.SeeOther=303]="SeeOther",r[r.TemporaryRedirect=307]="TemporaryRedirect",r[r.PermanentRedirect=308]="PermanentRedirect",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},88968:function(e,t,n){"use strict";var r,o;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{RedirectType:function(){return r},getRedirectError:function(){return c},getRedirectStatusCodeFromError:function(){return y},getRedirectTypeFromError:function(){return h},getURLFromRedirectError:function(){return p},isRedirectError:function(){return d},permanentRedirect:function(){return f},redirect:function(){return s}});let u=n(20544),l=n(90295),a=n(5001),i="NEXT_REDIRECT";function c(e,t,n){void 0===n&&(n=a.RedirectStatusCode.TemporaryRedirect);let r=Error(i);r.digest=i+";"+t+";"+e+";"+n+";";let o=u.requestAsyncStorage.getStore();return o&&(r.mutableCookies=o.mutableCookies),r}function s(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.getStore();throw c(e,t,(null==n?void 0:n.isAction)?a.RedirectStatusCode.SeeOther:a.RedirectStatusCode.TemporaryRedirect)}function f(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.getStore();throw c(e,t,(null==n?void 0:n.isAction)?a.RedirectStatusCode.SeeOther:a.RedirectStatusCode.PermanentRedirect)}function d(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,n,r,o]=e.digest.split(";",4),u=Number(o);return t===i&&("replace"===n||"push"===n)&&"string"==typeof r&&!isNaN(u)&&u in a.RedirectStatusCode}function p(e){return d(e)?e.digest.split(";",3)[2]:null}function h(e){if(!d(e))throw Error("Not a redirect error");return e.digest.split(";",2)[1]}function y(e){if(!d(e))throw Error("Not a redirect error");return Number(e.digest.split(";",4)[3])}(o=r||(r={})).push="push",o.replace="replace",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},36423:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(61956);function a(){let e=(0,u.useContext)(l.TemplateContext);return(0,o.jsx)(o.Fragment,{children:e})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},20544:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{getExpectedRequestStore:function(){return o},requestAsyncStorage:function(){return r.requestAsyncStorage}});let r=n(25575);function o(e){let t=r.requestAsyncStorage.getStore();if(t)return t;throw Error("`"+e+"` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context")}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},22356:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"applyFlightData",{enumerable:!0,get:function(){return u}});let r=n(27420),o=n(92576);function u(e,t,n,u){let[l,a,i]=n.slice(-3);if(null===a)return!1;if(3===n.length){let n=a[2],o=a[3];t.loading=o,t.rsc=n,t.prefetchRsc=null,(0,r.fillLazyItemsTillLeafWithHead)(t,e,l,a,i,u)}else t.rsc=e.rsc,t.prefetchRsc=e.prefetchRsc,t.parallelRoutes=new Map(e.parallelRoutes),t.loading=e.loading,(0,o.fillCacheWithNewSubTreeData)(t,e,n,u);return!0}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},81935:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"applyRouterStatePatchToTree",{enumerable:!0,get:function(){return function e(t,n,r,a){let i;let[c,s,f,d,p]=n;if(1===t.length){let e=l(n,r,t);return(0,u.addRefreshMarkerToActiveParallelSegments)(e,a),e}let[h,y]=t;if(!(0,o.matchSegment)(h,c))return null;if(2===t.length)i=l(s[y],r,t);else if(null===(i=e(t.slice(2),s[y],r,a)))return null;let _=[t[0],{...s,[y]:i},f,d];return p&&(_[4]=!0),(0,u.addRefreshMarkerToActiveParallelSegments)(_,a),_}}});let r=n(84541),o=n(76015),u=n(50232);function l(e,t,n){let[u,a]=e,[i,c]=t;if(i===r.DEFAULT_SEGMENT_KEY&&u!==r.DEFAULT_SEGMENT_KEY)return e;if((0,o.matchSegment)(u,i)){let t={};for(let e in a)void 0!==c[e]?t[e]=l(a[e],c[e],n):t[e]=a[e];for(let e in c)t[e]||(t[e]=c[e]);let r=[u,t];return e[2]&&(r[2]=e[2]),e[3]&&(r[3]=e[3]),e[4]&&(r[4]=e[4]),r}return t}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},65556:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"clearCacheNodeDataForSegmentPath",{enumerable:!0,get:function(){return function e(t,n,o){let u=o.length<=2,[l,a]=o,i=(0,r.createRouterCacheKey)(a),c=n.parallelRoutes.get(l),s=t.parallelRoutes.get(l);s&&s!==c||(s=new Map(c),t.parallelRoutes.set(l,s));let f=null==c?void 0:c.get(i),d=s.get(i);if(u){d&&d.lazyData&&d!==f||s.set(i,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null});return}if(!d||!f){d||s.set(i,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null});return}return d===f&&(d={lazyData:d.lazyData,rsc:d.rsc,prefetchRsc:d.prefetchRsc,head:d.head,prefetchHead:d.prefetchHead,parallelRoutes:new Map(d.parallelRoutes),lazyDataResolved:d.lazyDataResolved,loading:d.loading},s.set(i,d)),e(d,f,o.slice(2))}}});let r=n(78505);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5410:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{computeChangedPath:function(){return s},extractPathFromFlightRouterState:function(){return c}});let r=n(91182),o=n(84541),u=n(76015),l=e=>"/"===e[0]?e.slice(1):e,a=e=>"string"==typeof e?"children"===e?"":e:e[1];function i(e){return e.reduce((e,t)=>""===(t=l(t))||(0,o.isGroupSegment)(t)?e:e+"/"+t,"")||"/"}function c(e){var t;let n=Array.isArray(e[0])?e[0][1]:e[0];if(n===o.DEFAULT_SEGMENT_KEY||r.INTERCEPTION_ROUTE_MARKERS.some(e=>n.startsWith(e)))return;if(n.startsWith(o.PAGE_SEGMENT_KEY))return"";let u=[a(n)],l=null!=(t=e[1])?t:{},s=l.children?c(l.children):void 0;if(void 0!==s)u.push(s);else for(let[e,t]of Object.entries(l)){if("children"===e)continue;let n=c(t);void 0!==n&&u.push(n)}return i(u)}function s(e,t){let n=function e(t,n){let[o,l]=t,[i,s]=n,f=a(o),d=a(i);if(r.INTERCEPTION_ROUTE_MARKERS.some(e=>f.startsWith(e)||d.startsWith(e)))return"";if(!(0,u.matchSegment)(o,i)){var p;return null!=(p=c(n))?p:""}for(let t in l)if(s[t]){let n=e(l[t],s[t]);if(null!==n)return a(i)+"/"+n}return null}(e,t);return null==n||"/"===n?n:i(n.split("/"))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33456:function(e,t){"use strict";function n(e,t){return void 0===t&&(t=!0),e.pathname+e.search+(t?e.hash:"")}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createHrefFromUrl",{enumerable:!0,get:function(){return n}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},82952:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createInitialRouterState",{enumerable:!0,get:function(){return c}});let r=n(33456),o=n(27420),u=n(5410),l=n(60305),a=n(24673),i=n(50232);function c(e){var t;let{buildId:n,initialTree:c,initialSeedData:s,urlParts:f,initialParallelRoutes:d,location:p,initialHead:h,couldBeIntercepted:y}=e,_=f.join("/"),v=!p,b={lazyData:null,rsc:s[2],prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:v?new Map:d,lazyDataResolved:!1,loading:s[3]},g=p?(0,r.createHrefFromUrl)(p):_;(0,i.addRefreshMarkerToActiveParallelSegments)(c,g);let m=new Map;(null===d||0===d.size)&&(0,o.fillLazyItemsTillLeafWithHead)(b,void 0,c,s,h);let R={buildId:n,tree:c,cache:b,prefetchCache:m,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:{apply:!1,onlyHashChange:!1,hashFragment:null,segmentPaths:[]},canonicalUrl:g,nextUrl:null!=(t=(0,u.extractPathFromFlightRouterState)(c)||(null==p?void 0:p.pathname))?t:null};if(p){let e=new URL(""+p.pathname+p.search,p.origin),t=[["",c,null,null]];(0,l.createPrefetchCacheEntryForInitialLoad)({url:e,kind:a.PrefetchKind.AUTO,data:[t,void 0,!1,y],tree:R.tree,prefetchCache:R.prefetchCache,nextUrl:R.nextUrl})}return R}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},78505:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRouterCacheKey",{enumerable:!0,get:function(){return o}});let r=n(84541);function o(e,t){return(void 0===t&&(t=!1),Array.isArray(e))?e[0]+"|"+e[1]+"|"+e[2]:t&&e.startsWith(r.PAGE_SEGMENT_KEY)?r.PAGE_SEGMENT_KEY:e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},44848:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fetchServerResponse",{enumerable:!0,get:function(){return s}});let r=n(6866),o=n(12846),u=n(83079),l=n(24673),a=n(37207),{createFromFetch:i}=n(6671);function c(e){return[(0,o.urlToUrlWithoutFlightMarker)(e).toString(),void 0,!1,!1]}async function s(e,t,n,s,f){let d={[r.RSC_HEADER]:"1",[r.NEXT_ROUTER_STATE_TREE]:encodeURIComponent(JSON.stringify(t))};f===l.PrefetchKind.AUTO&&(d[r.NEXT_ROUTER_PREFETCH_HEADER]="1"),n&&(d[r.NEXT_URL]=n);let p=(0,a.hexHash)([d[r.NEXT_ROUTER_PREFETCH_HEADER]||"0",d[r.NEXT_ROUTER_STATE_TREE],d[r.NEXT_URL]].join(","));try{var h;let t=new URL(e);t.pathname.endsWith("/")?t.pathname+="index.txt":t.pathname+=".txt",t.searchParams.set(r.NEXT_RSC_UNION_QUERY,p);let n=await fetch(t,{credentials:"same-origin",headers:d}),l=(0,o.urlToUrlWithoutFlightMarker)(n.url),a=n.redirected?l:void 0,f=n.headers.get("content-type")||"",y=!!n.headers.get(r.NEXT_DID_POSTPONE_HEADER),_=!!(null==(h=n.headers.get("vary"))?void 0:h.includes(r.NEXT_URL)),v=f===r.RSC_CONTENT_TYPE_HEADER;if(v||(v=f.startsWith("text/plain")),!v||!n.ok)return e.hash&&(l.hash=e.hash),c(l.toString());let[b,g]=await i(Promise.resolve(n),{callServer:u.callServer});if(s!==b)return c(n.url);return[g,a,y,_]}catch(t){return console.error("Failed to fetch RSC payload for "+e+". Falling back to browser navigation.",t),[e.toString(),void 0,!1,!1]}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},92576:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fillCacheWithNewSubTreeData",{enumerable:!0,get:function(){return function e(t,n,l,a){let i=l.length<=5,[c,s]=l,f=(0,u.createRouterCacheKey)(s),d=n.parallelRoutes.get(c);if(!d)return;let p=t.parallelRoutes.get(c);p&&p!==d||(p=new Map(d),t.parallelRoutes.set(c,p));let h=d.get(f),y=p.get(f);if(i){if(!y||!y.lazyData||y===h){let e=l[3];y={lazyData:null,rsc:e[2],prefetchRsc:null,head:null,prefetchHead:null,loading:e[3],parallelRoutes:h?new Map(h.parallelRoutes):new Map,lazyDataResolved:!1},h&&(0,r.invalidateCacheByRouterState)(y,h,l[2]),(0,o.fillLazyItemsTillLeafWithHead)(y,h,l[2],e,l[4],a),p.set(f,y)}return}y&&h&&(y===h&&(y={lazyData:y.lazyData,rsc:y.rsc,prefetchRsc:y.prefetchRsc,head:y.head,prefetchHead:y.prefetchHead,parallelRoutes:new Map(y.parallelRoutes),lazyDataResolved:!1,loading:y.loading},p.set(f,y)),e(y,h,l.slice(2),a))}}});let r=n(94377),o=n(27420),u=n(78505);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},27420:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fillLazyItemsTillLeafWithHead",{enumerable:!0,get:function(){return function e(t,n,u,l,a,i){if(0===Object.keys(u[1]).length){t.head=a;return}for(let c in u[1]){let s;let f=u[1][c],d=f[0],p=(0,r.createRouterCacheKey)(d),h=null!==l&&void 0!==l[1][c]?l[1][c]:null;if(n){let r=n.parallelRoutes.get(c);if(r){let n;let u=(null==i?void 0:i.kind)==="auto"&&i.status===o.PrefetchCacheEntryStatus.reusable,l=new Map(r),s=l.get(p);n=null!==h?{lazyData:null,rsc:h[2],prefetchRsc:null,head:null,prefetchHead:null,loading:h[3],parallelRoutes:new Map(null==s?void 0:s.parallelRoutes),lazyDataResolved:!1}:u&&s?{lazyData:s.lazyData,rsc:s.rsc,prefetchRsc:s.prefetchRsc,head:s.head,prefetchHead:s.prefetchHead,parallelRoutes:new Map(s.parallelRoutes),lazyDataResolved:s.lazyDataResolved,loading:s.loading}:{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map(null==s?void 0:s.parallelRoutes),lazyDataResolved:!1,loading:null},l.set(p,n),e(n,s,f,h||null,a,i),t.parallelRoutes.set(c,l);continue}}if(null!==h){let e=h[2],t=h[3];s={lazyData:null,rsc:e,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:t}}else s={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null};let y=t.parallelRoutes.get(c);y?y.set(p,s):t.parallelRoutes.set(c,new Map([[p,s]])),e(s,void 0,f,h,a,i)}}}});let r=n(78505),o=n(24673);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},44510:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleMutable",{enumerable:!0,get:function(){return u}});let r=n(5410);function o(e){return void 0!==e}function u(e,t){var n,u,l;let a=null==(u=t.shouldScroll)||u,i=e.nextUrl;if(o(t.patchedTree)){let n=(0,r.computeChangedPath)(e.tree,t.patchedTree);n?i=n:i||(i=e.canonicalUrl)}return{buildId:e.buildId,canonicalUrl:o(t.canonicalUrl)?t.canonicalUrl===e.canonicalUrl?e.canonicalUrl:t.canonicalUrl:e.canonicalUrl,pushRef:{pendingPush:o(t.pendingPush)?t.pendingPush:e.pushRef.pendingPush,mpaNavigation:o(t.mpaNavigation)?t.mpaNavigation:e.pushRef.mpaNavigation,preserveCustomHistoryState:o(t.preserveCustomHistoryState)?t.preserveCustomHistoryState:e.pushRef.preserveCustomHistoryState},focusAndScrollRef:{apply:!!a&&(!!o(null==t?void 0:t.scrollableSegments)||e.focusAndScrollRef.apply),onlyHashChange:!!t.hashFragment&&e.canonicalUrl.split("#",1)[0]===(null==(n=t.canonicalUrl)?void 0:n.split("#",1)[0]),hashFragment:a?t.hashFragment&&""!==t.hashFragment?decodeURIComponent(t.hashFragment.slice(1)):e.focusAndScrollRef.hashFragment:null,segmentPaths:a?null!=(l=null==t?void 0:t.scrollableSegments)?l:e.focusAndScrollRef.segmentPaths:[]},cache:t.cache?t.cache:e.cache,prefetchCache:t.prefetchCache?t.prefetchCache:e.prefetchCache,tree:o(t.patchedTree)?t.patchedTree:e.tree,nextUrl:i}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77831:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleSegmentMismatch",{enumerable:!0,get:function(){return o}});let r=n(95967);function o(e,t,n){return(0,r.handleExternalUrl)(e,{},e.canonicalUrl,!0)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77058:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"invalidateCacheBelowFlightSegmentPath",{enumerable:!0,get:function(){return function e(t,n,o){let u=o.length<=2,[l,a]=o,i=(0,r.createRouterCacheKey)(a),c=n.parallelRoutes.get(l);if(!c)return;let s=t.parallelRoutes.get(l);if(s&&s!==c||(s=new Map(c),t.parallelRoutes.set(l,s)),u){s.delete(i);return}let f=c.get(i),d=s.get(i);d&&f&&(d===f&&(d={lazyData:d.lazyData,rsc:d.rsc,prefetchRsc:d.prefetchRsc,head:d.head,prefetchHead:d.prefetchHead,parallelRoutes:new Map(d.parallelRoutes),lazyDataResolved:d.lazyDataResolved},s.set(i,d)),e(d,f,o.slice(2)))}}});let r=n(78505);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},94377:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"invalidateCacheByRouterState",{enumerable:!0,get:function(){return o}});let r=n(78505);function o(e,t,n){for(let o in n[1]){let u=n[1][o][0],l=(0,r.createRouterCacheKey)(u),a=t.parallelRoutes.get(o);if(a){let t=new Map(a);t.delete(l),e.parallelRoutes.set(o,t)}}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},63237:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isNavigatingToNewRootLayout",{enumerable:!0,get:function(){return function e(t,n){let r=t[0],o=n[0];if(Array.isArray(r)&&Array.isArray(o)){if(r[0]!==o[0]||r[2]!==o[2])return!0}else if(r!==o)return!0;if(t[4])return!n[4];if(n[4])return!0;let u=Object.values(t[1])[0],l=Object.values(n[1])[0];return!u||!l||e(u,l)}}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},56118:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{abortTask:function(){return c},listenForDynamicRequest:function(){return a},updateCacheNodeOnNavigation:function(){return function e(t,n,a,c,s){let f=n[1],d=a[1],p=c[1],h=t.parallelRoutes,y=new Map(h),_={},v=null;for(let t in d){let n;let a=d[t],c=f[t],b=h.get(t),g=p[t],m=a[0],R=(0,u.createRouterCacheKey)(m),P=void 0!==c?c[0]:void 0,j=void 0!==b?b.get(R):void 0;if(null!==(n=m===r.PAGE_SEGMENT_KEY?l(a,void 0!==g?g:null,s):m===r.DEFAULT_SEGMENT_KEY?void 0!==c?{route:c,node:null,children:null}:l(a,void 0!==g?g:null,s):void 0!==P&&(0,o.matchSegment)(m,P)&&void 0!==j&&void 0!==c?null!=g?e(j,c,a,g,s):function(e){let t=i(e,null,null);return{route:e,node:t,children:null}}(a):l(a,void 0!==g?g:null,s))){null===v&&(v=new Map),v.set(t,n);let e=n.node;if(null!==e){let n=new Map(b);n.set(R,e),y.set(t,n)}_[t]=n.route}else _[t]=a}if(null===v)return null;let b={lazyData:null,rsc:t.rsc,prefetchRsc:t.prefetchRsc,head:t.head,prefetchHead:t.prefetchHead,loading:t.loading,parallelRoutes:y,lazyDataResolved:!1};return{route:function(e,t){let n=[e[0],t];return 2 in e&&(n[2]=e[2]),3 in e&&(n[3]=e[3]),4 in e&&(n[4]=e[4]),n}(a,_),node:b,children:v}}},updateCacheNodeOnPopstateRestoration:function(){return function e(t,n){let r=n[1],o=t.parallelRoutes,l=new Map(o);for(let t in r){let n=r[t],a=n[0],i=(0,u.createRouterCacheKey)(a),c=o.get(t);if(void 0!==c){let r=c.get(i);if(void 0!==r){let o=e(r,n),u=new Map(c);u.set(i,o),l.set(t,u)}}}let a=t.rsc,i=d(a)&&"pending"===a.status;return{lazyData:null,rsc:a,head:t.head,prefetchHead:i?t.prefetchHead:null,prefetchRsc:i?t.prefetchRsc:null,loading:i?t.loading:null,parallelRoutes:l,lazyDataResolved:!1}}}});let r=n(84541),o=n(76015),u=n(78505);function l(e,t,n){let r=i(e,t,n);return{route:e,node:r,children:null}}function a(e,t){t.then(t=>{for(let n of t[0]){let t=n.slice(0,-3),r=n[n.length-3],l=n[n.length-2],a=n[n.length-1];"string"!=typeof t&&function(e,t,n,r,l){let a=e;for(let e=0;e{c(e,t)})}function i(e,t,n){let r=e[1],o=null!==t?t[1]:null,l=new Map;for(let e in r){let t=r[e],a=null!==o?o[e]:null,c=t[0],s=(0,u.createRouterCacheKey)(c),f=i(t,void 0===a?null:a,n),d=new Map;d.set(s,f),l.set(e,d)}let a=0===l.size,c=null!==t?t[2]:null,s=null!==t?t[3]:null;return{lazyData:null,parallelRoutes:l,prefetchRsc:void 0!==c?c:null,prefetchHead:a?n:null,loading:void 0!==s?s:null,rsc:p(),head:a?p():null,lazyDataResolved:!1}}function c(e,t){let n=e.node;if(null===n)return;let r=e.children;if(null===r)s(e.route,n,t);else for(let e of r.values())c(e,t);e.node=null}function s(e,t,n){let r=e[1],o=t.parallelRoutes;for(let e in r){let t=r[e],l=o.get(e);if(void 0===l)continue;let a=t[0],i=(0,u.createRouterCacheKey)(a),c=l.get(i);void 0!==c&&s(t,c,n)}let l=t.rsc;d(l)&&(null===n?l.resolve(null):l.reject(n));let a=t.head;d(a)&&a.resolve(null)}let f=Symbol();function d(e){return e&&e.tag===f}function p(){let e,t;let n=new Promise((n,r)=>{e=n,t=r});return n.status="pending",n.resolve=t=>{"pending"===n.status&&(n.status="fulfilled",n.value=t,e(t))},n.reject=e=>{"pending"===n.status&&(n.status="rejected",n.reason=e,t(e))},n.tag=f,n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},60305:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{createPrefetchCacheEntryForInitialLoad:function(){return c},getOrCreatePrefetchCacheEntry:function(){return i},prunePrefetchCache:function(){return f}});let r=n(33456),o=n(44848),u=n(24673),l=n(24819);function a(e,t){let n=(0,r.createHrefFromUrl)(e,!1);return t?t+"%"+n:n}function i(e){let t,{url:n,nextUrl:r,tree:o,buildId:l,prefetchCache:i,kind:c}=e,f=a(n,r),d=i.get(f);if(d)t=d;else{let e=a(n),r=i.get(e);r&&(t=r)}return t?(t.status=h(t),t.kind!==u.PrefetchKind.FULL&&c===u.PrefetchKind.FULL)?s({tree:o,url:n,buildId:l,nextUrl:r,prefetchCache:i,kind:null!=c?c:u.PrefetchKind.TEMPORARY}):(c&&t.kind===u.PrefetchKind.TEMPORARY&&(t.kind=c),t):s({tree:o,url:n,buildId:l,nextUrl:r,prefetchCache:i,kind:c||u.PrefetchKind.TEMPORARY})}function c(e){let{nextUrl:t,tree:n,prefetchCache:r,url:o,kind:l,data:i}=e,[,,,c]=i,s=c?a(o,t):a(o),f={treeAtTimeOfPrefetch:n,data:Promise.resolve(i),kind:l,prefetchTime:Date.now(),lastUsedTime:Date.now(),key:s,status:u.PrefetchCacheEntryStatus.fresh};return r.set(s,f),f}function s(e){let{url:t,kind:n,tree:r,nextUrl:i,buildId:c,prefetchCache:s}=e,f=a(t),d=l.prefetchQueue.enqueue(()=>(0,o.fetchServerResponse)(t,r,i,c,n).then(e=>{let[,,,n]=e;return n&&function(e){let{url:t,nextUrl:n,prefetchCache:r}=e,o=a(t),u=r.get(o);if(!u)return;let l=a(t,n);r.set(l,u),r.delete(o)}({url:t,nextUrl:i,prefetchCache:s}),e})),p={treeAtTimeOfPrefetch:r,data:d,kind:n,prefetchTime:Date.now(),lastUsedTime:null,key:f,status:u.PrefetchCacheEntryStatus.fresh};return s.set(f,p),p}function f(e){for(let[t,n]of e)h(n)===u.PrefetchCacheEntryStatus.expired&&e.delete(t)}let d=1e3*Number("30"),p=1e3*Number("300");function h(e){let{kind:t,prefetchTime:n,lastUsedTime:r}=e;return Date.now()<(null!=r?r:n)+d?r?u.PrefetchCacheEntryStatus.reusable:u.PrefetchCacheEntryStatus.fresh:"auto"===t&&Date.now(){let[n,f]=t,h=!1;if(S.lastUsedTime||(S.lastUsedTime=Date.now(),h=!0),"string"==typeof n)return _(e,R,n,O);if(document.getElementById("__next-page-redirect"))return _(e,R,j,O);let b=e.tree,g=e.cache,w=[];for(let t of n){let n=t.slice(0,-4),r=t.slice(-3)[0],c=["",...n],f=(0,u.applyRouterStatePatchToTree)(c,b,r,j);if(null===f&&(f=(0,u.applyRouterStatePatchToTree)(c,E,r,j)),null!==f){if((0,a.isNavigatingToNewRootLayout)(b,f))return _(e,R,j,O);let u=(0,d.createEmptyCacheNode)(),m=!1;for(let e of(S.status!==i.PrefetchCacheEntryStatus.stale||h?m=(0,s.applyFlightData)(g,u,t,S):(m=function(e,t,n,r){let o=!1;for(let u of(e.rsc=t.rsc,e.prefetchRsc=t.prefetchRsc,e.loading=t.loading,e.parallelRoutes=new Map(t.parallelRoutes),v(r).map(e=>[...n,...e])))(0,y.clearCacheNodeDataForSegmentPath)(e,t,u),o=!0;return o}(u,g,n,r),S.lastUsedTime=Date.now()),(0,l.shouldHardNavigate)(c,b)?(u.rsc=g.rsc,u.prefetchRsc=g.prefetchRsc,(0,o.invalidateCacheBelowFlightSegmentPath)(u,g,n),R.cache=u):m&&(R.cache=u,g=u),b=f,v(r))){let t=[...n,...e];t[t.length-1]!==p.DEFAULT_SEGMENT_KEY&&w.push(t)}}}return R.patchedTree=b,R.canonicalUrl=f?(0,r.createHrefFromUrl)(f):j,R.pendingPush=O,R.scrollableSegments=w,R.hashFragment=P,R.shouldScroll=m,(0,c.handleMutable)(e,R)},()=>e)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},24819:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{prefetchQueue:function(){return l},prefetchReducer:function(){return a}});let r=n(6866),o=n(29744),u=n(60305),l=new o.PromiseQueue(5);function a(e,t){(0,u.prunePrefetchCache)(e.prefetchCache);let{url:n}=t;return n.searchParams.delete(r.NEXT_RSC_UNION_QUERY),(0,u.getOrCreatePrefetchCacheEntry)({url:n,nextUrl:e.nextUrl,prefetchCache:e.prefetchCache,kind:t.kind,tree:e.tree,buildId:e.buildId}),e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},99601:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"refreshReducer",{enumerable:!0,get:function(){return h}});let r=n(44848),o=n(33456),u=n(81935),l=n(63237),a=n(95967),i=n(44510),c=n(27420),s=n(12846),f=n(77831),d=n(28077),p=n(50232);function h(e,t){let{origin:n}=t,h={},y=e.canonicalUrl,_=e.tree;h.preserveCustomHistoryState=!1;let v=(0,s.createEmptyCacheNode)(),b=(0,d.hasInterceptionRouteInCurrentTree)(e.tree);return v.lazyData=(0,r.fetchServerResponse)(new URL(y,n),[_[0],_[1],_[2],"refetch"],b?e.nextUrl:null,e.buildId),v.lazyData.then(async n=>{let[r,s]=n;if("string"==typeof r)return(0,a.handleExternalUrl)(e,h,r,e.pushRef.pendingPush);for(let n of(v.lazyData=null,r)){if(3!==n.length)return console.log("REFRESH FAILED"),e;let[r]=n,i=(0,u.applyRouterStatePatchToTree)([""],_,r,e.canonicalUrl);if(null===i)return(0,f.handleSegmentMismatch)(e,t,r);if((0,l.isNavigatingToNewRootLayout)(_,i))return(0,a.handleExternalUrl)(e,h,y,e.pushRef.pendingPush);let d=s?(0,o.createHrefFromUrl)(s):void 0;s&&(h.canonicalUrl=d);let[g,m]=n.slice(-2);if(null!==g){let e=g[2];v.rsc=e,v.prefetchRsc=null,(0,c.fillLazyItemsTillLeafWithHead)(v,void 0,r,g,m),h.prefetchCache=new Map}await (0,p.refreshInactiveParallelSegments)({state:e,updatedTree:i,updatedCache:v,includeNextUrl:b,canonicalUrl:h.canonicalUrl||e.canonicalUrl}),h.cache=v,h.patchedTree=i,h.canonicalUrl=y,_=i}return(0,i.handleMutable)(e,h)},()=>e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77784:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"restoreReducer",{enumerable:!0,get:function(){return u}});let r=n(33456),o=n(5410);function u(e,t){var n;let{url:u,tree:l}=t,a=(0,r.createHrefFromUrl)(u),i=l||e.tree,c=e.cache;return{buildId:e.buildId,canonicalUrl:a,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:e.focusAndScrollRef,cache:c,prefetchCache:e.prefetchCache,tree:i,nextUrl:null!=(n=(0,o.extractPathFromFlightRouterState)(i))?n:u.pathname}}n(56118),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},13722:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"serverActionReducer",{enumerable:!0,get:function(){return g}});let r=n(83079),o=n(6866),u=n(1634),l=n(33456),a=n(95967),i=n(81935),c=n(63237),s=n(44510),f=n(27420),d=n(12846),p=n(28077),h=n(77831),y=n(50232),{createFromFetch:_,encodeReply:v}=n(6671);async function b(e,t,n){let l,{actionId:a,actionArgs:i}=n,c=await v(i),s=await fetch("",{method:"POST",headers:{Accept:o.RSC_CONTENT_TYPE_HEADER,[o.ACTION]:a,[o.NEXT_ROUTER_STATE_TREE]:encodeURIComponent(JSON.stringify(e.tree)),...t?{[o.NEXT_URL]:t}:{}},body:c}),f=s.headers.get("x-action-redirect");try{let e=JSON.parse(s.headers.get("x-action-revalidated")||"[[],0,0]");l={paths:e[0]||[],tag:!!e[1],cookie:e[2]}}catch(e){l={paths:[],tag:!1,cookie:!1}}let d=f?new URL((0,u.addBasePath)(f),new URL(e.canonicalUrl,window.location.href)):void 0;if(s.headers.get("content-type")===o.RSC_CONTENT_TYPE_HEADER){let e=await _(Promise.resolve(s),{callServer:r.callServer});if(f){let[,t]=null!=e?e:[];return{actionFlightData:t,redirectLocation:d,revalidatedParts:l}}let[t,[,n]]=null!=e?e:[];return{actionResult:t,actionFlightData:n,redirectLocation:d,revalidatedParts:l}}return{redirectLocation:d,revalidatedParts:l}}function g(e,t){let{resolve:n,reject:r}=t,o={},u=e.canonicalUrl,_=e.tree;o.preserveCustomHistoryState=!1;let v=e.nextUrl&&(0,p.hasInterceptionRouteInCurrentTree)(e.tree)?e.nextUrl:null;return o.inFlightServerAction=b(e,v,t),o.inFlightServerAction.then(async r=>{let{actionResult:p,actionFlightData:b,redirectLocation:g}=r;if(g&&(e.pushRef.pendingPush=!0,o.pendingPush=!0),!b)return(n(p),g)?(0,a.handleExternalUrl)(e,o,g.href,e.pushRef.pendingPush):e;if("string"==typeof b)return(0,a.handleExternalUrl)(e,o,b,e.pushRef.pendingPush);if(o.inFlightServerAction=null,g){let e=(0,l.createHrefFromUrl)(g,!1);o.canonicalUrl=e}for(let n of b){if(3!==n.length)return console.log("SERVER ACTION APPLY FAILED"),e;let[r]=n,s=(0,i.applyRouterStatePatchToTree)([""],_,r,g?(0,l.createHrefFromUrl)(g):e.canonicalUrl);if(null===s)return(0,h.handleSegmentMismatch)(e,t,r);if((0,c.isNavigatingToNewRootLayout)(_,s))return(0,a.handleExternalUrl)(e,o,u,e.pushRef.pendingPush);let[p,b]=n.slice(-2),m=null!==p?p[2]:null;if(null!==m){let t=(0,d.createEmptyCacheNode)();t.rsc=m,t.prefetchRsc=null,(0,f.fillLazyItemsTillLeafWithHead)(t,void 0,r,p,b),await (0,y.refreshInactiveParallelSegments)({state:e,updatedTree:s,updatedCache:t,includeNextUrl:!!v,canonicalUrl:o.canonicalUrl||e.canonicalUrl}),o.cache=t,o.prefetchCache=new Map}o.patchedTree=s,_=s}return n(p),(0,s.handleMutable)(e,o)},t=>(r(t),e))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},68448:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"serverPatchReducer",{enumerable:!0,get:function(){return f}});let r=n(33456),o=n(81935),u=n(63237),l=n(95967),a=n(22356),i=n(44510),c=n(12846),s=n(77831);function f(e,t){let{serverResponse:n}=t,[f,d]=n,p={};if(p.preserveCustomHistoryState=!1,"string"==typeof f)return(0,l.handleExternalUrl)(e,p,f,e.pushRef.pendingPush);let h=e.tree,y=e.cache;for(let n of f){let i=n.slice(0,-4),[f]=n.slice(-3,-2),_=(0,o.applyRouterStatePatchToTree)(["",...i],h,f,e.canonicalUrl);if(null===_)return(0,s.handleSegmentMismatch)(e,t,f);if((0,u.isNavigatingToNewRootLayout)(h,_))return(0,l.handleExternalUrl)(e,p,e.canonicalUrl,e.pushRef.pendingPush);let v=d?(0,r.createHrefFromUrl)(d):void 0;v&&(p.canonicalUrl=v);let b=(0,c.createEmptyCacheNode)();(0,a.applyFlightData)(y,b,n),p.patchedTree=_,p.cache=b,y=b,h=_}return(0,i.handleMutable)(e,p)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},50232:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{addRefreshMarkerToActiveParallelSegments:function(){return function e(t,n){let[r,o,,l]=t;for(let a in r.includes(u.PAGE_SEGMENT_KEY)&&"refresh"!==l&&(t[2]=n,t[3]="refresh"),o)e(o[a],n)}},refreshInactiveParallelSegments:function(){return l}});let r=n(22356),o=n(44848),u=n(84541);async function l(e){let t=new Set;await a({...e,rootTree:e.updatedTree,fetchedSegments:t})}async function a(e){let{state:t,updatedTree:n,updatedCache:u,includeNextUrl:l,fetchedSegments:i,rootTree:c=n,canonicalUrl:s}=e,[,f,d,p]=n,h=[];if(d&&d!==s&&"refresh"===p&&!i.has(d)){i.add(d);let e=(0,o.fetchServerResponse)(new URL(d,location.origin),[c[0],c[1],c[2],"refetch"],l?t.nextUrl:null,t.buildId).then(e=>{let t=e[0];if("string"!=typeof t)for(let e of t)(0,r.applyFlightData)(u,u,e)});h.push(e)}for(let e in f){let n=a({state:t,updatedTree:f[e],updatedCache:u,includeNextUrl:l,fetchedSegments:i,rootTree:c,canonicalUrl:s});h.push(n)}await Promise.all(h)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},24673:function(e,t){"use strict";var n,r,o,u;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ACTION_FAST_REFRESH:function(){return f},ACTION_NAVIGATE:function(){return a},ACTION_PREFETCH:function(){return s},ACTION_REFRESH:function(){return l},ACTION_RESTORE:function(){return i},ACTION_SERVER_ACTION:function(){return d},ACTION_SERVER_PATCH:function(){return c},PrefetchCacheEntryStatus:function(){return r},PrefetchKind:function(){return n},isThenable:function(){return p}});let l="refresh",a="navigate",i="restore",c="server-patch",s="prefetch",f="fast-refresh",d="server-action";function p(e){return e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}(o=n||(n={})).AUTO="auto",o.FULL="full",o.TEMPORARY="temporary",(u=r||(r={})).fresh="fresh",u.reusable="reusable",u.expired="expired",u.stale="stale",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},91450:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"reducer",{enumerable:!0,get:function(){return f}});let r=n(24673),o=n(95967),u=n(68448),l=n(77784),a=n(99601),i=n(24819),c=n(44529),s=n(13722),f="undefined"==typeof window?function(e,t){return e}:function(e,t){switch(t.type){case r.ACTION_NAVIGATE:return(0,o.navigateReducer)(e,t);case r.ACTION_SERVER_PATCH:return(0,u.serverPatchReducer)(e,t);case r.ACTION_RESTORE:return(0,l.restoreReducer)(e,t);case r.ACTION_REFRESH:return(0,a.refreshReducer)(e,t);case r.ACTION_FAST_REFRESH:return(0,c.fastRefreshReducer)(e,t);case r.ACTION_PREFETCH:return(0,i.prefetchReducer)(e,t);case r.ACTION_SERVER_ACTION:return(0,s.serverActionReducer)(e,t);default:throw Error("Unknown action")}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},53728:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"shouldHardNavigate",{enumerable:!0,get:function(){return function e(t,n){let[o,u]=n,[l,a]=t;return(0,r.matchSegment)(l,o)?!(t.length<=2)&&e(t.slice(2),u[a]):!!Array.isArray(l)}}});let r=n(76015);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54535:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{createDynamicallyTrackedSearchParams:function(){return a},createUntrackedSearchParams:function(){return l}});let r=n(51845),o=n(86999),u=n(30650);function l(e){let t=r.staticGenerationAsyncStorage.getStore();return t&&t.forceStatic?{}:e}function a(e){let t=r.staticGenerationAsyncStorage.getStore();return t?t.forceStatic?{}:t.isStaticGeneration||t.dynamicShouldError?new Proxy({},{get:(e,n,r)=>("string"==typeof n&&(0,o.trackDynamicDataAccessed)(t,"searchParams."+n),u.ReflectAdapter.get(e,n,r)),has:(e,n)=>("string"==typeof n&&(0,o.trackDynamicDataAccessed)(t,"searchParams."+n),Reflect.has(e,n)),ownKeys:e=>((0,o.trackDynamicDataAccessed)(t,"searchParams"),Reflect.ownKeys(e))}):e:e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},51845:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"staticGenerationAsyncStorage",{enumerable:!0,get:function(){return r.staticGenerationAsyncStorage}});let r=n(20030);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},36864:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{StaticGenBailoutError:function(){return r},isStaticGenBailoutError:function(){return o}});let n="NEXT_STATIC_GEN_BAILOUT";class r extends Error{constructor(...e){super(...e),this.code=n}}function o(e){return"object"==typeof e&&null!==e&&"code"in e&&e.code===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},38137:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"unresolvedThenable",{enumerable:!0,get:function(){return n}});let n={then:()=>{}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},47744:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{useReducerWithReduxDevtools:function(){return i},useUnwrapState:function(){return a}});let r=n(53099)._(n(2265)),o=n(24673),u=n(2103);function l(e){if(e instanceof Map){let t={};for(let[n,r]of e.entries()){if("function"==typeof r){t[n]="fn()";continue}if("object"==typeof r&&null!==r){if(r.$$typeof){t[n]=r.$$typeof.toString();continue}if(r._bundlerConfig){t[n]="FlightData";continue}}t[n]=l(r)}return t}if("object"==typeof e&&null!==e){let t={};for(let n in e){let r=e[n];if("function"==typeof r){t[n]="fn()";continue}if("object"==typeof r&&null!==r){if(r.$$typeof){t[n]=r.$$typeof.toString();continue}if(r.hasOwnProperty("_bundlerConfig")){t[n]="FlightData";continue}}t[n]=l(r)}return t}return Array.isArray(e)?e.map(l):e}function a(e){return(0,o.isThenable)(e)?(0,r.use)(e):e}let i="undefined"!=typeof window?function(e){let[t,n]=r.default.useState(e),o=(0,r.useContext)(u.ActionQueueContext);if(!o)throw Error("Invariant: Missing ActionQueueContext");let a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)(()=>{if(!a.current&&!1!==i.current){if(void 0===i.current&&void 0===window.__REDUX_DEVTOOLS_EXTENSION__){i.current=!1;return}return a.current=window.__REDUX_DEVTOOLS_EXTENSION__.connect({instanceId:8e3,name:"next-router"}),a.current&&(a.current.init(l(e)),o&&(o.devToolsInstance=a.current)),()=>{a.current=void 0}}},[e,o]),[t,(0,r.useCallback)(t=>{o.state||(o.state=e),o.dispatch(t,n)},[o,e]),(0,r.useCallback)(e=>{a.current&&a.current.send({type:"RENDER_SYNC"},l(e))},[])]}:function(e){return[e,()=>{},()=>{}]};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},11283:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hasBasePath",{enumerable:!0,get:function(){return o}});let r=n(10580);function o(e){return(0,r.pathHasPrefix)(e,"")}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33068:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"normalizePathTrailingSlash",{enumerable:!0,get:function(){return u}});let r=n(26674),o=n(63381),u=e=>{if(!e.startsWith("/"))return e;let{pathname:t,query:n,hash:u}=(0,o.parsePath)(e);return""+(0,r.removeTrailingSlash)(t)+n+u};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},61404:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=n(18993);function o(e){let t="function"==typeof reportError?reportError:e=>{window.console.error(e)};(0,r.isBailoutToCSRError)(e)||t(e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},35076:function(e,t,n){"use strict";function r(e){return e}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"removeBasePath",{enumerable:!0,get:function(){return r}}),n(11283),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},12010:function(e,t){"use strict";function n(e,t){var n=e.length;for(e.push(t);0>>1,o=e[r];if(0>>1;ru(i,n))cu(s,i)?(e[r]=s,e[c]=n,r=c):(e[r]=i,e[a]=n,r=a);else if(cu(s,n))e[r]=s,e[c]=n,r=c;else break}}return t}function u(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var l,a=performance;t.unstable_now=function(){return a.now()}}else{var i=Date,c=i.now();t.unstable_now=function(){return i.now()-c}}var s=[],f=[],d=1,p=null,h=3,y=!1,_=!1,v=!1,b="function"==typeof setTimeout?setTimeout:null,g="function"==typeof clearTimeout?clearTimeout:null,m="undefined"!=typeof setImmediate?setImmediate:null;function R(e){for(var t=r(f);null!==t;){if(null===t.callback)o(f);else if(t.startTime<=e)o(f),t.sortIndex=t.expirationTime,n(s,t);else break;t=r(f)}}function P(e){if(v=!1,R(e),!_){if(null!==r(s))_=!0,C();else{var t=r(f);null!==t&&A(P,t.startTime-e)}}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var j=!1,O=-1,S=5,E=-1;function w(){return!(t.unstable_now()-Ee&&w());){var a=p.callback;if("function"==typeof a){p.callback=null,h=p.priorityLevel;var i=a(p.expirationTime<=e);if(e=t.unstable_now(),"function"==typeof i){p.callback=i,R(e),n=!0;break t}p===r(s)&&o(s),R(e)}else o(s);p=r(s)}if(null!==p)n=!0;else{var c=r(f);null!==c&&A(P,c.startTime-e),n=!1}}break e}finally{p=null,h=u,y=!1}n=void 0}}finally{n?l():j=!1}}}if("function"==typeof m)l=function(){m(T)};else if("undefined"!=typeof MessageChannel){var M=new MessageChannel,x=M.port2;M.port1.onmessage=T,l=function(){x.postMessage(null)}}else l=function(){b(T,0)};function C(){j||(j=!0,l())}function A(e,n){O=b(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){_||y||(_=!0,C())},t.unstable_forceFrameRate=function(e){0>e||125l?(e.sortIndex=u,n(f,e),null===r(s)&&e===r(f)&&(v?(g(O),O=-1):v=!0,A(P,u-l))):(e.sortIndex=a,n(s,e),_||y||(_=!0,C())),e},t.unstable_shouldYield=w,t.unstable_wrapCallback=function(e){var t=h;return function(){var n=h;h=t;try{return e.apply(this,arguments)}finally{h=n}}}},71767:function(e,t,n){"use strict";e.exports=n(12010)},60934:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{getPathname:function(){return r},isFullStringUrl:function(){return o},parseUrl:function(){return u}});let n="http://n";function r(e){return new URL(e,n).pathname}function o(e){return/https?:\/\//.test(e)}function u(e){let t;try{t=new URL(e,n)}catch{}return t}},86999:function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{Postpone:function(){return d},createPostponedAbortSignal:function(){return b},createPrerenderState:function(){return c},formatDynamicAPIAccesses:function(){return _},markCurrentScopeAsDynamic:function(){return s},trackDynamicDataAccessed:function(){return f},trackDynamicFetch:function(){return p},usedDynamicAPIs:function(){return y}});let o=(r=n(2265))&&r.__esModule?r:{default:r},u=n(46177),l=n(36864),a=n(60934),i="function"==typeof o.default.unstable_postpone;function c(e){return{isDebugSkeleton:e,dynamicAccesses:[]}}function s(e,t){let n=(0,a.getPathname)(e.urlPathname);if(!e.isUnstableCacheCallback){if(e.dynamicShouldError)throw new l.StaticGenBailoutError(`Route ${n} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`);if(e.prerenderState)h(e.prerenderState,t,n);else if(e.revalidate=0,e.isStaticGeneration){let r=new u.DynamicServerError(`Route ${n} couldn't be rendered statically because it used ${t}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`);throw e.dynamicUsageDescription=t,e.dynamicUsageStack=r.stack,r}}}function f(e,t){let n=(0,a.getPathname)(e.urlPathname);if(e.isUnstableCacheCallback)throw Error(`Route ${n} used "${t}" inside a function cached with "unstable_cache(...)". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "${t}" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`);if(e.dynamicShouldError)throw new l.StaticGenBailoutError(`Route ${n} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`);if(e.prerenderState)h(e.prerenderState,t,n);else if(e.revalidate=0,e.isStaticGeneration){let r=new u.DynamicServerError(`Route ${n} couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`);throw e.dynamicUsageDescription=t,e.dynamicUsageStack=r.stack,r}}function d({reason:e,prerenderState:t,pathname:n}){h(t,e,n)}function p(e,t){e.prerenderState&&h(e.prerenderState,t,e.urlPathname)}function h(e,t,n){v();let r=`Route ${n} needs to bail out of prerendering at this point because it used ${t}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`;e.dynamicAccesses.push({stack:e.isDebugSkeleton?Error().stack:void 0,expression:t}),o.default.unstable_postpone(r)}function y(e){return e.dynamicAccesses.length>0}function _(e){return e.dynamicAccesses.filter(e=>"string"==typeof e.stack&&e.stack.length>0).map(({expression:e,stack:t})=>(t=t.split("\n").slice(4).filter(e=>!(e.includes("node_modules/next/")||e.includes(" ()")||e.includes(" (node:"))).join("\n"),`Dynamic API Usage Debug - ${e}: +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[117],{65157:function(e,t){"use strict";function n(){return""}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getDeploymentIdQueryOrEmptyString",{enumerable:!0,get:function(){return n}})},91572:function(){"trimStart"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),"trimEnd"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),"description"in Symbol.prototype||Object.defineProperty(Symbol.prototype,"description",{configurable:!0,get:function(){var e=/\((.*)\)/.exec(this.toString());return e?e[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(e,t){return t=this.concat.apply([],this),e>1&&t.some(Array.isArray)?t.flat(e-1):t},Array.prototype.flatMap=function(e,t){return this.map(e,t).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(e){if("function"!=typeof e)return this.then(e,e);var t=this.constructor||Promise;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(e){return Array.from(e).reduce(function(e,t){return e[t[0]]=t[1],e},{})}),Array.prototype.at||(Array.prototype.at=function(e){var t=Math.trunc(e)||0;if(t<0&&(t+=this.length),!(t<0||t>=this.length))return this[t]}),Object.hasOwn||(Object.hasOwn=function(e,t){if(null==e)throw TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(Object(e),t)}),"canParse"in URL||(URL.canParse=function(e,t){try{return new URL(e,t),!0}catch(e){return!1}})},1634:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addBasePath",{enumerable:!0,get:function(){return u}});let r=n(68498),o=n(33068);function u(e,t){return(0,o.normalizePathTrailingSlash)((0,r.addPathPrefix)(e,""))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},75266:function(e,t){"use strict";function n(e){var t,n;t=self.__next_s,n=()=>{e()},t&&t.length?t.reduce((e,t)=>{let[n,r]=t;return e.then(()=>new Promise((e,t)=>{let o=document.createElement("script");if(r)for(let e in r)"children"!==e&&o.setAttribute(e,r[e]);n?(o.src=n,o.onload=()=>e(),o.onerror=t):r&&(o.innerHTML=r.children,setTimeout(e)),document.head.appendChild(o)}))},Promise.resolve()).catch(e=>{console.error(e)}).then(()=>{n()}):n()}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"appBootstrap",{enumerable:!0,get:function(){return n}}),window.next={version:"14.2.32",appDir:!0},("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},83079:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"callServer",{enumerable:!0,get:function(){return o}});let r=n(12846);async function o(e,t){let n=(0,r.getServerActionDispatcher)();if(!n)throw Error("Invariant: missing action dispatcher.");return new Promise((r,o)=>{n({actionId:e,actionArgs:t,resolve:r,reject:o})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},92304:function(e,t,n){"use strict";let r,o;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hydrate",{enumerable:!0,get:function(){return x}});let u=n(47043),l=n(53099),a=n(57437);n(91572);let i=u._(n(34040)),c=l._(n(2265)),s=n(6671),f=n(48701),d=u._(n(61404)),p=n(83079),h=n(89721),y=n(2103);n(70647);let _=window.console.error;window.console.error=function(){for(var e=arguments.length,t=Array(e),n=0;n{if((0,h.isNextRouterError)(e.error)){e.preventDefault();return}});let v=document,b=new TextEncoder,g=!1,m=!1,R=null;function P(e){if(0===e[0])r=[];else if(1===e[0]){if(!r)throw Error("Unexpected server data: missing bootstrap script.");o?o.enqueue(b.encode(e[1])):r.push(e[1])}else 2===e[0]&&(R=e[1])}let j=function(){o&&!m&&(o.close(),m=!0,r=void 0),g=!0};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",j,!1):j();let O=self.__next_f=self.__next_f||[];O.forEach(P),O.push=P;let S=new ReadableStream({start(e){r&&(r.forEach(t=>{e.enqueue(b.encode(t))}),g&&!m&&(e.close(),m=!0,r=void 0)),o=e}}),E=(0,s.createFromReadableStream)(S,{callServer:p.callServer});function w(){return(0,c.use)(E)}let T=c.default.StrictMode;function M(e){let{children:t}=e;return t}function x(){let e=(0,y.createMutableActionQueue)(),t=(0,a.jsx)(T,{children:(0,a.jsx)(f.HeadManagerContext.Provider,{value:{appDir:!0},children:(0,a.jsx)(y.ActionQueueContext.Provider,{value:e,children:(0,a.jsx)(M,{children:(0,a.jsx)(w,{})})})})}),n=window.__next_root_layout_missing_tags,r=!!(null==n?void 0:n.length),o={onRecoverableError:d.default};"__next_error__"===document.documentElement.id||r?i.default.createRoot(v,o).render(t):c.default.startTransition(()=>i.default.hydrateRoot(v,t,{...o,formState:R}))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54278:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(19506),(0,n(75266).appBootstrap)(()=>{let{hydrate:e}=n(92304);n(12846),n(4707),e()}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},19506:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(65157);{let e=n.u;n.u=function(){for(var t=arguments.length,n=Array(t),r=0;r(l(function(){var e;let t=document.getElementsByName(u)[0];if(null==t?void 0:null==(e=t.shadowRoot)?void 0:e.childNodes[0])return t.shadowRoot.childNodes[0];{let e=document.createElement(u);e.style.cssText="position:absolute";let t=document.createElement("div");return t.ariaLive="assertive",t.id="__next-route-announcer__",t.role="alert",t.style.cssText="position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal",e.attachShadow({mode:"open"}).appendChild(t),document.body.appendChild(e),t}}()),()=>{let e=document.getElementsByTagName(u)[0];(null==e?void 0:e.isConnected)&&document.body.removeChild(e)}),[]);let[a,i]=(0,r.useState)(""),c=(0,r.useRef)();return(0,r.useEffect)(()=>{let e="";if(document.title)e=document.title;else{let t=document.querySelector("h1");t&&(e=t.innerText||t.textContent||"")}void 0!==c.current&&c.current!==e&&i(e),c.current=e},[t]),n?(0,o.createPortal)(a,n):null}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},6866:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ACTION:function(){return r},FLIGHT_PARAMETERS:function(){return i},NEXT_DID_POSTPONE_HEADER:function(){return s},NEXT_ROUTER_PREFETCH_HEADER:function(){return u},NEXT_ROUTER_STATE_TREE:function(){return o},NEXT_RSC_UNION_QUERY:function(){return c},NEXT_URL:function(){return l},RSC_CONTENT_TYPE_HEADER:function(){return a},RSC_HEADER:function(){return n}});let n="RSC",r="Next-Action",o="Next-Router-State-Tree",u="Next-Router-Prefetch",l="Next-Url",a="text/x-component",i=[[n],[o],[u]],c="_rsc",s="x-nextjs-postponed";("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},12846:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{createEmptyCacheNode:function(){return C},default:function(){return I},getServerActionDispatcher:function(){return E},urlToUrlWithoutFlightMarker:function(){return T}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(61956),a=n(24673),i=n(33456),c=n(79060),s=n(47744),f=n(61060),d=n(82952),p=n(86146),h=n(1634),y=n(6495),_=n(4123),v=n(39320),b=n(38137),g=n(6866),m=n(35076),R=n(11283),P=n(84541),j="undefined"==typeof window,O=j?null:new Map,S=null;function E(){return S}let w={};function T(e){let t=new URL(e,location.origin);if(t.searchParams.delete(g.NEXT_RSC_UNION_QUERY),t.pathname.endsWith(".txt")){let{pathname:e}=t,n=e.endsWith("/index.txt")?10:4;t.pathname=e.slice(0,-n)}return t}function M(e){return e.origin!==window.location.origin}function x(e){let{appRouterState:t,sync:n}=e;return(0,u.useInsertionEffect)(()=>{let{tree:e,pushRef:r,canonicalUrl:o}=t,u={...r.preserveCustomHistoryState?window.history.state:{},__NA:!0,__PRIVATE_NEXTJS_INTERNALS_TREE:e};r.pendingPush&&(0,i.createHrefFromUrl)(new URL(window.location.href))!==o?(r.pendingPush=!1,window.history.pushState(u,"",o)):window.history.replaceState(u,"",o),n(t)},[t,n]),null}function C(){return{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null}}function A(e){null==e&&(e={});let t=window.history.state,n=null==t?void 0:t.__NA;n&&(e.__NA=n);let r=null==t?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE;return r&&(e.__PRIVATE_NEXTJS_INTERNALS_TREE=r),e}function N(e){let{headCacheNode:t}=e,n=null!==t?t.head:null,r=null!==t?t.prefetchHead:null,o=null!==r?r:n;return(0,u.useDeferredValue)(n,o)}function D(e){let t,{buildId:n,initialHead:r,initialTree:i,urlParts:f,initialSeedData:g,couldBeIntercepted:E,assetPrefix:T,missingSlots:C}=e,D=(0,u.useMemo)(()=>(0,d.createInitialRouterState)({buildId:n,initialSeedData:g,urlParts:f,initialTree:i,initialParallelRoutes:O,location:j?null:window.location,initialHead:r,couldBeIntercepted:E}),[n,g,f,i,r,E]),[I,U,k]=(0,s.useReducerWithReduxDevtools)(D);(0,u.useEffect)(()=>{O=null},[]);let{canonicalUrl:F}=(0,s.useUnwrapState)(I),{searchParams:L,pathname:H}=(0,u.useMemo)(()=>{let e=new URL(F,"undefined"==typeof window?"http://n":window.location.href);return{searchParams:e.searchParams,pathname:(0,R.hasBasePath)(e.pathname)?(0,m.removeBasePath)(e.pathname):e.pathname}},[F]),$=(0,u.useCallback)(e=>{let{previousTree:t,serverResponse:n}=e;(0,u.startTransition)(()=>{U({type:a.ACTION_SERVER_PATCH,previousTree:t,serverResponse:n})})},[U]),G=(0,u.useCallback)((e,t,n)=>{let r=new URL((0,h.addBasePath)(e),location.href);return U({type:a.ACTION_NAVIGATE,url:r,isExternalUrl:M(r),locationSearch:location.search,shouldScroll:null==n||n,navigateType:t})},[U]);S=(0,u.useCallback)(e=>{(0,u.startTransition)(()=>{U({...e,type:a.ACTION_SERVER_ACTION})})},[U]);let z=(0,u.useMemo)(()=>({back:()=>window.history.back(),forward:()=>window.history.forward(),prefetch:(e,t)=>{let n;if(!(0,p.isBot)(window.navigator.userAgent)){try{n=new URL((0,h.addBasePath)(e),window.location.href)}catch(t){throw Error("Cannot prefetch '"+e+"' because it cannot be converted to a URL.")}M(n)||(0,u.startTransition)(()=>{var e;U({type:a.ACTION_PREFETCH,url:n,kind:null!=(e=null==t?void 0:t.kind)?e:a.PrefetchKind.FULL})})}},replace:(e,t)=>{void 0===t&&(t={}),(0,u.startTransition)(()=>{var n;G(e,"replace",null==(n=t.scroll)||n)})},push:(e,t)=>{void 0===t&&(t={}),(0,u.startTransition)(()=>{var n;G(e,"push",null==(n=t.scroll)||n)})},refresh:()=>{(0,u.startTransition)(()=>{U({type:a.ACTION_REFRESH,origin:window.location.origin})})},fastRefresh:()=>{throw Error("fastRefresh can only be used in development mode. Please use refresh instead.")}}),[U,G]);(0,u.useEffect)(()=>{window.next&&(window.next.router=z)},[z]),(0,u.useEffect)(()=>{function e(e){var t;e.persisted&&(null==(t=window.history.state)?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE)&&(w.pendingMpaPath=void 0,U({type:a.ACTION_RESTORE,url:new URL(window.location.href),tree:window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE}))}return window.addEventListener("pageshow",e),()=>{window.removeEventListener("pageshow",e)}},[U]);let{pushRef:B}=(0,s.useUnwrapState)(I);if(B.mpaNavigation){if(w.pendingMpaPath!==F){let e=window.location;B.pendingPush?e.assign(F):e.replace(F),w.pendingMpaPath=F}(0,u.use)(b.unresolvedThenable)}(0,u.useEffect)(()=>{let e=window.history.pushState.bind(window.history),t=window.history.replaceState.bind(window.history),n=e=>{var t;let n=window.location.href,r=null==(t=window.history.state)?void 0:t.__PRIVATE_NEXTJS_INTERNALS_TREE;(0,u.startTransition)(()=>{U({type:a.ACTION_RESTORE,url:new URL(null!=e?e:n,n),tree:r})})};window.history.pushState=function(t,r,o){return(null==t?void 0:t.__NA)||(null==t?void 0:t._N)||(t=A(t),o&&n(o)),e(t,r,o)},window.history.replaceState=function(e,r,o){return(null==e?void 0:e.__NA)||(null==e?void 0:e._N)||(e=A(e),o&&n(o)),t(e,r,o)};let r=e=>{let{state:t}=e;if(t){if(!t.__NA){window.location.reload();return}(0,u.startTransition)(()=>{U({type:a.ACTION_RESTORE,url:new URL(window.location.href),tree:t.__PRIVATE_NEXTJS_INTERNALS_TREE})})}};return window.addEventListener("popstate",r),()=>{window.history.pushState=e,window.history.replaceState=t,window.removeEventListener("popstate",r)}},[U]);let{cache:W,tree:K,nextUrl:V,focusAndScrollRef:Y}=(0,s.useUnwrapState)(I),X=(0,u.useMemo)(()=>(0,v.findHeadInCache)(W,K[1]),[W,K]),q=(0,u.useMemo)(()=>(function e(t,n){for(let r of(void 0===n&&(n={}),Object.values(t[1]))){let t=r[0],o=Array.isArray(t),u=o?t[1]:t;!u||u.startsWith(P.PAGE_SEGMENT_KEY)||(o&&("c"===t[2]||"oc"===t[2])?n[t[0]]=t[1].split("/"):o&&(n[t[0]]=t[1]),n=e(r,n))}return n})(K),[K]);if(null!==X){let[e,n]=X;t=(0,o.jsx)(N,{headCacheNode:e},n)}else t=null;let J=(0,o.jsxs)(_.RedirectBoundary,{children:[t,W.rsc,(0,o.jsx)(y.AppRouterAnnouncer,{tree:K})]});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(x,{appRouterState:(0,s.useUnwrapState)(I),sync:k}),(0,o.jsx)(c.PathParamsContext.Provider,{value:q,children:(0,o.jsx)(c.PathnameContext.Provider,{value:H,children:(0,o.jsx)(c.SearchParamsContext.Provider,{value:L,children:(0,o.jsx)(l.GlobalLayoutRouterContext.Provider,{value:{buildId:n,changeByServerResponse:$,tree:K,focusAndScrollRef:Y,nextUrl:V},children:(0,o.jsx)(l.AppRouterContext.Provider,{value:z,children:(0,o.jsx)(l.LayoutRouterContext.Provider,{value:{childNodes:W.parallelRoutes,tree:K,url:F,loading:W.loading},children:J})})})})})})]})}function I(e){let{globalErrorComponent:t,...n}=e;return(0,o.jsx)(f.ErrorBoundary,{errorComponent:t,children:(0,o.jsx)(D,{...n})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},96149:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"bailoutToClientRendering",{enumerable:!0,get:function(){return u}});let r=n(18993),o=n(51845);function u(e){let t=o.staticGenerationAsyncStorage.getStore();if((null==t||!t.forceStatic)&&(null==t?void 0:t.isStaticGeneration))throw new r.BailoutToCSRError(e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},19107:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ClientPageRoot",{enumerable:!0,get:function(){return u}});let r=n(57437),o=n(54535);function u(e){let{Component:t,props:n}=e;return n.searchParams=(0,o.createDynamicallyTrackedSearchParams)(n.searchParams||{}),(0,r.jsx)(t,{...n})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},61060:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ErrorBoundary:function(){return h},ErrorBoundaryHandler:function(){return f},GlobalError:function(){return d},default:function(){return p}});let r=n(47043),o=n(57437),u=r._(n(2265)),l=n(35475),a=n(89721),i=n(51845),c={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},text:{fontSize:"14px",fontWeight:400,lineHeight:"28px",margin:"0 8px"}};function s(e){let{error:t}=e,n=i.staticGenerationAsyncStorage.getStore();if((null==n?void 0:n.isRevalidate)||(null==n?void 0:n.isStaticGeneration))throw console.error(t),t;return null}class f extends u.default.Component{static getDerivedStateFromError(e){if((0,a.isNextRouterError)(e))throw e;return{error:e}}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.error?{error:null,previousPathname:e.pathname}:{error:t.error,previousPathname:e.pathname}}render(){return this.state.error?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s,{error:this.state.error}),this.props.errorStyles,this.props.errorScripts,(0,o.jsx)(this.props.errorComponent,{error:this.state.error,reset:this.reset})]}):this.props.children}constructor(e){super(e),this.reset=()=>{this.setState({error:null})},this.state={error:null,previousPathname:this.props.pathname}}}function d(e){let{error:t}=e,n=null==t?void 0:t.digest;return(0,o.jsxs)("html",{id:"__next_error__",children:[(0,o.jsx)("head",{}),(0,o.jsxs)("body",{children:[(0,o.jsx)(s,{error:t}),(0,o.jsx)("div",{style:c.error,children:(0,o.jsxs)("div",{children:[(0,o.jsx)("h2",{style:c.text,children:"Application error: a "+(n?"server":"client")+"-side exception has occurred (see the "+(n?"server logs":"browser console")+" for more information)."}),n?(0,o.jsx)("p",{style:c.text,children:"Digest: "+n}):null]})})]})]})}let p=d;function h(e){let{errorComponent:t,errorStyles:n,errorScripts:r,children:u}=e,a=(0,l.usePathname)();return t?(0,o.jsx)(f,{pathname:a,errorComponent:t,errorStyles:n,errorScripts:r,children:u}):(0,o.jsx)(o.Fragment,{children:u})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},46177:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{DynamicServerError:function(){return r},isDynamicServerError:function(){return o}});let n="DYNAMIC_SERVER_USAGE";class r extends Error{constructor(e){super("Dynamic server usage: "+e),this.description=e,this.digest=n}}function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&"string"==typeof e.digest&&e.digest===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},89721:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isNextRouterError",{enumerable:!0,get:function(){return u}});let r=n(98200),o=n(88968);function u(e){return e&&e.digest&&((0,o.isRedirectError)(e)||(0,r.isNotFoundError)(e))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4707:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return S}});let r=n(47043),o=n(53099),u=n(57437),l=o._(n(2265)),a=r._(n(54887)),i=n(61956),c=n(44848),s=n(38137),f=n(61060),d=n(76015),p=n(7092),h=n(4123),y=n(80),_=n(73171),v=n(78505),b=n(28077),g=["bottom","height","left","right","top","width","x","y"];function m(e,t){let n=e.getBoundingClientRect();return n.top>=0&&n.top<=t}class R extends l.default.Component{componentDidMount(){this.handlePotentialScroll()}componentDidUpdate(){this.props.focusAndScrollRef.apply&&this.handlePotentialScroll()}render(){return this.props.children}constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focusAndScrollRef:e,segmentPath:t}=this.props;if(e.apply){var n;if(0!==e.segmentPaths.length&&!e.segmentPaths.some(e=>t.every((t,n)=>(0,d.matchSegment)(t,e[n]))))return;let r=null,o=e.hashFragment;if(o&&(r="top"===o?document.body:null!=(n=document.getElementById(o))?n:document.getElementsByName(o)[0]),r||(r="undefined"==typeof window?null:a.default.findDOMNode(this)),!(r instanceof Element))return;for(;!(r instanceof HTMLElement)||function(e){if(["sticky","fixed"].includes(getComputedStyle(e).position))return!0;let t=e.getBoundingClientRect();return g.every(e=>0===t[e])}(r);){if(null===r.nextElementSibling)return;r=r.nextElementSibling}e.apply=!1,e.hashFragment=null,e.segmentPaths=[],(0,p.handleSmoothScroll)(()=>{if(o){r.scrollIntoView();return}let e=document.documentElement,t=e.clientHeight;!m(r,t)&&(e.scrollTop=0,m(r,t)||r.scrollIntoView())},{dontForceLayout:!0,onlyHashChange:e.onlyHashChange}),e.onlyHashChange=!1,r.focus()}}}}function P(e){let{segmentPath:t,children:n}=e,r=(0,l.useContext)(i.GlobalLayoutRouterContext);if(!r)throw Error("invariant global layout router not mounted");return(0,u.jsx)(R,{segmentPath:t,focusAndScrollRef:r.focusAndScrollRef,children:n})}function j(e){let{parallelRouterKey:t,url:n,childNodes:r,segmentPath:o,tree:a,cacheKey:f}=e,p=(0,l.useContext)(i.GlobalLayoutRouterContext);if(!p)throw Error("invariant global layout router not mounted");let{buildId:h,changeByServerResponse:y,tree:_}=p,v=r.get(f);if(void 0===v){let e={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null};v=e,r.set(f,e)}let g=null!==v.prefetchRsc?v.prefetchRsc:v.rsc,m=(0,l.useDeferredValue)(v.rsc,g),R="object"==typeof m&&null!==m&&"function"==typeof m.then?(0,l.use)(m):m;if(!R){let e=v.lazyData;if(null===e){let t=function e(t,n){if(t){let[r,o]=t,u=2===t.length;if((0,d.matchSegment)(n[0],r)&&n[1].hasOwnProperty(o)){if(u){let t=e(void 0,n[1][o]);return[n[0],{...n[1],[o]:[t[0],t[1],t[2],"refetch"]}]}return[n[0],{...n[1],[o]:e(t.slice(2),n[1][o])}]}}return n}(["",...o],_),r=(0,b.hasInterceptionRouteInCurrentTree)(_);v.lazyData=e=(0,c.fetchServerResponse)(new URL(n,location.origin),t,r?p.nextUrl:null,h),v.lazyDataResolved=!1}let t=(0,l.use)(e);v.lazyDataResolved||(setTimeout(()=>{(0,l.startTransition)(()=>{y({previousTree:_,serverResponse:t})})}),v.lazyDataResolved=!0),(0,l.use)(s.unresolvedThenable)}return(0,u.jsx)(i.LayoutRouterContext.Provider,{value:{tree:a[1][t],childNodes:v.parallelRoutes,url:n,loading:v.loading},children:R})}function O(e){let{children:t,hasLoading:n,loading:r,loadingStyles:o,loadingScripts:a}=e;return n?(0,u.jsx)(l.Suspense,{fallback:(0,u.jsxs)(u.Fragment,{children:[o,a,r]}),children:t}):(0,u.jsx)(u.Fragment,{children:t})}function S(e){let{parallelRouterKey:t,segmentPath:n,error:r,errorStyles:o,errorScripts:a,templateStyles:c,templateScripts:s,template:d,notFound:p,notFoundStyles:b}=e,g=(0,l.useContext)(i.LayoutRouterContext);if(!g)throw Error("invariant expected layout router to be mounted");let{childNodes:m,tree:R,url:S,loading:E}=g,w=m.get(t);w||(w=new Map,m.set(t,w));let T=R[1][t][0],M=(0,_.getSegmentValue)(T),x=[T];return(0,u.jsx)(u.Fragment,{children:x.map(e=>{let l=(0,_.getSegmentValue)(e),g=(0,v.createRouterCacheKey)(e);return(0,u.jsxs)(i.TemplateContext.Provider,{value:(0,u.jsx)(P,{segmentPath:n,children:(0,u.jsx)(f.ErrorBoundary,{errorComponent:r,errorStyles:o,errorScripts:a,children:(0,u.jsx)(O,{hasLoading:!!E,loading:null==E?void 0:E[0],loadingStyles:null==E?void 0:E[1],loadingScripts:null==E?void 0:E[2],children:(0,u.jsx)(y.NotFoundBoundary,{notFound:p,notFoundStyles:b,children:(0,u.jsx)(h.RedirectBoundary,{children:(0,u.jsx)(j,{parallelRouterKey:t,url:S,tree:R,childNodes:w,segmentPath:n,cacheKey:g,isActive:M===l})})})})})}),children:[c,s,d]},(0,v.createRouterCacheKey)(e,!0))})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},76015:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{canSegmentBeOverridden:function(){return u},matchSegment:function(){return o}});let r=n(87417),o=(e,t)=>"string"==typeof e?"string"==typeof t&&e===t:"string"!=typeof t&&e[0]===t[0]&&e[1]===t[1],u=(e,t)=>{var n;return!Array.isArray(e)&&!!Array.isArray(t)&&(null==(n=(0,r.getSegmentParam)(e))?void 0:n.param)===t[0]};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},35475:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ReadonlyURLSearchParams:function(){return i.ReadonlyURLSearchParams},RedirectType:function(){return i.RedirectType},ServerInsertedHTMLContext:function(){return c.ServerInsertedHTMLContext},notFound:function(){return i.notFound},permanentRedirect:function(){return i.permanentRedirect},redirect:function(){return i.redirect},useParams:function(){return p},usePathname:function(){return f},useRouter:function(){return d},useSearchParams:function(){return s},useSelectedLayoutSegment:function(){return y},useSelectedLayoutSegments:function(){return h},useServerInsertedHTML:function(){return c.useServerInsertedHTML}});let r=n(2265),o=n(61956),u=n(79060),l=n(73171),a=n(84541),i=n(52646),c=n(55501);function s(){let e=(0,r.useContext)(u.SearchParamsContext),t=(0,r.useMemo)(()=>e?new i.ReadonlyURLSearchParams(e):null,[e]);if("undefined"==typeof window){let{bailoutToClientRendering:e}=n(96149);e("useSearchParams()")}return t}function f(){return(0,r.useContext)(u.PathnameContext)}function d(){let e=(0,r.useContext)(o.AppRouterContext);if(null===e)throw Error("invariant expected app router to be mounted");return e}function p(){return(0,r.useContext)(u.PathParamsContext)}function h(e){void 0===e&&(e="children");let t=(0,r.useContext)(o.LayoutRouterContext);return t?function e(t,n,r,o){let u;if(void 0===r&&(r=!0),void 0===o&&(o=[]),r)u=t[1][n];else{var i;let e=t[1];u=null!=(i=e.children)?i:Object.values(e)[0]}if(!u)return o;let c=u[0],s=(0,l.getSegmentValue)(c);return!s||s.startsWith(a.PAGE_SEGMENT_KEY)?o:(o.push(s),e(u,n,!1,o))}(t.tree,e):null}function y(e){void 0===e&&(e="children");let t=h(e);if(!t||0===t.length)return null;let n="children"===e?t[0]:t[t.length-1];return n===a.DEFAULT_SEGMENT_KEY?null:n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},52646:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ReadonlyURLSearchParams:function(){return l},RedirectType:function(){return r.RedirectType},notFound:function(){return o.notFound},permanentRedirect:function(){return r.permanentRedirect},redirect:function(){return r.redirect}});let r=n(88968),o=n(98200);class u extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class l extends URLSearchParams{append(){throw new u}delete(){throw new u}set(){throw new u}sort(){throw new u}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},80:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NotFoundBoundary",{enumerable:!0,get:function(){return s}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(35475),a=n(98200);n(31765);let i=n(61956);class c extends u.default.Component{componentDidCatch(){}static getDerivedStateFromError(e){if((0,a.isNotFoundError)(e))return{notFoundTriggered:!0};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.notFoundTriggered?{notFoundTriggered:!1,previousPathname:e.pathname}:{notFoundTriggered:t.notFoundTriggered,previousPathname:e.pathname}}render(){return this.state.notFoundTriggered?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{name:"robots",content:"noindex"}),!1,this.props.notFoundStyles,this.props.notFound]}):this.props.children}constructor(e){super(e),this.state={notFoundTriggered:!!e.asNotFound,previousPathname:e.pathname}}}function s(e){let{notFound:t,notFoundStyles:n,asNotFound:r,children:a}=e,s=(0,l.usePathname)(),f=(0,u.useContext)(i.MissingSlotContext);return t?(0,o.jsx)(c,{pathname:s,notFound:t,notFoundStyles:n,asNotFound:r,missingSlots:f,children:a}):(0,o.jsx)(o.Fragment,{children:a})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},98200:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{isNotFoundError:function(){return o},notFound:function(){return r}});let n="NEXT_NOT_FOUND";function r(){let e=Error(n);throw e.digest=n,e}function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},29744:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PromiseQueue",{enumerable:!0,get:function(){return c}});let r=n(2522),o=n(90675);var u=o._("_maxConcurrency"),l=o._("_runningCount"),a=o._("_queue"),i=o._("_processNext");class c{enqueue(e){let t,n;let o=new Promise((e,r)=>{t=e,n=r}),u=async()=>{try{r._(this,l)[l]++;let n=await e();t(n)}catch(e){n(e)}finally{r._(this,l)[l]--,r._(this,i)[i]()}};return r._(this,a)[a].push({promiseFn:o,task:u}),r._(this,i)[i](),o}bump(e){let t=r._(this,a)[a].findIndex(t=>t.promiseFn===e);if(t>-1){let e=r._(this,a)[a].splice(t,1)[0];r._(this,a)[a].unshift(e),r._(this,i)[i](!0)}}constructor(e=5){Object.defineProperty(this,i,{value:s}),Object.defineProperty(this,u,{writable:!0,value:void 0}),Object.defineProperty(this,l,{writable:!0,value:void 0}),Object.defineProperty(this,a,{writable:!0,value:void 0}),r._(this,u)[u]=e,r._(this,l)[l]=0,r._(this,a)[a]=[]}}function s(e){if(void 0===e&&(e=!1),(r._(this,l)[l]0){var t;null==(t=r._(this,a)[a].shift())||t.task()}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4123:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{RedirectBoundary:function(){return s},RedirectErrorBoundary:function(){return c}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(35475),a=n(88968);function i(e){let{redirect:t,reset:n,redirectType:r}=e,o=(0,l.useRouter)();return(0,u.useEffect)(()=>{u.default.startTransition(()=>{r===a.RedirectType.push?o.push(t,{}):o.replace(t,{}),n()})},[t,r,n,o]),null}class c extends u.default.Component{static getDerivedStateFromError(e){if((0,a.isRedirectError)(e))return{redirect:(0,a.getURLFromRedirectError)(e),redirectType:(0,a.getRedirectTypeFromError)(e)};throw e}render(){let{redirect:e,redirectType:t}=this.state;return null!==e&&null!==t?(0,o.jsx)(i,{redirect:e,redirectType:t,reset:()=>this.setState({redirect:null})}):this.props.children}constructor(e){super(e),this.state={redirect:null,redirectType:null}}}function s(e){let{children:t}=e,n=(0,l.useRouter)();return(0,o.jsx)(c,{router:n,children:t})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5001:function(e,t){"use strict";var n,r;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"RedirectStatusCode",{enumerable:!0,get:function(){return n}}),(r=n||(n={}))[r.SeeOther=303]="SeeOther",r[r.TemporaryRedirect=307]="TemporaryRedirect",r[r.PermanentRedirect=308]="PermanentRedirect",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},88968:function(e,t,n){"use strict";var r,o;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{RedirectType:function(){return r},getRedirectError:function(){return c},getRedirectStatusCodeFromError:function(){return y},getRedirectTypeFromError:function(){return h},getURLFromRedirectError:function(){return p},isRedirectError:function(){return d},permanentRedirect:function(){return f},redirect:function(){return s}});let u=n(20544),l=n(90295),a=n(5001),i="NEXT_REDIRECT";function c(e,t,n){void 0===n&&(n=a.RedirectStatusCode.TemporaryRedirect);let r=Error(i);r.digest=i+";"+t+";"+e+";"+n+";";let o=u.requestAsyncStorage.getStore();return o&&(r.mutableCookies=o.mutableCookies),r}function s(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.getStore();throw c(e,t,(null==n?void 0:n.isAction)?a.RedirectStatusCode.SeeOther:a.RedirectStatusCode.TemporaryRedirect)}function f(e,t){void 0===t&&(t="replace");let n=l.actionAsyncStorage.getStore();throw c(e,t,(null==n?void 0:n.isAction)?a.RedirectStatusCode.SeeOther:a.RedirectStatusCode.PermanentRedirect)}function d(e){if("object"!=typeof e||null===e||!("digest"in e)||"string"!=typeof e.digest)return!1;let[t,n,r,o]=e.digest.split(";",4),u=Number(o);return t===i&&("replace"===n||"push"===n)&&"string"==typeof r&&!isNaN(u)&&u in a.RedirectStatusCode}function p(e){return d(e)?e.digest.split(";",3)[2]:null}function h(e){if(!d(e))throw Error("Not a redirect error");return e.digest.split(";",2)[1]}function y(e){if(!d(e))throw Error("Not a redirect error");return Number(e.digest.split(";",4)[3])}(o=r||(r={})).push="push",o.replace="replace",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},36423:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a}});let r=n(53099),o=n(57437),u=r._(n(2265)),l=n(61956);function a(){let e=(0,u.useContext)(l.TemplateContext);return(0,o.jsx)(o.Fragment,{children:e})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},20544:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{getExpectedRequestStore:function(){return o},requestAsyncStorage:function(){return r.requestAsyncStorage}});let r=n(25575);function o(e){let t=r.requestAsyncStorage.getStore();if(t)return t;throw Error("`"+e+"` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context")}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},22356:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"applyFlightData",{enumerable:!0,get:function(){return u}});let r=n(27420),o=n(92576);function u(e,t,n,u){let[l,a,i]=n.slice(-3);if(null===a)return!1;if(3===n.length){let n=a[2],o=a[3];t.loading=o,t.rsc=n,t.prefetchRsc=null,(0,r.fillLazyItemsTillLeafWithHead)(t,e,l,a,i,u)}else t.rsc=e.rsc,t.prefetchRsc=e.prefetchRsc,t.parallelRoutes=new Map(e.parallelRoutes),t.loading=e.loading,(0,o.fillCacheWithNewSubTreeData)(t,e,n,u);return!0}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},81935:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"applyRouterStatePatchToTree",{enumerable:!0,get:function(){return function e(t,n,r,a){let i;let[c,s,f,d,p]=n;if(1===t.length){let e=l(n,r,t);return(0,u.addRefreshMarkerToActiveParallelSegments)(e,a),e}let[h,y]=t;if(!(0,o.matchSegment)(h,c))return null;if(2===t.length)i=l(s[y],r,t);else if(null===(i=e(t.slice(2),s[y],r,a)))return null;let _=[t[0],{...s,[y]:i},f,d];return p&&(_[4]=!0),(0,u.addRefreshMarkerToActiveParallelSegments)(_,a),_}}});let r=n(84541),o=n(76015),u=n(50232);function l(e,t,n){let[u,a]=e,[i,c]=t;if(i===r.DEFAULT_SEGMENT_KEY&&u!==r.DEFAULT_SEGMENT_KEY)return e;if((0,o.matchSegment)(u,i)){let t={};for(let e in a)void 0!==c[e]?t[e]=l(a[e],c[e],n):t[e]=a[e];for(let e in c)t[e]||(t[e]=c[e]);let r=[u,t];return e[2]&&(r[2]=e[2]),e[3]&&(r[3]=e[3]),e[4]&&(r[4]=e[4]),r}return t}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},65556:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"clearCacheNodeDataForSegmentPath",{enumerable:!0,get:function(){return function e(t,n,o){let u=o.length<=2,[l,a]=o,i=(0,r.createRouterCacheKey)(a),c=n.parallelRoutes.get(l),s=t.parallelRoutes.get(l);s&&s!==c||(s=new Map(c),t.parallelRoutes.set(l,s));let f=null==c?void 0:c.get(i),d=s.get(i);if(u){d&&d.lazyData&&d!==f||s.set(i,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null});return}if(!d||!f){d||s.set(i,{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null});return}return d===f&&(d={lazyData:d.lazyData,rsc:d.rsc,prefetchRsc:d.prefetchRsc,head:d.head,prefetchHead:d.prefetchHead,parallelRoutes:new Map(d.parallelRoutes),lazyDataResolved:d.lazyDataResolved,loading:d.loading},s.set(i,d)),e(d,f,o.slice(2))}}});let r=n(78505);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5410:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{computeChangedPath:function(){return s},extractPathFromFlightRouterState:function(){return c}});let r=n(91182),o=n(84541),u=n(76015),l=e=>"/"===e[0]?e.slice(1):e,a=e=>"string"==typeof e?"children"===e?"":e:e[1];function i(e){return e.reduce((e,t)=>""===(t=l(t))||(0,o.isGroupSegment)(t)?e:e+"/"+t,"")||"/"}function c(e){var t;let n=Array.isArray(e[0])?e[0][1]:e[0];if(n===o.DEFAULT_SEGMENT_KEY||r.INTERCEPTION_ROUTE_MARKERS.some(e=>n.startsWith(e)))return;if(n.startsWith(o.PAGE_SEGMENT_KEY))return"";let u=[a(n)],l=null!=(t=e[1])?t:{},s=l.children?c(l.children):void 0;if(void 0!==s)u.push(s);else for(let[e,t]of Object.entries(l)){if("children"===e)continue;let n=c(t);void 0!==n&&u.push(n)}return i(u)}function s(e,t){let n=function e(t,n){let[o,l]=t,[i,s]=n,f=a(o),d=a(i);if(r.INTERCEPTION_ROUTE_MARKERS.some(e=>f.startsWith(e)||d.startsWith(e)))return"";if(!(0,u.matchSegment)(o,i)){var p;return null!=(p=c(n))?p:""}for(let t in l)if(s[t]){let n=e(l[t],s[t]);if(null!==n)return a(i)+"/"+n}return null}(e,t);return null==n||"/"===n?n:i(n.split("/"))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33456:function(e,t){"use strict";function n(e,t){return void 0===t&&(t=!0),e.pathname+e.search+(t?e.hash:"")}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createHrefFromUrl",{enumerable:!0,get:function(){return n}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},82952:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createInitialRouterState",{enumerable:!0,get:function(){return c}});let r=n(33456),o=n(27420),u=n(5410),l=n(60305),a=n(24673),i=n(50232);function c(e){var t;let{buildId:n,initialTree:c,initialSeedData:s,urlParts:f,initialParallelRoutes:d,location:p,initialHead:h,couldBeIntercepted:y}=e,_=f.join("/"),v=!p,b={lazyData:null,rsc:s[2],prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:v?new Map:d,lazyDataResolved:!1,loading:s[3]},g=p?(0,r.createHrefFromUrl)(p):_;(0,i.addRefreshMarkerToActiveParallelSegments)(c,g);let m=new Map;(null===d||0===d.size)&&(0,o.fillLazyItemsTillLeafWithHead)(b,void 0,c,s,h);let R={buildId:n,tree:c,cache:b,prefetchCache:m,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:{apply:!1,onlyHashChange:!1,hashFragment:null,segmentPaths:[]},canonicalUrl:g,nextUrl:null!=(t=(0,u.extractPathFromFlightRouterState)(c)||(null==p?void 0:p.pathname))?t:null};if(p){let e=new URL(""+p.pathname+p.search,p.origin),t=[["",c,null,null]];(0,l.createPrefetchCacheEntryForInitialLoad)({url:e,kind:a.PrefetchKind.AUTO,data:[t,void 0,!1,y],tree:R.tree,prefetchCache:R.prefetchCache,nextUrl:R.nextUrl})}return R}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},78505:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createRouterCacheKey",{enumerable:!0,get:function(){return o}});let r=n(84541);function o(e,t){return(void 0===t&&(t=!1),Array.isArray(e))?e[0]+"|"+e[1]+"|"+e[2]:t&&e.startsWith(r.PAGE_SEGMENT_KEY)?r.PAGE_SEGMENT_KEY:e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},44848:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fetchServerResponse",{enumerable:!0,get:function(){return s}});let r=n(6866),o=n(12846),u=n(83079),l=n(24673),a=n(37207),{createFromFetch:i}=n(6671);function c(e){return[(0,o.urlToUrlWithoutFlightMarker)(e).toString(),void 0,!1,!1]}async function s(e,t,n,s,f){let d={[r.RSC_HEADER]:"1",[r.NEXT_ROUTER_STATE_TREE]:encodeURIComponent(JSON.stringify(t))};f===l.PrefetchKind.AUTO&&(d[r.NEXT_ROUTER_PREFETCH_HEADER]="1"),n&&(d[r.NEXT_URL]=n);let p=(0,a.hexHash)([d[r.NEXT_ROUTER_PREFETCH_HEADER]||"0",d[r.NEXT_ROUTER_STATE_TREE],d[r.NEXT_URL]].join(","));try{var h;let t=new URL(e);t.pathname.endsWith("/")?t.pathname+="index.txt":t.pathname+=".txt",t.searchParams.set(r.NEXT_RSC_UNION_QUERY,p);let n=await fetch(t,{credentials:"same-origin",headers:d}),l=(0,o.urlToUrlWithoutFlightMarker)(n.url),a=n.redirected?l:void 0,f=n.headers.get("content-type")||"",y=!!n.headers.get(r.NEXT_DID_POSTPONE_HEADER),_=!!(null==(h=n.headers.get("vary"))?void 0:h.includes(r.NEXT_URL)),v=f===r.RSC_CONTENT_TYPE_HEADER;if(v||(v=f.startsWith("text/plain")),!v||!n.ok)return e.hash&&(l.hash=e.hash),c(l.toString());let[b,g]=await i(Promise.resolve(n),{callServer:u.callServer});if(s!==b)return c(n.url);return[g,a,y,_]}catch(t){return console.error("Failed to fetch RSC payload for "+e+". Falling back to browser navigation.",t),[e.toString(),void 0,!1,!1]}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},92576:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fillCacheWithNewSubTreeData",{enumerable:!0,get:function(){return function e(t,n,l,a){let i=l.length<=5,[c,s]=l,f=(0,u.createRouterCacheKey)(s),d=n.parallelRoutes.get(c);if(!d)return;let p=t.parallelRoutes.get(c);p&&p!==d||(p=new Map(d),t.parallelRoutes.set(c,p));let h=d.get(f),y=p.get(f);if(i){if(!y||!y.lazyData||y===h){let e=l[3];y={lazyData:null,rsc:e[2],prefetchRsc:null,head:null,prefetchHead:null,loading:e[3],parallelRoutes:h?new Map(h.parallelRoutes):new Map,lazyDataResolved:!1},h&&(0,r.invalidateCacheByRouterState)(y,h,l[2]),(0,o.fillLazyItemsTillLeafWithHead)(y,h,l[2],e,l[4],a),p.set(f,y)}return}y&&h&&(y===h&&(y={lazyData:y.lazyData,rsc:y.rsc,prefetchRsc:y.prefetchRsc,head:y.head,prefetchHead:y.prefetchHead,parallelRoutes:new Map(y.parallelRoutes),lazyDataResolved:!1,loading:y.loading},p.set(f,y)),e(y,h,l.slice(2),a))}}});let r=n(94377),o=n(27420),u=n(78505);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},27420:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"fillLazyItemsTillLeafWithHead",{enumerable:!0,get:function(){return function e(t,n,u,l,a,i){if(0===Object.keys(u[1]).length){t.head=a;return}for(let c in u[1]){let s;let f=u[1][c],d=f[0],p=(0,r.createRouterCacheKey)(d),h=null!==l&&void 0!==l[1][c]?l[1][c]:null;if(n){let r=n.parallelRoutes.get(c);if(r){let n;let u=(null==i?void 0:i.kind)==="auto"&&i.status===o.PrefetchCacheEntryStatus.reusable,l=new Map(r),s=l.get(p);n=null!==h?{lazyData:null,rsc:h[2],prefetchRsc:null,head:null,prefetchHead:null,loading:h[3],parallelRoutes:new Map(null==s?void 0:s.parallelRoutes),lazyDataResolved:!1}:u&&s?{lazyData:s.lazyData,rsc:s.rsc,prefetchRsc:s.prefetchRsc,head:s.head,prefetchHead:s.prefetchHead,parallelRoutes:new Map(s.parallelRoutes),lazyDataResolved:s.lazyDataResolved,loading:s.loading}:{lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map(null==s?void 0:s.parallelRoutes),lazyDataResolved:!1,loading:null},l.set(p,n),e(n,s,f,h||null,a,i),t.parallelRoutes.set(c,l);continue}}if(null!==h){let e=h[2],t=h[3];s={lazyData:null,rsc:e,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:t}}else s={lazyData:null,rsc:null,prefetchRsc:null,head:null,prefetchHead:null,parallelRoutes:new Map,lazyDataResolved:!1,loading:null};let y=t.parallelRoutes.get(c);y?y.set(p,s):t.parallelRoutes.set(c,new Map([[p,s]])),e(s,void 0,f,h,a,i)}}}});let r=n(78505),o=n(24673);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},44510:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleMutable",{enumerable:!0,get:function(){return u}});let r=n(5410);function o(e){return void 0!==e}function u(e,t){var n,u,l;let a=null==(u=t.shouldScroll)||u,i=e.nextUrl;if(o(t.patchedTree)){let n=(0,r.computeChangedPath)(e.tree,t.patchedTree);n?i=n:i||(i=e.canonicalUrl)}return{buildId:e.buildId,canonicalUrl:o(t.canonicalUrl)?t.canonicalUrl===e.canonicalUrl?e.canonicalUrl:t.canonicalUrl:e.canonicalUrl,pushRef:{pendingPush:o(t.pendingPush)?t.pendingPush:e.pushRef.pendingPush,mpaNavigation:o(t.mpaNavigation)?t.mpaNavigation:e.pushRef.mpaNavigation,preserveCustomHistoryState:o(t.preserveCustomHistoryState)?t.preserveCustomHistoryState:e.pushRef.preserveCustomHistoryState},focusAndScrollRef:{apply:!!a&&(!!o(null==t?void 0:t.scrollableSegments)||e.focusAndScrollRef.apply),onlyHashChange:!!t.hashFragment&&e.canonicalUrl.split("#",1)[0]===(null==(n=t.canonicalUrl)?void 0:n.split("#",1)[0]),hashFragment:a?t.hashFragment&&""!==t.hashFragment?decodeURIComponent(t.hashFragment.slice(1)):e.focusAndScrollRef.hashFragment:null,segmentPaths:a?null!=(l=null==t?void 0:t.scrollableSegments)?l:e.focusAndScrollRef.segmentPaths:[]},cache:t.cache?t.cache:e.cache,prefetchCache:t.prefetchCache?t.prefetchCache:e.prefetchCache,tree:o(t.patchedTree)?t.patchedTree:e.tree,nextUrl:i}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77831:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleSegmentMismatch",{enumerable:!0,get:function(){return o}});let r=n(95967);function o(e,t,n){return(0,r.handleExternalUrl)(e,{},e.canonicalUrl,!0)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77058:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"invalidateCacheBelowFlightSegmentPath",{enumerable:!0,get:function(){return function e(t,n,o){let u=o.length<=2,[l,a]=o,i=(0,r.createRouterCacheKey)(a),c=n.parallelRoutes.get(l);if(!c)return;let s=t.parallelRoutes.get(l);if(s&&s!==c||(s=new Map(c),t.parallelRoutes.set(l,s)),u){s.delete(i);return}let f=c.get(i),d=s.get(i);d&&f&&(d===f&&(d={lazyData:d.lazyData,rsc:d.rsc,prefetchRsc:d.prefetchRsc,head:d.head,prefetchHead:d.prefetchHead,parallelRoutes:new Map(d.parallelRoutes),lazyDataResolved:d.lazyDataResolved},s.set(i,d)),e(d,f,o.slice(2)))}}});let r=n(78505);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},94377:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"invalidateCacheByRouterState",{enumerable:!0,get:function(){return o}});let r=n(78505);function o(e,t,n){for(let o in n[1]){let u=n[1][o][0],l=(0,r.createRouterCacheKey)(u),a=t.parallelRoutes.get(o);if(a){let t=new Map(a);t.delete(l),e.parallelRoutes.set(o,t)}}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},63237:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isNavigatingToNewRootLayout",{enumerable:!0,get:function(){return function e(t,n){let r=t[0],o=n[0];if(Array.isArray(r)&&Array.isArray(o)){if(r[0]!==o[0]||r[2]!==o[2])return!0}else if(r!==o)return!0;if(t[4])return!n[4];if(n[4])return!0;let u=Object.values(t[1])[0],l=Object.values(n[1])[0];return!u||!l||e(u,l)}}}),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},56118:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{abortTask:function(){return c},listenForDynamicRequest:function(){return a},updateCacheNodeOnNavigation:function(){return function e(t,n,a,c,s){let f=n[1],d=a[1],p=c[1],h=t.parallelRoutes,y=new Map(h),_={},v=null;for(let t in d){let n;let a=d[t],c=f[t],b=h.get(t),g=p[t],m=a[0],R=(0,u.createRouterCacheKey)(m),P=void 0!==c?c[0]:void 0,j=void 0!==b?b.get(R):void 0;if(null!==(n=m===r.PAGE_SEGMENT_KEY?l(a,void 0!==g?g:null,s):m===r.DEFAULT_SEGMENT_KEY?void 0!==c?{route:c,node:null,children:null}:l(a,void 0!==g?g:null,s):void 0!==P&&(0,o.matchSegment)(m,P)&&void 0!==j&&void 0!==c?null!=g?e(j,c,a,g,s):function(e){let t=i(e,null,null);return{route:e,node:t,children:null}}(a):l(a,void 0!==g?g:null,s))){null===v&&(v=new Map),v.set(t,n);let e=n.node;if(null!==e){let n=new Map(b);n.set(R,e),y.set(t,n)}_[t]=n.route}else _[t]=a}if(null===v)return null;let b={lazyData:null,rsc:t.rsc,prefetchRsc:t.prefetchRsc,head:t.head,prefetchHead:t.prefetchHead,loading:t.loading,parallelRoutes:y,lazyDataResolved:!1};return{route:function(e,t){let n=[e[0],t];return 2 in e&&(n[2]=e[2]),3 in e&&(n[3]=e[3]),4 in e&&(n[4]=e[4]),n}(a,_),node:b,children:v}}},updateCacheNodeOnPopstateRestoration:function(){return function e(t,n){let r=n[1],o=t.parallelRoutes,l=new Map(o);for(let t in r){let n=r[t],a=n[0],i=(0,u.createRouterCacheKey)(a),c=o.get(t);if(void 0!==c){let r=c.get(i);if(void 0!==r){let o=e(r,n),u=new Map(c);u.set(i,o),l.set(t,u)}}}let a=t.rsc,i=d(a)&&"pending"===a.status;return{lazyData:null,rsc:a,head:t.head,prefetchHead:i?t.prefetchHead:null,prefetchRsc:i?t.prefetchRsc:null,loading:i?t.loading:null,parallelRoutes:l,lazyDataResolved:!1}}}});let r=n(84541),o=n(76015),u=n(78505);function l(e,t,n){let r=i(e,t,n);return{route:e,node:r,children:null}}function a(e,t){t.then(t=>{for(let n of t[0]){let t=n.slice(0,-3),r=n[n.length-3],l=n[n.length-2],a=n[n.length-1];"string"!=typeof t&&function(e,t,n,r,l){let a=e;for(let e=0;e{c(e,t)})}function i(e,t,n){let r=e[1],o=null!==t?t[1]:null,l=new Map;for(let e in r){let t=r[e],a=null!==o?o[e]:null,c=t[0],s=(0,u.createRouterCacheKey)(c),f=i(t,void 0===a?null:a,n),d=new Map;d.set(s,f),l.set(e,d)}let a=0===l.size,c=null!==t?t[2]:null,s=null!==t?t[3]:null;return{lazyData:null,parallelRoutes:l,prefetchRsc:void 0!==c?c:null,prefetchHead:a?n:null,loading:void 0!==s?s:null,rsc:p(),head:a?p():null,lazyDataResolved:!1}}function c(e,t){let n=e.node;if(null===n)return;let r=e.children;if(null===r)s(e.route,n,t);else for(let e of r.values())c(e,t);e.node=null}function s(e,t,n){let r=e[1],o=t.parallelRoutes;for(let e in r){let t=r[e],l=o.get(e);if(void 0===l)continue;let a=t[0],i=(0,u.createRouterCacheKey)(a),c=l.get(i);void 0!==c&&s(t,c,n)}let l=t.rsc;d(l)&&(null===n?l.resolve(null):l.reject(n));let a=t.head;d(a)&&a.resolve(null)}let f=Symbol();function d(e){return e&&e.tag===f}function p(){let e,t;let n=new Promise((n,r)=>{e=n,t=r});return n.status="pending",n.resolve=t=>{"pending"===n.status&&(n.status="fulfilled",n.value=t,e(t))},n.reject=e=>{"pending"===n.status&&(n.status="rejected",n.reason=e,t(e))},n.tag=f,n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},60305:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{createPrefetchCacheEntryForInitialLoad:function(){return c},getOrCreatePrefetchCacheEntry:function(){return i},prunePrefetchCache:function(){return f}});let r=n(33456),o=n(44848),u=n(24673),l=n(24819);function a(e,t){let n=(0,r.createHrefFromUrl)(e,!1);return t?t+"%"+n:n}function i(e){let t,{url:n,nextUrl:r,tree:o,buildId:l,prefetchCache:i,kind:c}=e,f=a(n,r),d=i.get(f);if(d)t=d;else{let e=a(n),r=i.get(e);r&&(t=r)}return t?(t.status=h(t),t.kind!==u.PrefetchKind.FULL&&c===u.PrefetchKind.FULL)?s({tree:o,url:n,buildId:l,nextUrl:r,prefetchCache:i,kind:null!=c?c:u.PrefetchKind.TEMPORARY}):(c&&t.kind===u.PrefetchKind.TEMPORARY&&(t.kind=c),t):s({tree:o,url:n,buildId:l,nextUrl:r,prefetchCache:i,kind:c||u.PrefetchKind.TEMPORARY})}function c(e){let{nextUrl:t,tree:n,prefetchCache:r,url:o,kind:l,data:i}=e,[,,,c]=i,s=c?a(o,t):a(o),f={treeAtTimeOfPrefetch:n,data:Promise.resolve(i),kind:l,prefetchTime:Date.now(),lastUsedTime:Date.now(),key:s,status:u.PrefetchCacheEntryStatus.fresh};return r.set(s,f),f}function s(e){let{url:t,kind:n,tree:r,nextUrl:i,buildId:c,prefetchCache:s}=e,f=a(t),d=l.prefetchQueue.enqueue(()=>(0,o.fetchServerResponse)(t,r,i,c,n).then(e=>{let[,,,n]=e;return n&&function(e){let{url:t,nextUrl:n,prefetchCache:r}=e,o=a(t),u=r.get(o);if(!u)return;let l=a(t,n);r.set(l,u),r.delete(o)}({url:t,nextUrl:i,prefetchCache:s}),e})),p={treeAtTimeOfPrefetch:r,data:d,kind:n,prefetchTime:Date.now(),lastUsedTime:null,key:f,status:u.PrefetchCacheEntryStatus.fresh};return s.set(f,p),p}function f(e){for(let[t,n]of e)h(n)===u.PrefetchCacheEntryStatus.expired&&e.delete(t)}let d=1e3*Number("30"),p=1e3*Number("300");function h(e){let{kind:t,prefetchTime:n,lastUsedTime:r}=e;return Date.now()<(null!=r?r:n)+d?r?u.PrefetchCacheEntryStatus.reusable:u.PrefetchCacheEntryStatus.fresh:"auto"===t&&Date.now(){let[n,f]=t,h=!1;if(S.lastUsedTime||(S.lastUsedTime=Date.now(),h=!0),"string"==typeof n)return _(e,R,n,O);if(document.getElementById("__next-page-redirect"))return _(e,R,j,O);let b=e.tree,g=e.cache,w=[];for(let t of n){let n=t.slice(0,-4),r=t.slice(-3)[0],c=["",...n],f=(0,u.applyRouterStatePatchToTree)(c,b,r,j);if(null===f&&(f=(0,u.applyRouterStatePatchToTree)(c,E,r,j)),null!==f){if((0,a.isNavigatingToNewRootLayout)(b,f))return _(e,R,j,O);let u=(0,d.createEmptyCacheNode)(),m=!1;for(let e of(S.status!==i.PrefetchCacheEntryStatus.stale||h?m=(0,s.applyFlightData)(g,u,t,S):(m=function(e,t,n,r){let o=!1;for(let u of(e.rsc=t.rsc,e.prefetchRsc=t.prefetchRsc,e.loading=t.loading,e.parallelRoutes=new Map(t.parallelRoutes),v(r).map(e=>[...n,...e])))(0,y.clearCacheNodeDataForSegmentPath)(e,t,u),o=!0;return o}(u,g,n,r),S.lastUsedTime=Date.now()),(0,l.shouldHardNavigate)(c,b)?(u.rsc=g.rsc,u.prefetchRsc=g.prefetchRsc,(0,o.invalidateCacheBelowFlightSegmentPath)(u,g,n),R.cache=u):m&&(R.cache=u,g=u),b=f,v(r))){let t=[...n,...e];t[t.length-1]!==p.DEFAULT_SEGMENT_KEY&&w.push(t)}}}return R.patchedTree=b,R.canonicalUrl=f?(0,r.createHrefFromUrl)(f):j,R.pendingPush=O,R.scrollableSegments=w,R.hashFragment=P,R.shouldScroll=m,(0,c.handleMutable)(e,R)},()=>e)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},24819:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{prefetchQueue:function(){return l},prefetchReducer:function(){return a}});let r=n(6866),o=n(29744),u=n(60305),l=new o.PromiseQueue(5);function a(e,t){(0,u.prunePrefetchCache)(e.prefetchCache);let{url:n}=t;return n.searchParams.delete(r.NEXT_RSC_UNION_QUERY),(0,u.getOrCreatePrefetchCacheEntry)({url:n,nextUrl:e.nextUrl,prefetchCache:e.prefetchCache,kind:t.kind,tree:e.tree,buildId:e.buildId}),e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},99601:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"refreshReducer",{enumerable:!0,get:function(){return h}});let r=n(44848),o=n(33456),u=n(81935),l=n(63237),a=n(95967),i=n(44510),c=n(27420),s=n(12846),f=n(77831),d=n(28077),p=n(50232);function h(e,t){let{origin:n}=t,h={},y=e.canonicalUrl,_=e.tree;h.preserveCustomHistoryState=!1;let v=(0,s.createEmptyCacheNode)(),b=(0,d.hasInterceptionRouteInCurrentTree)(e.tree);return v.lazyData=(0,r.fetchServerResponse)(new URL(y,n),[_[0],_[1],_[2],"refetch"],b?e.nextUrl:null,e.buildId),v.lazyData.then(async n=>{let[r,s]=n;if("string"==typeof r)return(0,a.handleExternalUrl)(e,h,r,e.pushRef.pendingPush);for(let n of(v.lazyData=null,r)){if(3!==n.length)return console.log("REFRESH FAILED"),e;let[r]=n,i=(0,u.applyRouterStatePatchToTree)([""],_,r,e.canonicalUrl);if(null===i)return(0,f.handleSegmentMismatch)(e,t,r);if((0,l.isNavigatingToNewRootLayout)(_,i))return(0,a.handleExternalUrl)(e,h,y,e.pushRef.pendingPush);let d=s?(0,o.createHrefFromUrl)(s):void 0;s&&(h.canonicalUrl=d);let[g,m]=n.slice(-2);if(null!==g){let e=g[2];v.rsc=e,v.prefetchRsc=null,(0,c.fillLazyItemsTillLeafWithHead)(v,void 0,r,g,m),h.prefetchCache=new Map}await (0,p.refreshInactiveParallelSegments)({state:e,updatedTree:i,updatedCache:v,includeNextUrl:b,canonicalUrl:h.canonicalUrl||e.canonicalUrl}),h.cache=v,h.patchedTree=i,h.canonicalUrl=y,_=i}return(0,i.handleMutable)(e,h)},()=>e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},77784:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"restoreReducer",{enumerable:!0,get:function(){return u}});let r=n(33456),o=n(5410);function u(e,t){var n;let{url:u,tree:l}=t,a=(0,r.createHrefFromUrl)(u),i=l||e.tree,c=e.cache;return{buildId:e.buildId,canonicalUrl:a,pushRef:{pendingPush:!1,mpaNavigation:!1,preserveCustomHistoryState:!0},focusAndScrollRef:e.focusAndScrollRef,cache:c,prefetchCache:e.prefetchCache,tree:i,nextUrl:null!=(n=(0,o.extractPathFromFlightRouterState)(i))?n:u.pathname}}n(56118),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},13722:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"serverActionReducer",{enumerable:!0,get:function(){return g}});let r=n(83079),o=n(6866),u=n(1634),l=n(33456),a=n(95967),i=n(81935),c=n(63237),s=n(44510),f=n(27420),d=n(12846),p=n(28077),h=n(77831),y=n(50232),{createFromFetch:_,encodeReply:v}=n(6671);async function b(e,t,n){let l,{actionId:a,actionArgs:i}=n,c=await v(i),s=await fetch("",{method:"POST",headers:{Accept:o.RSC_CONTENT_TYPE_HEADER,[o.ACTION]:a,[o.NEXT_ROUTER_STATE_TREE]:encodeURIComponent(JSON.stringify(e.tree)),...t?{[o.NEXT_URL]:t}:{}},body:c}),f=s.headers.get("x-action-redirect");try{let e=JSON.parse(s.headers.get("x-action-revalidated")||"[[],0,0]");l={paths:e[0]||[],tag:!!e[1],cookie:e[2]}}catch(e){l={paths:[],tag:!1,cookie:!1}}let d=f?new URL((0,u.addBasePath)(f),new URL(e.canonicalUrl,window.location.href)):void 0;if(s.headers.get("content-type")===o.RSC_CONTENT_TYPE_HEADER){let e=await _(Promise.resolve(s),{callServer:r.callServer});if(f){let[,t]=null!=e?e:[];return{actionFlightData:t,redirectLocation:d,revalidatedParts:l}}let[t,[,n]]=null!=e?e:[];return{actionResult:t,actionFlightData:n,redirectLocation:d,revalidatedParts:l}}return{redirectLocation:d,revalidatedParts:l}}function g(e,t){let{resolve:n,reject:r}=t,o={},u=e.canonicalUrl,_=e.tree;o.preserveCustomHistoryState=!1;let v=e.nextUrl&&(0,p.hasInterceptionRouteInCurrentTree)(e.tree)?e.nextUrl:null;return o.inFlightServerAction=b(e,v,t),o.inFlightServerAction.then(async r=>{let{actionResult:p,actionFlightData:b,redirectLocation:g}=r;if(g&&(e.pushRef.pendingPush=!0,o.pendingPush=!0),!b)return(n(p),g)?(0,a.handleExternalUrl)(e,o,g.href,e.pushRef.pendingPush):e;if("string"==typeof b)return(0,a.handleExternalUrl)(e,o,b,e.pushRef.pendingPush);if(o.inFlightServerAction=null,g){let e=(0,l.createHrefFromUrl)(g,!1);o.canonicalUrl=e}for(let n of b){if(3!==n.length)return console.log("SERVER ACTION APPLY FAILED"),e;let[r]=n,s=(0,i.applyRouterStatePatchToTree)([""],_,r,g?(0,l.createHrefFromUrl)(g):e.canonicalUrl);if(null===s)return(0,h.handleSegmentMismatch)(e,t,r);if((0,c.isNavigatingToNewRootLayout)(_,s))return(0,a.handleExternalUrl)(e,o,u,e.pushRef.pendingPush);let[p,b]=n.slice(-2),m=null!==p?p[2]:null;if(null!==m){let t=(0,d.createEmptyCacheNode)();t.rsc=m,t.prefetchRsc=null,(0,f.fillLazyItemsTillLeafWithHead)(t,void 0,r,p,b),await (0,y.refreshInactiveParallelSegments)({state:e,updatedTree:s,updatedCache:t,includeNextUrl:!!v,canonicalUrl:o.canonicalUrl||e.canonicalUrl}),o.cache=t,o.prefetchCache=new Map}o.patchedTree=s,_=s}return n(p),(0,s.handleMutable)(e,o)},t=>(r(t),e))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},68448:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"serverPatchReducer",{enumerable:!0,get:function(){return f}});let r=n(33456),o=n(81935),u=n(63237),l=n(95967),a=n(22356),i=n(44510),c=n(12846),s=n(77831);function f(e,t){let{serverResponse:n}=t,[f,d]=n,p={};if(p.preserveCustomHistoryState=!1,"string"==typeof f)return(0,l.handleExternalUrl)(e,p,f,e.pushRef.pendingPush);let h=e.tree,y=e.cache;for(let n of f){let i=n.slice(0,-4),[f]=n.slice(-3,-2),_=(0,o.applyRouterStatePatchToTree)(["",...i],h,f,e.canonicalUrl);if(null===_)return(0,s.handleSegmentMismatch)(e,t,f);if((0,u.isNavigatingToNewRootLayout)(h,_))return(0,l.handleExternalUrl)(e,p,e.canonicalUrl,e.pushRef.pendingPush);let v=d?(0,r.createHrefFromUrl)(d):void 0;v&&(p.canonicalUrl=v);let b=(0,c.createEmptyCacheNode)();(0,a.applyFlightData)(y,b,n),p.patchedTree=_,p.cache=b,y=b,h=_}return(0,i.handleMutable)(e,p)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},50232:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{addRefreshMarkerToActiveParallelSegments:function(){return function e(t,n){let[r,o,,l]=t;for(let a in r.includes(u.PAGE_SEGMENT_KEY)&&"refresh"!==l&&(t[2]=n,t[3]="refresh"),o)e(o[a],n)}},refreshInactiveParallelSegments:function(){return l}});let r=n(22356),o=n(44848),u=n(84541);async function l(e){let t=new Set;await a({...e,rootTree:e.updatedTree,fetchedSegments:t})}async function a(e){let{state:t,updatedTree:n,updatedCache:u,includeNextUrl:l,fetchedSegments:i,rootTree:c=n,canonicalUrl:s}=e,[,f,d,p]=n,h=[];if(d&&d!==s&&"refresh"===p&&!i.has(d)){i.add(d);let e=(0,o.fetchServerResponse)(new URL(d,location.origin),[c[0],c[1],c[2],"refetch"],l?t.nextUrl:null,t.buildId).then(e=>{let t=e[0];if("string"!=typeof t)for(let e of t)(0,r.applyFlightData)(u,u,e)});h.push(e)}for(let e in f){let n=a({state:t,updatedTree:f[e],updatedCache:u,includeNextUrl:l,fetchedSegments:i,rootTree:c,canonicalUrl:s});h.push(n)}await Promise.all(h)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},24673:function(e,t){"use strict";var n,r,o,u;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ACTION_FAST_REFRESH:function(){return f},ACTION_NAVIGATE:function(){return a},ACTION_PREFETCH:function(){return s},ACTION_REFRESH:function(){return l},ACTION_RESTORE:function(){return i},ACTION_SERVER_ACTION:function(){return d},ACTION_SERVER_PATCH:function(){return c},PrefetchCacheEntryStatus:function(){return r},PrefetchKind:function(){return n},isThenable:function(){return p}});let l="refresh",a="navigate",i="restore",c="server-patch",s="prefetch",f="fast-refresh",d="server-action";function p(e){return e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}(o=n||(n={})).AUTO="auto",o.FULL="full",o.TEMPORARY="temporary",(u=r||(r={})).fresh="fresh",u.reusable="reusable",u.expired="expired",u.stale="stale",("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},91450:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"reducer",{enumerable:!0,get:function(){return f}});let r=n(24673),o=n(95967),u=n(68448),l=n(77784),a=n(99601),i=n(24819),c=n(44529),s=n(13722),f="undefined"==typeof window?function(e,t){return e}:function(e,t){switch(t.type){case r.ACTION_NAVIGATE:return(0,o.navigateReducer)(e,t);case r.ACTION_SERVER_PATCH:return(0,u.serverPatchReducer)(e,t);case r.ACTION_RESTORE:return(0,l.restoreReducer)(e,t);case r.ACTION_REFRESH:return(0,a.refreshReducer)(e,t);case r.ACTION_FAST_REFRESH:return(0,c.fastRefreshReducer)(e,t);case r.ACTION_PREFETCH:return(0,i.prefetchReducer)(e,t);case r.ACTION_SERVER_ACTION:return(0,s.serverActionReducer)(e,t);default:throw Error("Unknown action")}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},53728:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"shouldHardNavigate",{enumerable:!0,get:function(){return function e(t,n){let[o,u]=n,[l,a]=t;return(0,r.matchSegment)(l,o)?!(t.length<=2)&&e(t.slice(2),u[a]):!!Array.isArray(l)}}});let r=n(76015);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54535:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{createDynamicallyTrackedSearchParams:function(){return a},createUntrackedSearchParams:function(){return l}});let r=n(51845),o=n(86999),u=n(30650);function l(e){let t=r.staticGenerationAsyncStorage.getStore();return t&&t.forceStatic?{}:e}function a(e){let t=r.staticGenerationAsyncStorage.getStore();return t?t.forceStatic?{}:t.isStaticGeneration||t.dynamicShouldError?new Proxy({},{get:(e,n,r)=>("string"==typeof n&&(0,o.trackDynamicDataAccessed)(t,"searchParams."+n),u.ReflectAdapter.get(e,n,r)),has:(e,n)=>("string"==typeof n&&(0,o.trackDynamicDataAccessed)(t,"searchParams."+n),Reflect.has(e,n)),ownKeys:e=>((0,o.trackDynamicDataAccessed)(t,"searchParams"),Reflect.ownKeys(e))}):e:e}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},51845:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"staticGenerationAsyncStorage",{enumerable:!0,get:function(){return r.staticGenerationAsyncStorage}});let r=n(20030);("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},36864:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{StaticGenBailoutError:function(){return r},isStaticGenBailoutError:function(){return o}});let n="NEXT_STATIC_GEN_BAILOUT";class r extends Error{constructor(...e){super(...e),this.code=n}}function o(e){return"object"==typeof e&&null!==e&&"code"in e&&e.code===n}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},38137:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"unresolvedThenable",{enumerable:!0,get:function(){return n}});let n={then:()=>{}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},47744:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{useReducerWithReduxDevtools:function(){return i},useUnwrapState:function(){return a}});let r=n(53099)._(n(2265)),o=n(24673),u=n(2103);function l(e){if(e instanceof Map){let t={};for(let[n,r]of e.entries()){if("function"==typeof r){t[n]="fn()";continue}if("object"==typeof r&&null!==r){if(r.$$typeof){t[n]=r.$$typeof.toString();continue}if(r._bundlerConfig){t[n]="FlightData";continue}}t[n]=l(r)}return t}if("object"==typeof e&&null!==e){let t={};for(let n in e){let r=e[n];if("function"==typeof r){t[n]="fn()";continue}if("object"==typeof r&&null!==r){if(r.$$typeof){t[n]=r.$$typeof.toString();continue}if(r.hasOwnProperty("_bundlerConfig")){t[n]="FlightData";continue}}t[n]=l(r)}return t}return Array.isArray(e)?e.map(l):e}function a(e){return(0,o.isThenable)(e)?(0,r.use)(e):e}let i="undefined"!=typeof window?function(e){let[t,n]=r.default.useState(e),o=(0,r.useContext)(u.ActionQueueContext);if(!o)throw Error("Invariant: Missing ActionQueueContext");let a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)(()=>{if(!a.current&&!1!==i.current){if(void 0===i.current&&void 0===window.__REDUX_DEVTOOLS_EXTENSION__){i.current=!1;return}return a.current=window.__REDUX_DEVTOOLS_EXTENSION__.connect({instanceId:8e3,name:"next-router"}),a.current&&(a.current.init(l(e)),o&&(o.devToolsInstance=a.current)),()=>{a.current=void 0}}},[e,o]),[t,(0,r.useCallback)(t=>{o.state||(o.state=e),o.dispatch(t,n)},[o,e]),(0,r.useCallback)(e=>{a.current&&a.current.send({type:"RENDER_SYNC"},l(e))},[])]}:function(e){return[e,()=>{},()=>{}]};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},11283:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"hasBasePath",{enumerable:!0,get:function(){return o}});let r=n(10580);function o(e){return(0,r.pathHasPrefix)(e,"")}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33068:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"normalizePathTrailingSlash",{enumerable:!0,get:function(){return u}});let r=n(26674),o=n(63381),u=e=>{if(!e.startsWith("/"))return e;let{pathname:t,query:n,hash:u}=(0,o.parsePath)(e);return""+(0,r.removeTrailingSlash)(t)+n+u};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},61404:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=n(18993);function o(e){let t="function"==typeof reportError?reportError:e=>{window.console.error(e)};(0,r.isBailoutToCSRError)(e)||t(e)}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},35076:function(e,t,n){"use strict";function r(e){return e}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"removeBasePath",{enumerable:!0,get:function(){return r}}),n(11283),("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},12010:function(e,t){"use strict";function n(e,t){var n=e.length;for(e.push(t);0>>1,o=e[r];if(0>>1;ru(i,n))cu(s,i)?(e[r]=s,e[c]=n,r=c):(e[r]=i,e[a]=n,r=a);else if(cu(s,n))e[r]=s,e[c]=n,r=c;else break}}return t}function u(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"==typeof performance&&"function"==typeof performance.now){var l,a=performance;t.unstable_now=function(){return a.now()}}else{var i=Date,c=i.now();t.unstable_now=function(){return i.now()-c}}var s=[],f=[],d=1,p=null,h=3,y=!1,_=!1,v=!1,b="function"==typeof setTimeout?setTimeout:null,g="function"==typeof clearTimeout?clearTimeout:null,m="undefined"!=typeof setImmediate?setImmediate:null;function R(e){for(var t=r(f);null!==t;){if(null===t.callback)o(f);else if(t.startTime<=e)o(f),t.sortIndex=t.expirationTime,n(s,t);else break;t=r(f)}}function P(e){if(v=!1,R(e),!_){if(null!==r(s))_=!0,C();else{var t=r(f);null!==t&&A(P,t.startTime-e)}}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var j=!1,O=-1,S=5,E=-1;function w(){return!(t.unstable_now()-Ee&&w());){var a=p.callback;if("function"==typeof a){p.callback=null,h=p.priorityLevel;var i=a(p.expirationTime<=e);if(e=t.unstable_now(),"function"==typeof i){p.callback=i,R(e),n=!0;break t}p===r(s)&&o(s),R(e)}else o(s);p=r(s)}if(null!==p)n=!0;else{var c=r(f);null!==c&&A(P,c.startTime-e),n=!1}}break e}finally{p=null,h=u,y=!1}n=void 0}}finally{n?l():j=!1}}}if("function"==typeof m)l=function(){m(T)};else if("undefined"!=typeof MessageChannel){var M=new MessageChannel,x=M.port2;M.port1.onmessage=T,l=function(){x.postMessage(null)}}else l=function(){b(T,0)};function C(){j||(j=!0,l())}function A(e,n){O=b(function(){e(t.unstable_now())},n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){_||y||(_=!0,C())},t.unstable_forceFrameRate=function(e){0>e||125l?(e.sortIndex=u,n(f,e),null===r(s)&&e===r(f)&&(v?(g(O),O=-1):v=!0,A(P,u-l))):(e.sortIndex=a,n(s,e),_||y||(_=!0,C())),e},t.unstable_shouldYield=w,t.unstable_wrapCallback=function(e){var t=h;return function(){var n=h;h=t;try{return e.apply(this,arguments)}finally{h=n}}}},71767:function(e,t,n){"use strict";e.exports=n(12010)},60934:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{getPathname:function(){return r},isFullStringUrl:function(){return o},parseUrl:function(){return u}});let n="http://n";function r(e){return new URL(e,n).pathname}function o(e){return/https?:\/\//.test(e)}function u(e){let t;try{t=new URL(e,n)}catch{}return t}},86999:function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{Postpone:function(){return d},createPostponedAbortSignal:function(){return b},createPrerenderState:function(){return c},formatDynamicAPIAccesses:function(){return _},markCurrentScopeAsDynamic:function(){return s},trackDynamicDataAccessed:function(){return f},trackDynamicFetch:function(){return p},usedDynamicAPIs:function(){return y}});let o=(r=n(2265))&&r.__esModule?r:{default:r},u=n(46177),l=n(36864),a=n(60934),i="function"==typeof o.default.unstable_postpone;function c(e){return{isDebugSkeleton:e,dynamicAccesses:[]}}function s(e,t){let n=(0,a.getPathname)(e.urlPathname);if(!e.isUnstableCacheCallback){if(e.dynamicShouldError)throw new l.StaticGenBailoutError(`Route ${n} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`);if(e.prerenderState)h(e.prerenderState,t,n);else if(e.revalidate=0,e.isStaticGeneration){let r=new u.DynamicServerError(`Route ${n} couldn't be rendered statically because it used ${t}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`);throw e.dynamicUsageDescription=t,e.dynamicUsageStack=r.stack,r}}}function f(e,t){let n=(0,a.getPathname)(e.urlPathname);if(e.isUnstableCacheCallback)throw Error(`Route ${n} used "${t}" inside a function cached with "unstable_cache(...)". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use "${t}" outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`);if(e.dynamicShouldError)throw new l.StaticGenBailoutError(`Route ${n} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`);if(e.prerenderState)h(e.prerenderState,t,n);else if(e.revalidate=0,e.isStaticGeneration){let r=new u.DynamicServerError(`Route ${n} couldn't be rendered statically because it used \`${t}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`);throw e.dynamicUsageDescription=t,e.dynamicUsageStack=r.stack,r}}function d({reason:e,prerenderState:t,pathname:n}){h(t,e,n)}function p(e,t){e.prerenderState&&h(e.prerenderState,t,e.urlPathname)}function h(e,t,n){v();let r=`Route ${n} needs to bail out of prerendering at this point because it used ${t}. React throws this special object to indicate where. It should not be caught by your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`;e.dynamicAccesses.push({stack:e.isDebugSkeleton?Error().stack:void 0,expression:t}),o.default.unstable_postpone(r)}function y(e){return e.dynamicAccesses.length>0}function _(e){return e.dynamicAccesses.filter(e=>"string"==typeof e.stack&&e.stack.length>0).map(({expression:e,stack:t})=>(t=t.split("\n").slice(4).filter(e=>!(e.includes("node_modules/next/")||e.includes(" ()")||e.includes(" (node:"))).join("\n"),`Dynamic API Usage Debug - ${e}: ${t}`))}function v(){if(!i)throw Error("Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js")}function b(e){v();let t=new AbortController;try{o.default.unstable_postpone(e)}catch(e){t.abort(e)}return t.signal}},87417:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSegmentParam",{enumerable:!0,get:function(){return o}});let r=n(91182);function o(e){let t=r.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t));return(t&&(e=e.slice(t.length)),e.startsWith("[[...")&&e.endsWith("]]"))?{type:"optional-catchall",param:e.slice(5,-2)}:e.startsWith("[...")&&e.endsWith("]")?{type:t?"catchall-intercepted":"catchall",param:e.slice(4,-1)}:e.startsWith("[")&&e.endsWith("]")?{type:t?"dynamic-intercepted":"dynamic",param:e.slice(1,-1)}:null}},70647:function(e,t){"use strict";var n,r;Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HMR_ACTIONS_SENT_TO_BROWSER",{enumerable:!0,get:function(){return n}}),(r=n||(n={})).ADDED_PAGE="addedPage",r.REMOVED_PAGE="removedPage",r.RELOAD_PAGE="reloadPage",r.SERVER_COMPONENT_CHANGES="serverComponentChanges",r.MIDDLEWARE_CHANGES="middlewareChanges",r.CLIENT_CHANGES="clientChanges",r.SERVER_ONLY_CHANGES="serverOnlyChanges",r.SYNC="sync",r.BUILT="built",r.BUILDING="building",r.DEV_PAGES_MANIFEST_UPDATE="devPagesManifestUpdate",r.TURBOPACK_MESSAGE="turbopack-message",r.SERVER_ERROR="serverError",r.TURBOPACK_CONNECTED="turbopack-connected"},91182:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{INTERCEPTION_ROUTE_MARKERS:function(){return o},extractInterceptionRouteInformation:function(){return l},isInterceptionRouteAppPath:function(){return u}});let r=n(20926),o=["(..)(..)","(.)","(..)","(...)"];function u(e){return void 0!==e.split("/").find(e=>o.find(t=>e.startsWith(t)))}function l(e){let t,n,u;for(let r of e.split("/"))if(n=o.find(e=>r.startsWith(e))){[t,u]=e.split(n,2);break}if(!t||!n||!u)throw Error(`Invalid interception route: ${e}. Must be in the format //(..|...|..)(..)/`);switch(t=(0,r.normalizeAppPath)(t),n){case"(.)":u="/"===t?`/${u}`:t+"/"+u;break;case"(..)":if("/"===t)throw Error(`Invalid interception route: ${e}. Cannot use (..) marker at the root level, use (.) instead.`);u=t.split("/").slice(0,-1).concat(u).join("/");break;case"(...)":u="/"+u;break;case"(..)(..)":let l=t.split("/");if(l.length<=2)throw Error(`Invalid interception route: ${e}. Cannot use (..)(..) marker at the root level or one level up.`);u=l.slice(0,-2).concat(u).join("/");break;default:throw Error("Invariant: unexpected marker")}return{interceptingRoute:t,interceptedRoute:u}}},30650:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ReflectAdapter",{enumerable:!0,get:function(){return n}});class n{static get(e,t,n){let r=Reflect.get(e,t,n);return"function"==typeof r?r.bind(e):r}static set(e,t,n,r){return Reflect.set(e,t,n,r)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}},61956:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{AppRouterContext:function(){return o},GlobalLayoutRouterContext:function(){return l},LayoutRouterContext:function(){return u},MissingSlotContext:function(){return i},TemplateContext:function(){return a}});let r=n(47043)._(n(2265)),o=r.default.createContext(null),u=r.default.createContext(null),l=r.default.createContext(null),a=r.default.createContext(null),i=r.default.createContext(new Set)},37207:function(e,t){"use strict";function n(e){let t=5381;for(let n=0;n>>0}function r(e){return n(e).toString(36).slice(0,5)}Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{djb2Hash:function(){return n},hexHash:function(){return r}})},48701:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HeadManagerContext",{enumerable:!0,get:function(){return r}});let r=n(47043)._(n(2265)).default.createContext({})},79060:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{PathParamsContext:function(){return l},PathnameContext:function(){return u},SearchParamsContext:function(){return o}});let r=n(2265),o=(0,r.createContext)(null),u=(0,r.createContext)(null),l=(0,r.createContext)(null)},18993:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{BailoutToCSRError:function(){return r},isBailoutToCSRError:function(){return o}});let n="BAILOUT_TO_CLIENT_SIDE_RENDERING";class r extends Error{constructor(e){super("Bail out to client-side rendering: "+e),this.reason=e,this.digest=n}}function o(e){return"object"==typeof e&&null!==e&&"digest"in e&&e.digest===n}},78162:function(e,t){"use strict";function n(e){return e.startsWith("/")?e:"/"+e}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ensureLeadingSlash",{enumerable:!0,get:function(){return n}})},2103:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ActionQueueContext:function(){return a},createMutableActionQueue:function(){return s}});let r=n(53099),o=n(24673),u=n(91450),l=r._(n(2265)),a=l.default.createContext(null);function i(e,t){null!==e.pending&&(e.pending=e.pending.next,null!==e.pending?c({actionQueue:e,action:e.pending,setState:t}):e.needsRefresh&&(e.needsRefresh=!1,e.dispatch({type:o.ACTION_REFRESH,origin:window.location.origin},t)))}async function c(e){let{actionQueue:t,action:n,setState:r}=e,u=t.state;if(!u)throw Error("Invariant: Router state not initialized");t.pending=n;let l=n.payload,a=t.action(u,l);function c(e){n.discarded||(t.state=e,t.devToolsInstance&&t.devToolsInstance.send(l,e),i(t,r),n.resolve(e))}(0,o.isThenable)(a)?a.then(c,e=>{i(t,r),n.reject(e)}):c(a)}function s(){let e={state:null,dispatch:(t,n)=>(function(e,t,n){let r={resolve:n,reject:()=>{}};if(t.type!==o.ACTION_RESTORE){let e=new Promise((e,t)=>{r={resolve:e,reject:t}});(0,l.startTransition)(()=>{n(e)})}let u={payload:t,next:null,resolve:r.resolve,reject:r.reject};null===e.pending?(e.last=u,c({actionQueue:e,action:u,setState:n})):t.type===o.ACTION_NAVIGATE||t.type===o.ACTION_RESTORE?(e.pending.discarded=!0,e.last=u,e.pending.payload.type===o.ACTION_SERVER_ACTION&&(e.needsRefresh=!0),c({actionQueue:e,action:u,setState:n})):(null!==e.last&&(e.last.next=u),e.last=u)})(e,t,n),action:async(e,t)=>{if(null===e)throw Error("Invariant: Router state not initialized");return(0,u.reducer)(e,t)},pending:null,last:null};return e}},68498:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addPathPrefix",{enumerable:!0,get:function(){return o}});let r=n(63381);function o(e,t){if(!e.startsWith("/")||!t)return e;let{pathname:n,query:o,hash:u}=(0,r.parsePath)(e);return""+t+n+o+u}},20926:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{normalizeAppPath:function(){return u},normalizeRscURL:function(){return l}});let r=n(78162),o=n(84541);function u(e){return(0,r.ensureLeadingSlash)(e.split("/").reduce((e,t,n,r)=>!t||(0,o.isGroupSegment)(t)||"@"===t[0]||("page"===t||"route"===t)&&n===r.length-1?e:e+"/"+t,""))}function l(e){return e.replace(/\.rsc($|\?)/,"$1")}},7092:function(e,t){"use strict";function n(e,t){if(void 0===t&&(t={}),t.onlyHashChange){e();return}let n=document.documentElement,r=n.style.scrollBehavior;n.style.scrollBehavior="auto",t.dontForceLayout||n.getClientRects(),e(),n.style.scrollBehavior=r}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"handleSmoothScroll",{enumerable:!0,get:function(){return n}})},86146:function(e,t){"use strict";function n(e){return/Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(e)}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isBot",{enumerable:!0,get:function(){return n}})},63381:function(e,t){"use strict";function n(e){let t=e.indexOf("#"),n=e.indexOf("?"),r=n>-1&&(t<0||n-1?{pathname:e.substring(0,r?n:t),query:r?e.substring(n,t>-1?t:void 0):"",hash:t>-1?e.slice(t):""}:{pathname:e,query:"",hash:""}}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"parsePath",{enumerable:!0,get:function(){return n}})},10580:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"pathHasPrefix",{enumerable:!0,get:function(){return o}});let r=n(63381);function o(e,t){if("string"!=typeof e)return!1;let{pathname:n}=(0,r.parsePath)(e);return n===t||n.startsWith(t+"/")}},26674:function(e,t){"use strict";function n(e){return e.replace(/\/$/,"")||"/"}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return n}})},84541:function(e,t){"use strict";function n(e){return"("===e[0]&&e.endsWith(")")}Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{DEFAULT_SEGMENT_KEY:function(){return o},PAGE_SEGMENT_KEY:function(){return r},isGroupSegment:function(){return n}});let r="__PAGE__",o="__DEFAULT__"},55501:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{ServerInsertedHTMLContext:function(){return o},useServerInsertedHTML:function(){return u}});let r=n(53099)._(n(2265)),o=r.default.createContext(null);function u(e){let t=(0,r.useContext)(o);t&&t(e)}},31765:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},47149:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"actionAsyncStorage",{enumerable:!0,get:function(){return r}});let r=(0,n(54832).createAsyncLocalStorage)();("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},54832:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"createAsyncLocalStorage",{enumerable:!0,get:function(){return u}});let n=Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available");class r{disable(){throw n}getStore(){}run(){throw n}exit(){throw n}enterWith(){throw n}}let o=globalThis.AsyncLocalStorage;function u(){return o?new o:new r}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},25575:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"requestAsyncStorage",{enumerable:!0,get:function(){return r}});let r=(0,n(54832).createAsyncLocalStorage)();("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},20030:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"staticGenerationAsyncStorage",{enumerable:!0,get:function(){return r}});let r=(0,n(54832).createAsyncLocalStorage)();("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},34040:function(e,t,n){"use strict";var r=n(54887);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},54887:function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(84417)},97950:function(e,t,n){"use strict";var r=n(54887),o={stream:!0},u=new Map;function l(e){var t=n(e);return"function"!=typeof t.then||"fulfilled"===t.status?null:(t.then(function(e){t.status="fulfilled",t.value=e},function(e){t.status="rejected",t.reason=e}),t)}function a(){}var i=new Map,c=n.u;n.u=function(e){var t=i.get(e);return void 0!==t?t:c(e)};var s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Dispatcher,f=Symbol.for("react.element"),d=Symbol.for("react.lazy"),p=Symbol.iterator,h=Array.isArray,y=Object.getPrototypeOf,_=Object.prototype,v=new WeakMap;function b(e,t,n,r){this.status=e,this.value=t,this.reason=n,this._response=r}function g(e){switch(e.status){case"resolved_model":E(e);break;case"resolved_module":w(e)}switch(e.status){case"fulfilled":return e.value;case"pending":case"blocked":case"cyclic":throw e;default:throw e.reason}}function m(e,t){for(var n=0;nh?(_=h,h=3,p++):(_=0,h=3);continue;case 2:44===(m=d[p++])?h=4:v=v<<4|(96d.length&&(m=-1)}var O=d.byteOffset+p;if(-1h.includes(e)||"json"===t.format,m=e=>{if(!e)return!0;try{return JSON.parse(e),!0}catch(e){return!1}},f=(e,t,o)=>{let a={max_budget:"Enter maximum budget in USD (e.g., 100.50)",budget_duration:"Select a time period for budget reset",tpm_limit:"Enter maximum tokens per minute (whole number)",rpm_limit:"Enter maximum requests per minute (whole number)",duration:"Enter duration (e.g., 30s, 24h, 7d)",metadata:'Enter JSON object with key-value pairs\nExample: {"team": "research", "project": "nlp"}',config:'Enter configuration as JSON object\nExample: {"setting": "value"}',permissions:"Enter comma-separated permission strings",enforced_params:'Enter parameters as JSON object\nExample: {"param": "value"}',blocked:"Enter true/false or specific block conditions",aliases:'Enter aliases as JSON object\nExample: {"alias1": "value1", "alias2": "value2"}',models:"Select one or more model names",key_alias:"Enter a unique identifier for this key",tags:"Enter comma-separated tag strings"}[e]||({string:"Text input",number:"Numeric input",integer:"Whole number input",boolean:"True/False value"})[o]||"Text input";return g(e,t)?"".concat(a,"\nMust be valid JSON format"):t.enum?"Select from available options\nAllowed values: ".concat(t.enum.join(", ")):a};t.Z=e=>{let{schemaComponent:t,excludedFields:o=[],form:h,overrideLabels:w={},overrideTooltips:y={},customValidation:j={},defaultValues:_={}}=e,[C,k]=(0,r.useState)(null),[v,T]=(0,r.useState)(null);(0,r.useEffect)(()=>{(async()=>{try{let e=(await (0,p.getOpenAPISchema)()).components.schemas[t];if(!e)throw Error('Schema component "'.concat(t,'" not found'));k(e);let a={};Object.keys(e.properties).filter(e=>!o.includes(e)&&void 0!==_[e]).forEach(e=>{a[e]=_[e]}),h.setFieldsValue(a)}catch(e){console.error("Schema fetch error:",e),T(e instanceof Error?e.message:"Failed to fetch schema")}})()},[t,h,o]);let E=e=>{if(e.type)return e.type;if(e.anyOf){let t=e.anyOf.map(e=>e.type);if(t.includes("number")||t.includes("integer"))return"number";t.includes("string")}return"string"},S=(e,t)=>{var o;let r;let p=E(t),h=null==C?void 0:null===(o=C.required)||void 0===o?void 0:o.includes(e),k=w[e]||t.title||e,v=y[e]||t.description,T=[];h&&T.push({required:!0,message:"".concat(k," is required")}),j[e]&&T.push({validator:j[e]}),g(e,t)&&T.push({validator:async(e,t)=>{if(t&&!m(t))throw Error("Please enter valid JSON")}});let S=v?(0,a.jsxs)("span",{children:[k," ",(0,a.jsx)(u.Z,{title:v,children:(0,a.jsx)(d.Z,{style:{marginLeft:"4px"}})})]}):k;return r=g(e,t)?(0,a.jsx)(n.default.TextArea,{rows:4,placeholder:"Enter as JSON",className:"font-mono"}):t.enum?(0,a.jsx)(l.default,{children:t.enum.map(e=>(0,a.jsx)(l.default.Option,{value:e,children:e},e))}):"number"===p||"integer"===p?(0,a.jsx)(c.Z,{style:{width:"100%"},precision:"integer"===p?0:void 0}):"duration"===e?(0,a.jsx)(s.o,{placeholder:"eg: 30s, 30h, 30d"}):(0,a.jsx)(s.o,{placeholder:v||""}),(0,a.jsx)(i.Z.Item,{label:S,name:e,className:"mt-8",rules:T,initialValue:_[e],help:(0,a.jsx)("div",{className:"text-xs text-gray-500",children:f(e,t,p)}),children:r},e)};return v?(0,a.jsxs)("div",{className:"text-red-500",children:["Error: ",v]}):(null==C?void 0:C.properties)?(0,a.jsx)("div",{children:Object.entries(C.properties).filter(e=>{let[t]=e;return!o.includes(t)}).map(e=>{let[t,o]=e;return S(t,o)})}):null}},9114:function(e,t,o){var a=o(2265),r=o(57271),n=o(85968);function l(){return"topRight"}function c(e,t){var o;return"string"==typeof e?{message:t,description:e}:{message:null!==(o=e.message)&&void 0!==o?o:t,...e}}function i(e){return"number"==typeof e?e:"string"==typeof e&&/^\d+$/.test(e)?parseInt(e,10):void 0}let s=["invalid api key","invalid authorization header format","authentication error","invalid proxy server token","invalid jwt token","invalid jwt submitted","unauthorized access to metrics endpoint"],d=["admin-only endpoint","not allowed to access model","user does not have permission","access forbidden","invalid credentials used to access ui","user not allowed to access proxy"],u=["db not connected","database not initialized","no db connected","prisma client not initialized","service unhealthy"],p=["no models configured on proxy","llm router not initialized","no deployments available","no healthy deployment available","not allowed to access model due to tags configuration","invalid model name passed in"],h=["deployment over user-defined ratelimit","crossed tpm / rpm / max parallel request limit","max parallel request limit"],g=["budget exceeded","crossed budget","provider budget"],m=["must be a litellm enterprise user","only be available for liteLLM enterprise users","missing litellm-enterprise package","only available on the docker image","enterprise feature","premium user"],f=["invalid json payload","invalid request type","invalid key format","invalid hash key","invalid sort column","invalid sort order","invalid limit","invalid file type","invalid field","invalid date format"],w=["model not found","model with id","credential not found","user not found","team not found","organization not found","mcp server with id","tool '"],y=["already exists","team member is already in team","user already exists"],j=["violated openai moderation policy","violated jailbreak threshold","violated prompt_injection threshold","violated content safety policy","violated lasso guardrail policy","blocked by pillar security guardrail","violated azure prompt shield guardrail policy","content blocked by model armor","response blocked by model armor","streaming response blocked by model armor","guardrail","moderation"],_=["invalid purpose","service must be specified","invalid response - response.response is none"],C=["cloudzero settings not configured","failed to decrypt cloudzero api key","cloudzero settings not found"],k=["created successfully","updated successfully","deleted successfully","credential created successfully","model added successfully","team created successfully","user created successfully","organization created successfully","cloudzero settings initialized successfully","cloudzero settings updated successfully","cloudzero export completed successfully","mock llm request made","mock slack alert sent","mock email alert sent","spend for all api keys and teams reset successfully","monthlyglobalspend view refreshed","cache cleared successfully","cache set successfully","ip ","deleted successfully"],v=["rate limit reached for deployment","deployment cooldown period active"],T=["this feature is only available for litellm enterprise users","enterprise features are not available","regenerating virtual keys is an enterprise feature","trying to set allowed_routes. this is an enterprise feature"],E=["invalid maximum_spend_logs_retention_interval value","error has invalid or non-convertible code","failed to save health check to database"];t.Z={error(e){var t,o;let a=c(e,"Error");r.ZP.error({...a,placement:null!==(t=a.placement)&&void 0!==t?t:l(),duration:null!==(o=a.duration)&&void 0!==o?o:6})},warning(e){var t,o;let a=c(e,"Warning");r.ZP.warning({...a,placement:null!==(t=a.placement)&&void 0!==t?t:l(),duration:null!==(o=a.duration)&&void 0!==o?o:5})},info(e){var t,o;let a=c(e,"Info");r.ZP.info({...a,placement:null!==(t=a.placement)&&void 0!==t?t:l(),duration:null!==(o=a.duration)&&void 0!==o?o:4})},success(e){var t,o;if(a.isValidElement(e)){r.ZP.success({message:"Success",description:e,placement:l(),duration:3.5});return}let n=c(e,"Success");r.ZP.success({...n,placement:null!==(t=n.placement)&&void 0!==t?t:l(),duration:null!==(o=n.duration)&&void 0!==o?o:3.5})},fromBackend(e,t){var o,a,c,S,b,F,P,O,B,N,x,G;let J=null!==(G=null!==(x=i(null==e?void 0:null===(N=e.response)||void 0===N?void 0:N.status))&&void 0!==x?x:i(null==e?void 0:e.status_code))&&void 0!==G?G:i(null==e?void 0:e.code),A=function(e){var t,o,a,r,l,c,i,s,d,u,p,h;if("string"==typeof e)return e;let g=null!==(h=null!==(p=null!==(u=null!==(d=null!==(s=null==e?void 0:null===(a=e.response)||void 0===a?void 0:null===(o=a.data)||void 0===o?void 0:null===(t=o.error)||void 0===t?void 0:t.message)&&void 0!==s?s:null==e?void 0:null===(l=e.response)||void 0===l?void 0:null===(r=l.data)||void 0===r?void 0:r.message)&&void 0!==d?d:null==e?void 0:null===(i=e.response)||void 0===i?void 0:null===(c=i.data)||void 0===c?void 0:c.error)&&void 0!==u?u:null==e?void 0:e.detail)&&void 0!==p?p:null==e?void 0:e.message)&&void 0!==h?h:e;return(0,n.O)(g)}(e),U={...null!=t?t:{},description:A,placement:null!==(o=null==t?void 0:t.placement)&&void 0!==o?o:l()};if(void 0!==J||e instanceof Error||"string"==typeof e||e&&"object"==typeof e&&("error"in e||"detail"in e)){let e=function(e,t){var o,a,r,n,l;let c=(t||"").toLowerCase();return s.some(e=>c.includes(e))?"Authentication Error":d.some(e=>c.includes(e))?"Access Denied":(null==u?void 0:null===(o=u.some)||void 0===o?void 0:o.call(u,e=>c.includes(e)))||503===e?"Service Unavailable":(null==g?void 0:null===(a=g.some)||void 0===a?void 0:a.call(g,e=>c.includes(e)))?"Budget Exceeded":(null==m?void 0:null===(r=m.some)||void 0===r?void 0:r.call(m,e=>c.includes(e)))?"Feature Unavailable":(null==p?void 0:null===(n=p.some)||void 0===n?void 0:n.call(p,e=>c.includes(e)))?"Routing Error":y.some(e=>c.includes(e))?"Already Exists":j.some(e=>c.includes(e))?"Content Blocked":_.some(e=>c.includes(e))?"Validation Error":C.some(e=>c.includes(e))?"Integration Error":f.some(e=>c.includes(e))?"Validation Error":404===e||c.includes("not found")||w.some(e=>c.includes(e))?"Not Found":429===e||c.includes("rate limit")||c.includes("tpm")||c.includes("rpm")||(null==h?void 0:null===(l=h.some)||void 0===l?void 0:l.call(h,e=>c.includes(e)))?"Rate Limit Exceeded":e&&e>=500?"Server Error":401===e?"Authentication Error":403===e?"Access Denied":c.includes("enterprise")||c.includes("premium")?"Info":e&&e>=400?"Request Error":"Error"}(J,A),o={...U,message:e};if("Rate Limit Exceeded"===e||"Info"===e||"Budget Exceeded"===e||"Feature Unavailable"===e||"Content Blocked"===e||"Integration Error"===e){r.ZP.warning({...o,duration:null!==(a=null==t?void 0:t.duration)&&void 0!==a?a:7});return}if("Server Error"===e){r.ZP.error({...o,duration:null!==(c=null==t?void 0:t.duration)&&void 0!==c?c:8});return}if("Request Error"===e||"Authentication Error"===e||"Access Denied"===e||"Not Found"===e||"Error"===e){r.ZP.error({...o,duration:null!==(S=null==t?void 0:t.duration)&&void 0!==S?S:6});return}r.ZP.info({...o,duration:null!==(b=null==t?void 0:t.duration)&&void 0!==b?b:4});return}let R=function(e){let t=(e||"").toLowerCase();return k.some(e=>t.includes(e))?{kind:"success",title:"Success"}:T.some(e=>t.includes(e))?{kind:"warning",title:"Feature Notice"}:E.some(e=>t.includes(e))?{kind:"warning",title:"Configuration Warning"}:v.some(e=>t.includes(e))?{kind:"warning",title:"Rate Limit"}:null}(A),I={...U,message:null!==(F=null==R?void 0:R.title)&&void 0!==F?F:"Info"};if((null==R?void 0:R.kind)==="success"){r.ZP.success({...I,duration:null!==(P=null==t?void 0:t.duration)&&void 0!==P?P:3.5});return}if((null==R?void 0:R.kind)==="warning"){r.ZP.warning({...I,duration:null!==(O=null==t?void 0:t.duration)&&void 0!==O?O:6});return}r.ZP.info({...I,duration:null!==(B=null==t?void 0:t.duration)&&void 0!==B?B:4})},clear(){r.ZP.destroy()}}},19250:function(e,t,o){o.r(t),o.d(t,{DEFAULT_ORGANIZATION:function(){return h},PredictedSpendLogsCall:function(){return tl},addAllowedIP:function(){return em},adminGlobalActivity:function(){return eJ},adminGlobalActivityExceptions:function(){return eR},adminGlobalActivityExceptionsPerDeployment:function(){return eI},adminGlobalActivityPerModel:function(){return eU},adminGlobalCacheActivity:function(){return eA},adminSpendLogsCall:function(){return eB},adminTopEndUsersCall:function(){return ex},adminTopKeysCall:function(){return eN},adminTopModelsCall:function(){return eM},adminspendByProvider:function(){return eG},alertingSettingsCall:function(){return A},allEndUsersCall:function(){return eb},allTagNamesCall:function(){return eS},availableTeamListCall:function(){return W},budgetCreateCall:function(){return N},budgetDeleteCall:function(){return B},budgetUpdateCall:function(){return x},cachingHealthCheckCall:function(){return tv},callMCPTool:function(){return tZ},cancelModelCostMapReload:function(){return S},claimOnboardingToken:function(){return el},convertPromptFileToJson:function(){return tx},createGuardrailCall:function(){return tJ},createMCPServer:function(){return tz},createPassThroughEndpoint:function(){return tf},createPromptCall:function(){return tO},credentialCreateCall:function(){return eQ},credentialDeleteCall:function(){return e1},credentialGetCall:function(){return e0},credentialListCall:function(){return eX},credentialUpdateCall:function(){return e2},defaultProxyBaseUrl:function(){return c},deleteAllowedIP:function(){return ef},deleteCallback:function(){return ou},deleteConfigFieldSetting:function(){return ty},deleteGuardrailCall:function(){return oe},deleteMCPServer:function(){return tD},deletePassThroughEndpointsCall:function(){return tj},deletePromptCall:function(){return tN},fetchMCPAccessGroups:function(){return tM},fetchMCPServers:function(){return tI},formatDate:function(){return l},getAllowedIPs:function(){return eg},getBudgetList:function(){return ts},getBudgetSettings:function(){return td},getCallbacksCall:function(){return tu},getConfigFieldSetting:function(){return tg},getDefaultTeamSettings:function(){return t$},getEmailEventSettings:function(){return t7},getGeneralSettingsCall:function(){return tp},getGuardrailInfo:function(){return oa},getGuardrailProviderSpecificParams:function(){return oo},getGuardrailUISettings:function(){return ot},getGuardrailsList:function(){return tb},getInternalUserSettings:function(){return tU},getModelCostMapReloadStatus:function(){return b},getOnboardingCredentials:function(){return en},getOpenAPISchema:function(){return k},getPassThroughEndpointInfo:function(){return od},getPassThroughEndpointsCall:function(){return th},getPossibleUserRoles:function(){return eK},getPromptInfo:function(){return tP},getPromptsList:function(){return tF},getProxyBaseUrl:function(){return u},getProxyUISettings:function(){return tS},getPublicModelHubInfo:function(){return C},getRemainingUsers:function(){return oi},getSSOSettings:function(){return on},getTeamPermissionsCall:function(){return tX},getTotalSpendCall:function(){return er},getUiConfig:function(){return _},healthCheckCall:function(){return tC},healthCheckHistoryCall:function(){return tT},individualModelHealthCheckCall:function(){return tk},invitationClaimCall:function(){return J},invitationCreateCall:function(){return G},keyCreateCall:function(){return R},keyCreateServiceAccountCall:function(){return U},keyDeleteCall:function(){return M},keyInfoCall:function(){return ez},keyInfoV1Call:function(){return eD},keyListCall:function(){return eV},keySpendLogsCall:function(){return ev},keyUpdateCall:function(){return e4},latestHealthChecksCall:function(){return tE},listMCPTools:function(){return tV},makeModelGroupPublic:function(){return j},mcpToolsCall:function(){return op},modelAvailableCall:function(){return ek},modelCostMap:function(){return v},modelCreateCall:function(){return F},modelDeleteCall:function(){return O},modelExceptionsCall:function(){return e_},modelHubCall:function(){return eh},modelHubPublicModelsCall:function(){return ep},modelInfoCall:function(){return ed},modelInfoV1Call:function(){return eu},modelMetricsCall:function(){return ew},modelMetricsSlowResponsesCall:function(){return ej},modelPatchUpdateCall:function(){return e5},modelSettingsCall:function(){return P},modelUpdateCall:function(){return e6},organizationCreateCall:function(){return $},organizationDeleteCall:function(){return X},organizationInfoCall:function(){return K},organizationListCall:function(){return Y},organizationMemberAddCall:function(){return tt},organizationMemberDeleteCall:function(){return to},organizationMemberUpdateCall:function(){return ta},organizationUpdateCall:function(){return Q},patchPromptCall:function(){return tG},perUserAnalyticsCall:function(){return ok},proxyBaseUrl:function(){return s},regenerateKeyCall:function(){return ec},reloadModelCostMap:function(){return T},resetEmailEventSettings:function(){return t8},scheduleModelCostMapReload:function(){return E},serverRootPath:function(){return i},serviceHealthCheck:function(){return ti},sessionSpendLogsCall:function(){return t1},setCallbacksCall:function(){return t_},setGlobalLitellmHeaderName:function(){return y},slackBudgetAlertsHealthCheck:function(){return tc},spendUsersCall:function(){return eZ},streamingModelMetricsCall:function(){return ey},tagCreateCall:function(){return tq},tagDailyActivityCall:function(){return eo},tagDauCall:function(){return ow},tagDeleteCall:function(){return tK},tagDistinctCall:function(){return o_},tagInfoCall:function(){return tW},tagListCall:function(){return tY},tagMauCall:function(){return oj},tagUpdateCall:function(){return tH},tagWauCall:function(){return oy},tagsSpendLogsCall:function(){return eE},teamBulkMemberAddCall:function(){return e9},teamCreateCall:function(){return e$},teamDailyActivityCall:function(){return ea},teamDeleteCall:function(){return L},teamInfoCall:function(){return Z},teamListCall:function(){return H},teamMemberAddCall:function(){return e7},teamMemberDeleteCall:function(){return te},teamMemberUpdateCall:function(){return e8},teamPermissionsUpdateCall:function(){return t0},teamSpendLogsCall:function(){return eT},teamUpdateCall:function(){return e3},testConnectionRequest:function(){return eL},testMCPConnectionRequest:function(){return oh},testMCPToolsListRequest:function(){return og},transformRequestCall:function(){return ee},uiAuditLogsCall:function(){return oc},uiSpendLogDetailsCall:function(){return tA},uiSpendLogsCall:function(){return eO},updateConfigFieldSetting:function(){return tw},updateDefaultTeamSettings:function(){return tQ},updateEmailEventSettings:function(){return t9},updateGuardrailCall:function(){return or},updateInternalUserSettings:function(){return tR},updateMCPServer:function(){return tL},updatePassThroughEndpoint:function(){return os},updatePassThroughFieldSetting:function(){return tm},updatePromptCall:function(){return tB},updateSSOSettings:function(){return ol},updateUsefulLinksCall:function(){return eC},userAgentAnalyticsCall:function(){return of},userAgentSummaryCall:function(){return oC},userBulkUpdateUserCall:function(){return tn},userCreateCall:function(){return I},userDailyActivityAggregatedCall:function(){return eW},userDailyActivityCall:function(){return et},userDeleteCall:function(){return z},userFilterUICall:function(){return eF},userGetAllUsersCall:function(){return eY},userGetRequesedtModelsCall:function(){return eH},userInfoCall:function(){return V},userListCall:function(){return D},userRequestModelCall:function(){return eq},userSpendLogsCall:function(){return eP},userUpdateUserCall:function(){return tr},v2TeamListCall:function(){return q},vectorStoreCreateCall:function(){return t2},vectorStoreDeleteCall:function(){return t3},vectorStoreInfoCall:function(){return t5},vectorStoreListCall:function(){return t4},vectorStoreSearchCall:function(){return om},vectorStoreUpdateCall:function(){return t6}});var a=o(42264),r=o(63610),n=o(9114);let l=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)},c=null,i="/",s=null;console.log=function(){};let d=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=window.location.origin,a=t||o;console.log("proxyBaseUrl:",s),console.log("serverRootPath:",e),e.length>0&&!a.endsWith(e)&&"/"!=e&&(a+=e,s=a),console.log("Updated proxyBaseUrl:",s)},u=()=>s||window.location.origin,p={GET:"GET",DELETE:"DELETE"},h="default_organization",g=0,m=async e=>{let t=Date.now();t-g>6e4?(e.includes("Authentication Error - Expired Key")&&(n.Z.info("UI Session Expired. Logging out."),g=t,document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;",window.location.href=window.location.pathname),g=t):console.log("Error suppressed to prevent spam:",e)},f="Authorization",w="x-mcp-auth";function y(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Authorization";console.log("setGlobalLitellmHeaderName: ".concat(e)),f=e}let j=async(e,t)=>{let o=s?"".concat(s,"/model_group/make_public"):"/model_group/make_public";return(await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({model_groups:t})})).json()},_=async()=>{console.log("Getting UI config");let e=await fetch(c?"".concat(c,"/litellm/.well-known/litellm-ui-config"):"/litellm/.well-known/litellm-ui-config"),t=await e.json();return console.log("jsonData in getUiConfig:",t),d(t.server_root_path,t.proxy_base_url),t},C=async()=>{let e=await fetch(c?"".concat(c,"/public/model_hub/info"):"/public/model_hub/info");return await e.json()},k=async()=>{let e=s?"".concat(s,"/openapi.json"):"/openapi.json",t=await fetch(e);return await t.json()},v=async e=>{try{let t=s?"".concat(s,"/get/litellm_model_cost_map"):"/get/litellm_model_cost_map",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),a=await o.json();return console.log("received litellm model cost data: ".concat(a)),a}catch(e){throw console.error("Failed to get model cost map:",e),e}},T=async e=>{try{let t=s?"".concat(s,"/reload/model_cost_map"):"/reload/model_cost_map",o=await fetch(t,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),a=await o.json();return console.log("Model cost map reload response: ".concat(a)),a}catch(e){throw console.error("Failed to reload model cost map:",e),e}},E=async(e,t)=>{try{let o=s?"".concat(s,"/schedule/model_cost_map_reload?hours=").concat(t):"/schedule/model_cost_map_reload?hours=".concat(t),a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),r=await a.json();return console.log("Schedule model cost map reload response: ".concat(r)),r}catch(e){throw console.error("Failed to schedule model cost map reload:",e),e}},S=async e=>{try{let t=s?"".concat(s,"/schedule/model_cost_map_reload"):"/schedule/model_cost_map_reload",o=await fetch(t,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),a=await o.json();return console.log("Cancel model cost map reload response: ".concat(a)),a}catch(e){throw console.error("Failed to cancel model cost map reload:",e),e}},b=async e=>{try{let t=s?"".concat(s,"/schedule/model_cost_map_reload/status"):"/schedule/model_cost_map_reload/status";console.log("Fetching status from URL:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){console.error("Status request failed with status: ".concat(o.status));let e=await o.text();throw console.error("Error response:",e),Error("HTTP ".concat(o.status,": ").concat(e))}let a=await o.json();return console.log("Model cost map reload status:",a),a}catch(e){throw console.error("Failed to get model cost map reload status:",e),e}},F=async(e,t)=>{try{let o=s?"".concat(s,"/model/new"):"/model/new",r=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return console.log("API Response:",l),a.ZP.destroy(),n.Z.success("Model ".concat(t.model_name," created successfully")),l}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let t=s?"".concat(s,"/model/settings"):"/model/settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){console.error("Failed to get model settings:",e)}},O=async(e,t)=>{console.log("model_id in model delete call: ".concat(t));try{let o=s?"".concat(s,"/model/delete"):"/model/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,t)=>{if(console.log("budget_id in budget delete call: ".concat(t)),null!=e)try{let o=s?"".concat(s,"/budget/delete"):"/budget/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,t)=>{try{console.log("Form Values in budgetCreateCall:",t),console.log("Form Values after check:",t);let o=s?"".concat(s,"/budget/new"):"/budget/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},x=async(e,t)=>{try{console.log("Form Values in budgetUpdateCall:",t),console.log("Form Values after check:",t);let o=s?"".concat(s,"/budget/update"):"/budget/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},G=async(e,t)=>{try{let o=s?"".concat(s,"/invitation/new"):"/invitation/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},J=async(e,t)=>{try{console.log("Form Values in invitationCreateCall:",t),console.log("Form Values after check:",t);let o=s?"".concat(s,"/invitation/claim"):"/invitation/claim",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let t=s?"".concat(s,"/alerting/settings"):"/alerting/settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},U=async(e,t)=>{try{for(let e of(console.log("Form Values in keyCreateServiceAccountCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),r.d))if(t[e]){console.log("formValues.".concat(e,":"),t[e]);try{t[e]=JSON.parse(t[e])}catch(t){throw Error("Failed to parse ".concat(e,": ")+t)}}console.log("Form Values after check:",t);let o=s?"".concat(s,"/key/service-account/generate"):"/key/service-account/generate",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let n=await a.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,t,o)=>{try{for(let e of(console.log("Form Values in keyCreateCall:",o),o.description&&(o.metadata||(o.metadata={}),o.metadata.description=o.description,delete o.description,o.metadata=JSON.stringify(o.metadata)),r.d))if(o[e]){console.log("formValues.".concat(e,":"),o[e]);try{o[e]=JSON.parse(o[e])}catch(t){throw Error("Failed to parse ".concat(e,": ")+t)}}console.log("Form Values after check:",o);let a=s?"".concat(s,"/key/generate"):"/key/generate",n=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:t,...o})});if(!n.ok){let e=await n.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let l=await n.json();return console.log("API Response:",l),l}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,t,o)=>{try{if(console.log("Form Values in keyCreateCall:",o),o.description&&(o.metadata||(o.metadata={}),o.metadata.description=o.description,delete o.description,o.metadata=JSON.stringify(o.metadata)),o.auto_create_key=!1,o.metadata){console.log("formValues.metadata:",o.metadata);try{o.metadata=JSON.parse(o.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",o);let a=s?"".concat(s,"/user/new"):"/user/new",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:t,...o})});if(!r.ok){let e=await r.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},M=async(e,t)=>{try{let o=s?"".concat(s,"/key/delete"):"/key/delete";console.log("in keyDeleteCall:",t);let a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[t]})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,t)=>{try{let o=s?"".concat(s,"/user/delete"):"/user/delete";console.log("in userDeleteCall:",t);let a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_ids:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to delete user(s):",e),e}},L=async(e,t)=>{try{let o=s?"".concat(s,"/team/delete"):"/team/delete";console.log("in teamDeleteCall:",t);let a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[t]})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to delete key:",e),e}},D=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,c=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,i=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,d=arguments.length>9&&void 0!==arguments[9]?arguments[9]:null;try{let u=s?"".concat(s,"/user/list"):"/user/list";console.log("in userListCall");let p=new URLSearchParams;if(t&&t.length>0){let e=t.join(",");p.append("user_ids",e)}o&&p.append("page",o.toString()),a&&p.append("page_size",a.toString()),r&&p.append("user_email",r),n&&p.append("role",n),l&&p.append("team",l),c&&p.append("sso_user_ids",c),i&&p.append("sort_by",i),d&&p.append("sort_order",d);let h=p.toString();h&&(u+="?".concat(h));let g=await fetch(u,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!g.ok){let e=await g.json(),t=ov(e);throw m(t),Error(t)}let w=await g.json();return console.log("/user/list API Response:",w),w}catch(e){throw console.error("Failed to create key:",e),e}},V=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4?arguments[4]:void 0,n=arguments.length>5?arguments[5]:void 0,l=arguments.length>6&&void 0!==arguments[6]&&arguments[6];console.log("userInfoCall: ".concat(t,", ").concat(o,", ").concat(a,", ").concat(r,", ").concat(n,", ").concat(l));try{let c;if(a){c=s?"".concat(s,"/user/list"):"/user/list";let e=new URLSearchParams;null!=r&&e.append("page",r.toString()),null!=n&&e.append("page_size",n.toString()),c+="?".concat(e.toString())}else c=s?"".concat(s,"/user/info"):"/user/info",("Admin"!==o&&"Admin Viewer"!==o||l)&&t&&(c+="?user_id=".concat(t));console.log("Requesting user data from:",c);let i=await fetch(c,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}let d=await i.json();return console.log("API Response:",d),d}catch(e){throw console.error("Failed to fetch user data:",e),e}},Z=async(e,t)=>{try{let o=s?"".concat(s,"/team/info"):"/team/info";t&&(o="".concat(o,"?team_id=").concat(t)),console.log("in teamInfoCall");let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},q=async function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;arguments.length>5&&void 0!==arguments[5]&&arguments[5],arguments.length>6&&void 0!==arguments[6]&&arguments[6],arguments.length>7&&void 0!==arguments[7]&&arguments[7],arguments.length>8&&void 0!==arguments[8]&&arguments[8];try{let n=s?"".concat(s,"/v2/team/list"):"/v2/team/list";console.log("in teamInfoCall");let l=new URLSearchParams;o&&l.append("user_id",o.toString()),t&&l.append("organization_id",t.toString()),a&&l.append("team_id",a.toString()),r&&l.append("team_alias",r.toString());let c=l.toString();c&&(n+="?".concat(c));let i=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}let d=await i.json();return console.log("/v2/team/list API Response:",d),d}catch(e){throw console.error("Failed to create key:",e),e}},H=async function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{let n=s?"".concat(s,"/team/list"):"/team/list";console.log("in teamInfoCall");let l=new URLSearchParams;o&&l.append("user_id",o.toString()),t&&l.append("organization_id",t.toString()),a&&l.append("team_id",a.toString()),r&&l.append("team_alias",r.toString());let c=l.toString();c&&(n+="?".concat(c));let i=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}let d=await i.json();return console.log("/team/list API Response:",d),d}catch(e){throw console.error("Failed to create key:",e),e}},W=async e=>{try{let t=s?"".concat(s,"/team/available"):"/team/available";console.log("in availableTeamListCall");let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("/team/available_teams API Response:",a),a}catch(e){throw e}},Y=async e=>{try{let t=s?"".concat(s,"/organization/list"):"/organization/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},K=async(e,t)=>{try{let o=s?"".concat(s,"/organization/info"):"/organization/info";t&&(o="".concat(o,"?organization_id=").concat(t)),console.log("in teamInfoCall");let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},$=async(e,t)=>{try{if(console.log("Form Values in organizationCreateCall:",t),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw console.error("Failed to parse metadata:",e),Error("Failed to parse metadata: "+e)}}let o=s?"".concat(s,"/organization/new"):"/organization/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},Q=async(e,t)=>{try{console.log("Form Values in organizationUpdateCall:",t);let o=s?"".concat(s,"/organization/update"):"/organization/update",a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Update Team Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},X=async(e,t)=>{try{let o=s?"".concat(s,"/organization/delete"):"/organization/delete",a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_ids:[t]})});if(!a.ok){let e=await a.text();throw m(e),Error("Error deleting organization: ".concat(e))}return await a.json()}catch(e){throw console.error("Failed to delete organization:",e),e}},ee=async(e,t)=>{try{let o=s?"".concat(s,"/utils/transform_request"):"/utils/transform_request",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create key:",e),e}},et=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;try{let r=s?"".concat(s,"/user/daily/activity"):"/user/daily/activity",n=new URLSearchParams;n.append("start_date",l(t)),n.append("end_date",l(o)),n.append("page_size","1000"),n.append("page",a.toString());let c=n.toString();c&&(r+="?".concat(c));let i=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}return await i.json()}catch(e){throw console.error("Failed to create key:",e),e}},eo=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{let n=s?"".concat(s,"/tag/daily/activity"):"/tag/daily/activity",c=new URLSearchParams;c.append("start_date",l(t)),c.append("end_date",l(o)),c.append("page_size","1000"),c.append("page",a.toString()),r&&c.append("tags",r.join(","));let i=c.toString();i&&(n+="?".concat(i));let d=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=ov(e);throw m(t),Error(t)}return await d.json()}catch(e){throw console.error("Failed to create key:",e),e}},ea=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{let n=s?"".concat(s,"/team/daily/activity"):"/team/daily/activity",c=new URLSearchParams;c.append("start_date",l(t)),c.append("end_date",l(o)),c.append("page_size","1000"),c.append("page",a.toString()),r&&c.append("team_ids",r.join(",")),c.append("exclude_team_ids","litellm-dashboard");let i=c.toString();i&&(n+="?".concat(i));let d=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=ov(e);throw m(t),Error(t)}return await d.json()}catch(e){throw console.error("Failed to create key:",e),e}},er=async e=>{try{let t=s?"".concat(s,"/global/spend"):"/global/spend",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},en=async e=>{try{let t=s?"".concat(s,"/onboarding/get_token"):"/onboarding/get_token";t+="?invite_link=".concat(e);let o=await fetch(t,{method:"GET",headers:{"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},el=async(e,t,o,a)=>{let r=s?"".concat(s,"/onboarding/claim_token"):"/onboarding/claim_token";try{let n=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({invitation_link:t,user_id:o,password:a})});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to delete key:",e),e}},ec=async(e,t,o)=>{try{let a=s?"".concat(s,"/key/").concat(t,"/regenerate"):"/key/".concat(t,"/regenerate"),r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("Regenerate key Response:",n),n}catch(e){throw console.error("Failed to regenerate key:",e),e}},ei=!1,es=null,ed=async(e,t,o)=>{try{console.log("modelInfoCall:",e,t,o);let a=s?"".concat(s,"/v2/model/info"):"/v2/model/info",r=new URLSearchParams;r.append("include_team_models","true"),r.toString()&&(a+="?".concat(r.toString()));let l=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw e+="error shown=".concat(ei),ei||(e.includes("No model list passed")&&(e="No Models Exist. Click Add Model to get started."),n.Z.info(e),ei=!0,es&&clearTimeout(es),es=setTimeout(()=>{ei=!1},1e4)),Error("Network response was not ok")}let c=await l.json();return console.log("modelInfoCall:",c),c}catch(e){throw console.error("Failed to create key:",e),e}},eu=async(e,t)=>{try{let o=s?"".concat(s,"/v1/model/info"):"/v1/model/info";o+="?litellm_model_id=".concat(t);let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("modelInfoV1Call:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},ep=async()=>{let e=s?"".concat(s,"/public/model_hub"):"/public/model_hub";return(await fetch(e,{method:"GET",headers:{"Content-Type":"application/json"}})).json()},eh=async e=>{try{let t=s?"".concat(s,"/model_group/info"):"/model_group/info",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("modelHubCall:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},eg=async e=>{try{let t=s?"".concat(s,"/get/allowed_ips"):"/get/allowed_ips",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("getAllowedIPs:",a),a.data}catch(e){throw console.error("Failed to get allowed IPs:",e),e}},em=async(e,t)=>{try{let o=s?"".concat(s,"/add/allowed_ip"):"/add/allowed_ip",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({ip:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("addAllowedIP:",r),r}catch(e){throw console.error("Failed to add allowed IP:",e),e}},ef=async(e,t)=>{try{let o=s?"".concat(s,"/delete/allowed_ip"):"/delete/allowed_ip",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({ip:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("deleteAllowedIP:",r),r}catch(e){throw console.error("Failed to delete allowed IP:",e),e}},ew=async(e,t,o,a,r,n,l,c)=>{try{let t=s?"".concat(s,"/model/metrics"):"/model/metrics";a&&(t="".concat(t,"?_selected_model_group=").concat(a,"&startTime=").concat(r,"&endTime=").concat(n,"&api_key=").concat(l,"&customer=").concat(c));let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},ey=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/model/streaming_metrics"):"/model/streaming_metrics";t&&(r="".concat(r,"?_selected_model_group=").concat(t,"&startTime=").concat(o,"&endTime=").concat(a));let n=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}return await n.json()}catch(e){throw console.error("Failed to create key:",e),e}},ej=async(e,t,o,a,r,n,l,c)=>{try{let t=s?"".concat(s,"/model/metrics/slow_responses"):"/model/metrics/slow_responses";a&&(t="".concat(t,"?_selected_model_group=").concat(a,"&startTime=").concat(r,"&endTime=").concat(n,"&api_key=").concat(l,"&customer=").concat(c));let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},e_=async(e,t,o,a,r,n,l,c)=>{try{let t=s?"".concat(s,"/model/metrics/exceptions"):"/model/metrics/exceptions";a&&(t="".concat(t,"?_selected_model_group=").concat(a,"&startTime=").concat(r,"&endTime=").concat(n,"&api_key=").concat(l,"&customer=").concat(c));let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},eC=async(e,t)=>{try{let o=s?"".concat(s,"/model_hub/update_useful_links"):"/model_hub/update_useful_links",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({useful_links:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create key:",e),e}},ek=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=(arguments.length>5&&void 0!==arguments[5]&&arguments[5],arguments.length>6&&void 0!==arguments[6]&&arguments[6]);console.log("in /models calls, globalLitellmHeaderName",f);try{let t=s?"".concat(s,"/models"):"/models",o=new URLSearchParams;o.append("include_model_access_groups","True"),!0===a&&o.append("return_wildcard_routes","True"),!0===n&&o.append("only_model_access_groups","True"),r&&o.append("team_id",r.toString()),o.toString()&&(t+="?".concat(o.toString()));let l=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},ev=async(e,t)=>{try{let o=s?"".concat(s,"/global/spend/logs"):"/global/spend/logs";console.log("in keySpendLogsCall:",o);let a=await fetch("".concat(o,"?api_key=").concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},eT=async e=>{try{let t=s?"".concat(s,"/global/spend/teams"):"/global/spend/teams";console.log("in teamSpendLogsCall:",t);let o=await fetch("".concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eE=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/spend/tags"):"/global/spend/tags";t&&o&&(r="".concat(r,"?start_date=").concat(t,"&end_date=").concat(o)),a&&(r+="".concat(r,"&tags=").concat(a.join(","))),console.log("in tagsSpendLogsCall:",r);let n=await fetch("".concat(r),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to create key:",e),e}},eS=async e=>{try{let t=s?"".concat(s,"/global/spend/all_tag_names"):"/global/spend/all_tag_names";console.log("in global/spend/all_tag_names call",t);let o=await fetch("".concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eb=async e=>{try{let t=s?"".concat(s,"/global/all_end_users"):"/global/all_end_users";console.log("in global/all_end_users call",t);let o=await fetch("".concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eF=async(e,t)=>{try{let o=s?"".concat(s,"/user/filter/ui"):"/user/filter/ui";t.get("user_email")&&(o+="?user_email=".concat(t.get("user_email"))),t.get("user_id")&&(o+="?user_id=".concat(t.get("user_id")));let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create key:",e),e}},eP=async(e,t,o,a,r,n)=>{try{console.log("user role in spend logs call: ".concat(o));let t=s?"".concat(s,"/spend/logs"):"/spend/logs";t="App Owner"==o?"".concat(t,"?user_id=").concat(a,"&start_date=").concat(r,"&end_date=").concat(n):"".concat(t,"?start_date=").concat(r,"&end_date=").concat(n);let l=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to create key:",e),e}},eO=async(e,t,o,a,r,n,l,c,i,d,u,p,h)=>{try{let g=s?"".concat(s,"/spend/logs/ui"):"/spend/logs/ui",w=new URLSearchParams;t&&w.append("api_key",t),o&&w.append("team_id",o),a&&w.append("request_id",a),r&&w.append("start_date",r),n&&w.append("end_date",n),l&&w.append("page",l.toString()),c&&w.append("page_size",c.toString()),i&&w.append("user_id",i),d&&w.append("end_user",d),u&&w.append("status_filter",u),p&&w.append("model",p),h&&w.append("key_alias",h);let y=w.toString();y&&(g+="?".concat(y));let j=await fetch(g,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!j.ok){let e=await j.json(),t=ov(e);throw m(t),Error(t)}let _=await j.json();return console.log("Spend Logs Response:",_),_}catch(e){throw console.error("Failed to fetch spend logs:",e),e}},eB=async e=>{try{let t=s?"".concat(s,"/global/spend/logs"):"/global/spend/logs",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eN=async e=>{try{let t=s?"".concat(s,"/global/spend/keys?limit=5"):"/global/spend/keys?limit=5",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},ex=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/spend/end_users"):"/global/spend/end_users",n="";n=t?JSON.stringify({api_key:t,startTime:o,endTime:a}):JSON.stringify({startTime:o,endTime:a});let l={method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:n},c=await fetch(r,l);if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}let i=await c.json();return console.log(i),i}catch(e){throw console.error("Failed to create key:",e),e}},eG=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/spend/provider"):"/global/spend/provider";o&&a&&(r+="?start_date=".concat(o,"&end_date=").concat(a)),t&&(r+="&api_key=".concat(t));let n={method:"GET",headers:{[f]:"Bearer ".concat(e)}},l=await fetch(r,n);if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eJ=async(e,t,o)=>{try{let a=s?"".concat(s,"/global/activity"):"/global/activity";t&&o&&(a+="?start_date=".concat(t,"&end_date=").concat(o));let r={method:"GET",headers:{[f]:"Bearer ".concat(e)}},n=await fetch(a,r);if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eA=async(e,t,o)=>{try{let a=s?"".concat(s,"/global/activity/cache_hits"):"/global/activity/cache_hits";t&&o&&(a+="?start_date=".concat(t,"&end_date=").concat(o));let r={method:"GET",headers:{[f]:"Bearer ".concat(e)}},n=await fetch(a,r);if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eU=async(e,t,o)=>{try{let a=s?"".concat(s,"/global/activity/model"):"/global/activity/model";t&&o&&(a+="?start_date=".concat(t,"&end_date=").concat(o));let r={method:"GET",headers:{[f]:"Bearer ".concat(e)}},n=await fetch(a,r);if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eR=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/activity/exceptions"):"/global/activity/exceptions";t&&o&&(r+="?start_date=".concat(t,"&end_date=").concat(o)),a&&(r+="&model_group=".concat(a));let n={method:"GET",headers:{[f]:"Bearer ".concat(e)}},l=await fetch(r,n);if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eI=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/activity/exceptions/deployment"):"/global/activity/exceptions/deployment";t&&o&&(r+="?start_date=".concat(t,"&end_date=").concat(o)),a&&(r+="&model_group=".concat(a));let n={method:"GET",headers:{[f]:"Bearer ".concat(e)}},l=await fetch(r,n);if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eM=async e=>{try{let t=s?"".concat(s,"/global/spend/models?limit=5"):"/global/spend/models?limit=5",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},ez=async(e,t)=>{try{let o=s?"".concat(s,"/v2/key/info"):"/v2/key/info",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:t})});if(!a.ok){let e=await a.text();if(e.includes("Invalid proxy server token passed"))throw Error("Invalid proxy server token passed");throw m(e),Error("Network response was not ok")}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},eL=async(e,t,o)=>{try{console.log("Sending model connection test request:",JSON.stringify(t));let r=s?"".concat(s,"/health/test_connection"):"/health/test_connection",n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",[f]:"Bearer ".concat(e)},body:JSON.stringify({litellm_params:t,mode:o})}),l=n.headers.get("content-type");if(!l||!l.includes("application/json")){let e=await n.text();throw console.error("Received non-JSON response:",e),Error("Received non-JSON response (".concat(n.status,": ").concat(n.statusText,"). Check network tab for details."))}let c=await n.json();if(!n.ok||"error"===c.status){if("error"===c.status);else{var a;return{status:"error",message:(null===(a=c.error)||void 0===a?void 0:a.message)||"Connection test failed: ".concat(n.status," ").concat(n.statusText)}}}return c}catch(e){throw console.error("Model connection test error:",e),e}},eD=async(e,t)=>{try{console.log("entering keyInfoV1Call");let o=s?"".concat(s,"/key/info"):"/key/info";o="".concat(o,"?key=").concat(t);let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(console.log("response",a),!a.ok){let e=await a.text();m(e),n.Z.fromBackend("Failed to fetch key info - "+e)}let r=await a.json();return console.log("data",r),r}catch(e){throw console.error("Failed to fetch key info:",e),e}},eV=async function(e,t,o,a,r,n,l,c){let i=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,d=arguments.length>9&&void 0!==arguments[9]?arguments[9]:null;try{let u=s?"".concat(s,"/key/list"):"/key/list";console.log("in keyListCall");let p=new URLSearchParams;o&&p.append("team_id",o.toString()),t&&p.append("organization_id",t.toString()),a&&p.append("key_alias",a),n&&p.append("key_hash",n),r&&p.append("user_id",r.toString()),l&&p.append("page",l.toString()),c&&p.append("size",c.toString()),i&&p.append("sort_by",i),d&&p.append("sort_order",d),p.append("return_full_object","true"),p.append("include_team_keys","true");let h=p.toString();h&&(u+="?".concat(h));let g=await fetch(u,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!g.ok){let e=await g.json(),t=ov(e);throw m(t),Error(t)}let w=await g.json();return console.log("/team/list API Response:",w),w}catch(e){throw console.error("Failed to create key:",e),e}},eZ=async(e,t)=>{try{let o=s?"".concat(s,"/spend/users"):"/spend/users";console.log("in spendUsersCall:",o);let a=await fetch("".concat(o,"?user_id=").concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to get spend for user",e),e}},eq=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/user/request_model"):"/user/request_model",n=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({models:[t],user_id:o,justification:a})});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to create key:",e),e}},eH=async e=>{try{let t=s?"".concat(s,"/user/get_requests"):"/user/get_requests";console.log("in userGetRequesedtModelsCall:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},eW=async(e,t,o)=>{try{let a=s?"".concat(s,"/user/daily/activity/aggregated"):"/user/daily/activity/aggregated",r=new URLSearchParams,n=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)};r.append("start_date",n(t)),r.append("end_date",n(o));let l=r.toString();l&&(a+="?".concat(l));let c=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch aggregated user daily activity:",e),e}},eY=async(e,t)=>{try{let o=s?"".concat(s,"/user/get_users?role=").concat(t):"/user/get_users?role=".concat(t);console.log("in userGetAllUsersCall:",o);let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to get requested models:",e),e}},eK=async e=>{try{let t=s?"".concat(s,"/user/available_roles"):"/user/available_roles",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("response from user/available_role",a),a}catch(e){throw e}},e$=async(e,t)=>{try{if(console.log("Form Values in teamCreateCall:",t),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}let o=s?"".concat(s,"/team/new"):"/team/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},eQ=async(e,t)=>{try{if(console.log("Form Values in credentialCreateCall:",t),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}let o=s?"".concat(s,"/credentials"):"/credentials",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},eX=async e=>{try{let t=s?"".concat(s,"/credentials"):"/credentials";console.log("in credentialListCall");let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("/credentials API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},e0=async(e,t,o)=>{try{let a=s?"".concat(s,"/credentials"):"/credentials";t?a+="/by_name/".concat(t):o&&(a+="/by_model/".concat(o)),console.log("in credentialListCall");let r=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("/credentials API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},e1=async(e,t)=>{try{let o=s?"".concat(s,"/credentials/").concat(t):"/credentials/".concat(t);console.log("in credentialDeleteCall:",t);let a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to delete key:",e),e}},e2=async(e,t,o)=>{try{if(console.log("Form Values in credentialUpdateCall:",o),o.metadata){console.log("formValues.metadata:",o.metadata);try{o.metadata=JSON.parse(o.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}let a=s?"".concat(s,"/credentials/").concat(t):"/credentials/".concat(t),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},e4=async(e,t)=>{try{if(console.log("Form Values in keyUpdateCall:",t),t.model_tpm_limit){console.log("formValues.model_tpm_limit:",t.model_tpm_limit);try{t.model_tpm_limit=JSON.parse(t.model_tpm_limit)}catch(e){throw Error("Failed to parse model_tpm_limit: "+e)}}if(t.model_rpm_limit){console.log("formValues.model_rpm_limit:",t.model_rpm_limit);try{t.model_rpm_limit=JSON.parse(t.model_rpm_limit)}catch(e){throw Error("Failed to parse model_rpm_limit: "+e)}}let o=s?"".concat(s,"/key/update"):"/key/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let r=await a.json();return console.log("Update key Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},e3=async(e,t)=>{try{console.log("Form Values in teamUpateCall:",t);let o=s?"".concat(s,"/team/update"):"/team/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error response from the server:",e),n.Z.fromBackend("Failed to update team settings: "+e),Error(e)}let r=await a.json();return console.log("Update Team Response:",r),r}catch(e){throw console.error("Failed to update team:",e),e}},e5=async(e,t,o)=>{try{console.log("Form Values in modelUpateCall:",t);let a=s?"".concat(s,"/model/").concat(o,"/update"):"/model/".concat(o,"/update"),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!r.ok){let e=await r.text();throw m(e),console.error("Error update from the server:",e),Error("Network response was not ok")}let n=await r.json();return console.log("Update model Response:",n),n}catch(e){throw console.error("Failed to update model:",e),e}},e6=async(e,t)=>{try{console.log("Form Values in modelUpateCall:",t);let o=s?"".concat(s,"/model/update"):"/model/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error update from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("Update model Response:",r),r}catch(e){throw console.error("Failed to update model:",e),e}},e7=async(e,t,o)=>{try{console.log("Form Values in teamMemberAddCall:",o);let r=s?"".concat(s,"/team/member_add"):"/team/member_add",n=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:t,member:o})});if(!n.ok){var a;let e=await n.text(),t={};try{t=JSON.parse(e)}catch(t){console.warn("Failed to parse error body as JSON:",e)}let o=(null==t?void 0:null===(a=t.detail)||void 0===a?void 0:a.error)||"Failed to add team member",r=Error(o);throw r.raw=t,r}let l=await n.json();return console.log("API Response:",l),l}catch(e){throw console.error("Failed to create key:",e),e}},e9=async(e,t,o,a,r)=>{try{console.log("Bulk add team members:",{teamId:t,members:o,maxBudgetInTeam:a});let l=s?"".concat(s,"/team/bulk_member_add"):"/team/bulk_member_add",c={team_id:t};r?c.all_users=!0:c.members=o,null!=a&&(c.max_budget_in_team=a);let i=await fetch(l,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(c)});if(!i.ok){var n;let e=await i.text(),t={};try{t=JSON.parse(e)}catch(t){console.warn("Failed to parse error body as JSON:",e)}let o=(null==t?void 0:null===(n=t.detail)||void 0===n?void 0:n.error)||"Failed to bulk add team members",a=Error(o);throw a.raw=t,a}let d=await i.json();return console.log("Bulk team member add API Response:",d),d}catch(e){throw console.error("Failed to bulk add team members:",e),e}},e8=async(e,t,o)=>{try{console.log("Form Values in teamMemberUpdateCall:",o),console.log("Budget value:",o.max_budget_in_team),console.log("TPM limit:",o.tpm_limit),console.log("RPM limit:",o.rpm_limit);let r=s?"".concat(s,"/team/member_update"):"/team/member_update",n={team_id:t,role:o.role,user_id:o.user_id};void 0!==o.user_email&&(n.user_email=o.user_email),void 0!==o.max_budget_in_team&&null!==o.max_budget_in_team&&(n.max_budget_in_team=o.max_budget_in_team),void 0!==o.tpm_limit&&null!==o.tpm_limit&&(n.tpm_limit=o.tpm_limit),void 0!==o.rpm_limit&&null!==o.rpm_limit&&(n.rpm_limit=o.rpm_limit),console.log("Final request body:",n);let l=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok){var a;let e=await l.text(),t={};try{t=JSON.parse(e)}catch(t){console.warn("Failed to parse error body as JSON:",e)}let o=(null==t?void 0:null===(a=t.detail)||void 0===a?void 0:a.error)||"Failed to add team member",r=Error(o);throw r.raw=t,r}let c=await l.json();return console.log("API Response:",c),c}catch(e){throw console.error("Failed to update team member:",e),e}},te=async(e,t,o)=>{try{console.log("Form Values in teamMemberAddCall:",o);let a=s?"".concat(s,"/team/member_delete"):"/team/member_delete",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:t,...void 0!==o.user_email&&{user_email:o.user_email},...void 0!==o.user_id&&{user_id:o.user_id}})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},tt=async(e,t,o)=>{try{console.log("Form Values in teamMemberAddCall:",o);let a=s?"".concat(s,"/organization/member_add"):"/organization/member_add",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_id:t,member:o})});if(!r.ok){let e=await r.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create organization member:",e),e}},to=async(e,t,o)=>{try{console.log("Form Values in organizationMemberDeleteCall:",o);let a=s?"".concat(s,"/organization/member_delete"):"/organization/member_delete",r=await fetch(a,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_id:t,user_id:o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to delete organization member:",e),e}},ta=async(e,t,o)=>{try{console.log("Form Values in organizationMemberUpdateCall:",o);let a=s?"".concat(s,"/organization/member_update"):"/organization/member_update",r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_id:t,...o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to update organization member:",e),e}},tr=async(e,t,o)=>{try{console.log("Form Values in userUpdateUserCall:",t);let a=s?"".concat(s,"/user/update"):"/user/update",r={...t};null!==o&&(r.user_role=o),r=JSON.stringify(r);let n=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:r});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log("API Response:",l),l}catch(e){throw console.error("Failed to create key:",e),e}},tn=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];try{let r;console.log("Form Values in userUpdateUserCall:",t);let n=s?"".concat(s,"/user/bulk_update"):"/user/bulk_update";if(a)r=JSON.stringify({all_users:!0,user_updates:t});else if(o&&o.length>0){let e=[];for(let a of o)e.push({user_id:a,...t});r=JSON.stringify({users:e})}else throw Error("Must provide either userIds or set allUsers=true");let l=await fetch(n,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:r});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log("API Response:",c),c}catch(e){throw console.error("Failed to create key:",e),e}},tl=async(e,t)=>{try{let o=s?"".concat(s,"/global/predict/spend/logs"):"/global/predict/spend/logs",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({data:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},tc=async e=>{try{let t=s?"".concat(s,"/health/services?service=slack_budget_alerts"):"/health/services?service=slack_budget_alerts";console.log("Checking Slack Budget Alerts service health");let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error(e)}let a=await o.json();return n.Z.success("Test Slack Alert worked - check your Slack!"),console.log("Service Health Response:",a),a}catch(e){throw console.error("Failed to perform health check:",e),e}},ti=async(e,t)=>{try{let o=s?"".concat(s,"/health/services?service=").concat(t):"/health/services?service=".concat(t);console.log("Checking Slack Budget Alerts service health");let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw m(e),Error(e)}return await a.json()}catch(e){throw console.error("Failed to perform health check:",e),e}},ts=async e=>{try{let t=s?"".concat(s,"/budget/list"):"/budget/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},td=async e=>{try{let t=s?"".concat(s,"/budget/settings"):"/budget/settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tu=async(e,t,o)=>{try{let t=s?"".concat(s,"/get/config/callbacks"):"/get/config/callbacks",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tp=async e=>{try{let t=s?"".concat(s,"/config/list?config_type=general_settings"):"/config/list?config_type=general_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},th=async e=>{try{let t=s?"".concat(s,"/config/pass_through_endpoint"):"/config/pass_through_endpoint",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tg=async(e,t)=>{try{let o=s?"".concat(s,"/config/field/info?field_name=").concat(t):"/config/field/info?field_name=".concat(t),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},tm=async(e,t,o)=>{try{let a=s?"".concat(s,"/config/pass_through_endpoint"):"/config/pass_through_endpoint",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:t,field_value:o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return n.Z.success("Successfully updated value!"),l}catch(e){throw console.error("Failed to set callbacks:",e),e}},tf=async(e,t)=>{try{let o=s?"".concat(s,"/config/pass_through_endpoint"):"/config/pass_through_endpoint",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},tw=async(e,t,o)=>{try{let a=s?"".concat(s,"/config/field/update"):"/config/field/update",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:t,field_value:o,config_type:"general_settings"})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return n.Z.success("Successfully updated value!"),l}catch(e){throw console.error("Failed to set callbacks:",e),e}},ty=async(e,t)=>{try{let o=s?"".concat(s,"/config/field/delete"):"/config/field/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:t,config_type:"general_settings"})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return n.Z.success("Field reset on proxy"),r}catch(e){throw console.error("Failed to get callbacks:",e),e}},tj=async(e,t)=>{try{let o=s?"".concat(s,"/config/pass_through_endpoint?endpoint_id=").concat(t):"/config/pass_through_endpoint?endpoint_id=".concat(t),a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},t_=async(e,t)=>{try{let o=s?"".concat(s,"/config/update"):"/config/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},tC=async e=>{try{let t=s?"".concat(s,"/health"):"/health",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to call /health:",e),e}},tk=async(e,t)=>{try{let o=s?"".concat(s,"/health?model=").concat(encodeURIComponent(t)):"/health?model=".concat(encodeURIComponent(t)),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to call /health for model ".concat(t,":"),e),e}},tv=async e=>{try{let t=s?"".concat(s,"/cache/ping"):"/cache/ping",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error(e)}return await o.json()}catch(e){throw console.error("Failed to call /cache/ping:",e),e}},tT=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:100,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;try{let n=s?"".concat(s,"/health/history"):"/health/history",l=new URLSearchParams;t&&l.append("model",t),o&&l.append("status_filter",o),l.append("limit",a.toString()),l.append("offset",r.toString()),l.toString()&&(n+="?".concat(l.toString()));let c=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.text();throw m(e),Error(e)}return await c.json()}catch(e){throw console.error("Failed to call /health/history:",e),e}},tE=async e=>{try{let t=s?"".concat(s,"/health/latest"):"/health/latest",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error(e)}return await o.json()}catch(e){throw console.error("Failed to call /health/latest:",e),e}},tS=async e=>{try{console.log("Getting proxy UI settings"),console.log("proxyBaseUrl in getProxyUISettings:",s);let t=s?"".concat(s,"/sso/get/ui_settings"):"/sso/get/ui_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tb=async e=>{try{let t=s?"".concat(s,"/v2/guardrails/list"):"/v2/guardrails/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get guardrails list:",e),e}},tF=async e=>{try{let t=s?"".concat(s,"/prompts/list"):"/prompts/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get prompts list:",e),e}},tP=async(e,t)=>{try{let o=s?"".concat(s,"/prompts/").concat(t,"/info"):"/prompts/".concat(t,"/info"),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to get prompt info:",e),e}},tO=async(e,t)=>{try{let o=s?"".concat(s,"/prompts"):"/prompts",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create prompt:",e),e}},tB=async(e,t,o)=>{try{let a=s?"".concat(s,"/prompts/").concat(t):"/prompts/".concat(t),r=await fetch(a,{method:"PUT",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}return await r.json()}catch(e){throw console.error("Failed to update prompt:",e),e}},tN=async(e,t)=>{try{let o=s?"".concat(s,"/prompts/").concat(t):"/prompts/".concat(t),a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to delete prompt:",e),e}},tx=async(e,t)=>{try{let o=new FormData;o.append("file",t);let a=s?"".concat(s,"/utils/dotprompt_json_converter"):"/utils/dotprompt_json_converter",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e)},body:o});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}return await r.json()}catch(e){throw console.error("Failed to convert prompt file:",e),e}},tG=async(e,t,o)=>{try{let a=s?"".concat(s,"/prompts/").concat(t):"/prompts/".concat(t),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}return await r.json()}catch(e){throw console.error("Failed to patch prompt:",e),e}},tJ=async(e,t)=>{try{let o=s?"".concat(s,"/guardrails"):"/guardrails",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({guardrail:t})});if(!a.ok){let e=await a.text();throw m(e),Error(e)}let r=await a.json();return console.log("Create guardrail response:",r),r}catch(e){throw console.error("Failed to create guardrail:",e),e}},tA=async(e,t,o)=>{try{let a=s?"".concat(s,"/spend/logs/ui/").concat(t,"?start_date=").concat(encodeURIComponent(o)):"/spend/logs/ui/".concat(t,"?start_date=").concat(encodeURIComponent(o));console.log("Fetching log details from:",a);let r=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("Fetched log details:",n),n}catch(e){throw console.error("Failed to fetch log details:",e),e}},tU=async e=>{try{let t=s?"".concat(s,"/get/internal_user_settings"):"/get/internal_user_settings";console.log("Fetching SSO settings from:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched SSO settings:",a),a}catch(e){throw console.error("Failed to fetch SSO settings:",e),e}},tR=async(e,t)=>{try{let o=s?"".concat(s,"/update/internal_user_settings"):"/update/internal_user_settings";console.log("Updating internal user settings:",t);let a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();throw m(e),Error(e)}let r=await a.json();return console.log("Updated internal user settings:",r),n.Z.success("Internal user settings updated successfully"),r}catch(e){throw console.error("Failed to update internal user settings:",e),e}},tI=async e=>{try{let t=s?"".concat(s,"/v1/mcp/server"):"/v1/mcp/server";console.log("Fetching MCP servers from:",t);let o=await fetch(t,{method:p.GET,headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched MCP servers:",a),a}catch(e){throw console.error("Failed to fetch MCP servers:",e),e}},tM=async e=>{try{let t=s?"".concat(s,"/v1/mcp/access_groups"):"/v1/mcp/access_groups";console.log("Fetching MCP access groups from:",t);let o=await fetch(t,{method:p.GET,headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched MCP access groups:",a),a.access_groups||[]}catch(e){throw console.error("Failed to fetch MCP access groups:",e),e}},tz=async(e,t)=>{try{console.log("Form Values in createMCPServer:",t);let o=s?"".concat(s,"/v1/mcp/server"):"/v1/mcp/server",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},tL=async(e,t)=>{try{let o=s?"".concat(s,"/v1/mcp/server"):"/v1/mcp/server",a=await fetch(o,{method:"PUT",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to update MCP server:",e),e}},tD=async(e,t)=>{try{let o=(s?"".concat(s):"")+"/v1/mcp/server/".concat(t);console.log("in deleteMCPServer:",t);let a=await fetch(o,{method:p.DELETE,headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}}catch(e){throw console.error("Failed to delete key:",e),e}},tV=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/mcp-rest/tools/list?server_id=").concat(t):"/mcp-rest/tools/list?server_id=".concat(t);console.log("Fetching MCP tools from:",r);let n={[f]:"Bearer ".concat(e),"Content-Type":"application/json"};a&&o?n["x-mcp-".concat(a,"-authorization")]=o:o&&(n[w]=o);let l=await fetch(r,{method:"GET",headers:n}),c=await l.json();if(console.log("Fetched MCP tools response:",c),!l.ok){if(c.error&&c.message)throw Error(c.message);throw Error("Failed to fetch MCP tools")}return c}catch(e){return console.error("Failed to fetch MCP tools:",e),{tools:[],error:"network_error",message:e instanceof Error?e.message:"Failed to fetch MCP tools"}}},tZ=async(e,t,o,a,r)=>{try{let n=s?"".concat(s,"/mcp-rest/tools/call"):"/mcp-rest/tools/call";console.log("Calling MCP tool:",t,"with arguments:",o);let l={[f]:"Bearer ".concat(e),"Content-Type":"application/json"};r?l["x-mcp-".concat(r,"-authorization")]=a:l[w]=a;let c=await fetch(n,{method:"POST",headers:l,body:JSON.stringify({name:t,arguments:o})});if(!c.ok){let e="Network response was not ok",t=null,o=await c.text();try{let a=JSON.parse(o);a.detail?"string"==typeof a.detail?e=a.detail:"object"==typeof a.detail&&(e=a.detail.message||a.detail.error||"An error occurred",t=a.detail):e=a.message||a.error||e}catch(t){console.error("Failed to parse JSON error response:",t),o&&(e=o)}let a=Error(e);throw a.status=c.status,a.statusText=c.statusText,a.details=t,m(e),a}let i=await c.json();return console.log("MCP tool call response:",i),i}catch(e){throw console.error("Failed to call MCP tool:",e),console.error("Error type:",typeof e),e instanceof Error&&(console.error("Error message:",e.message),console.error("Error stack:",e.stack)),e}},tq=async(e,t)=>{try{let o=s?"".concat(s,"/tag/new"):"/tag/new",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();await m(e);return}return await a.json()}catch(e){throw console.error("Error creating tag:",e),e}},tH=async(e,t)=>{try{let o=s?"".concat(s,"/tag/update"):"/tag/update",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();await m(e);return}return await a.json()}catch(e){throw console.error("Error updating tag:",e),e}},tW=async(e,t)=>{try{let o=s?"".concat(s,"/tag/info"):"/tag/info",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({names:t})});if(!a.ok){let e=await a.text();return await m(e),{}}return await a.json()}catch(e){throw console.error("Error getting tag info:",e),e}},tY=async e=>{try{let t=s?"".concat(s,"/tag/list"):"/tag/list",o=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e)}});if(!o.ok){let e=await o.text();return await m(e),{}}return await o.json()}catch(e){throw console.error("Error listing tags:",e),e}},tK=async(e,t)=>{try{let o=s?"".concat(s,"/tag/delete"):"/tag/delete",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({name:t})});if(!a.ok){let e=await a.text();await m(e);return}return await a.json()}catch(e){throw console.error("Error deleting tag:",e),e}},t$=async e=>{try{let t=s?"".concat(s,"/get/default_team_settings"):"/get/default_team_settings";console.log("Fetching default team settings from:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched default team settings:",a),a}catch(e){throw console.error("Failed to fetch default team settings:",e),e}},tQ=async(e,t)=>{try{let o=s?"".concat(s,"/update/default_team_settings"):"/update/default_team_settings";console.log("Updating default team settings:",t);let a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Updated default team settings:",r),n.Z.success("Default team settings updated successfully"),r}catch(e){throw console.error("Failed to update default team settings:",e),e}},tX=async(e,t)=>{try{let o=s?"".concat(s,"/team/permissions_list?team_id=").concat(t):"/team/permissions_list?team_id=".concat(t),a=await fetch(o,{method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Team permissions response:",r),r}catch(e){throw console.error("Failed to get team permissions:",e),e}},t0=async(e,t,o)=>{try{let a=s?"".concat(s,"/team/permissions_update"):"/team/permissions_update",r=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({team_id:t,team_member_permissions:o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("Team permissions response:",n),n}catch(e){throw console.error("Failed to update team permissions:",e),e}},t1=async(e,t)=>{try{let o=s?"".concat(s,"/spend/logs/session/ui?session_id=").concat(encodeURIComponent(t)):"/spend/logs/session/ui?session_id=".concat(encodeURIComponent(t)),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to fetch session logs:",e),e}},t2=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/new"):"/vector_store/new",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to create vector store")}return await a.json()}catch(e){throw console.error("Error creating vector store:",e),e}},t4=async function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]&&arguments[2];try{let t=s?"".concat(s,"/vector_store/list"):"/vector_store/list",o=await fetch(t,{method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)}});if(!o.ok){let e=await o.json();throw Error(e.detail||"Failed to list vector stores")}return await o.json()}catch(e){throw console.error("Error listing vector stores:",e),e}},t3=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/delete"):"/vector_store/delete",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({vector_store_id:t})});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to delete vector store")}return await a.json()}catch(e){throw console.error("Error deleting vector store:",e),e}},t5=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/info"):"/vector_store/info",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({vector_store_id:t})});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to get vector store info")}return await a.json()}catch(e){throw console.error("Error getting vector store info:",e),e}},t6=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/update"):"/vector_store/update",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to update vector store")}return await a.json()}catch(e){throw console.error("Error updating vector store:",e),e}},t7=async e=>{try{let t=s?"".concat(s,"/email/event_settings"):"/email/event_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to get email event settings")}let a=await o.json();return console.log("Email event settings response:",a),a}catch(e){throw console.error("Failed to get email event settings:",e),e}},t9=async(e,t)=>{try{let o=s?"".concat(s,"/email/event_settings"):"/email/event_settings",a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();throw m(e),Error("Failed to update email event settings")}let r=await a.json();return console.log("Update email event settings response:",r),r}catch(e){throw console.error("Failed to update email event settings:",e),e}},t8=async e=>{try{let t=s?"".concat(s,"/email/event_settings/reset"):"/email/event_settings/reset",o=await fetch(t,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to reset email event settings")}let a=await o.json();return console.log("Reset email event settings response:",a),a}catch(e){throw console.error("Failed to reset email event settings:",e),e}},oe=async(e,t)=>{try{let o=s?"".concat(s,"/guardrails/").concat(t):"/guardrails/".concat(t),a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw m(e),Error(e)}let r=await a.json();return console.log("Delete guardrail response:",r),r}catch(e){throw console.error("Failed to delete guardrail:",e),e}},ot=async e=>{try{let t=s?"".concat(s,"/guardrails/ui/add_guardrail_settings"):"/guardrails/ui/add_guardrail_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to get guardrail UI settings")}let a=await o.json();return console.log("Guardrail UI settings response:",a),a}catch(e){throw console.error("Failed to get guardrail UI settings:",e),e}},oo=async e=>{try{let t=s?"".concat(s,"/guardrails/ui/provider_specific_params"):"/guardrails/ui/provider_specific_params",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to get guardrail provider specific parameters")}let a=await o.json();return console.log("Guardrail provider specific params response:",a),a}catch(e){throw console.error("Failed to get guardrail provider specific parameters:",e),e}},oa=async(e,t)=>{try{let o=s?"".concat(s,"/guardrails/").concat(t,"/info"):"/guardrails/".concat(t,"/info"),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw m(e),Error("Failed to get guardrail info")}let r=await a.json();return console.log("Guardrail info response:",r),r}catch(e){throw console.error("Failed to get guardrail info:",e),e}},or=async(e,t,o)=>{try{let a=s?"".concat(s,"/guardrails/").concat(t):"/guardrails/".concat(t),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.text();throw m(e),Error("Failed to update guardrail")}let n=await r.json();return console.log("Update guardrail response:",n),n}catch(e){throw console.error("Failed to update guardrail:",e),e}},on=async e=>{try{let t=s?"".concat(s,"/get/sso_settings"):"/get/sso_settings";console.log("Fetching SSO configuration from:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched SSO configuration:",a),a}catch(e){throw console.error("Failed to fetch SSO configuration:",e),e}},ol=async(e,t)=>{try{let o=s?"".concat(s,"/update/sso_settings"):"/update/sso_settings";console.log("Updating SSO configuration:",t);let a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Updated SSO configuration:",r),r}catch(e){throw console.error("Failed to update SSO configuration:",e),e}},oc=async(e,t,o,a,r)=>{try{let t=s?"".concat(s,"/audit"):"/audit",o=new URLSearchParams;a&&o.append("page",a.toString()),r&&o.append("page_size",r.toString());let n=o.toString();n&&(t+="?".concat(n));let l=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}return await l.json()}catch(e){throw console.error("Failed to fetch audit logs:",e),e}},oi=async e=>{try{let t=s?"".concat(s,"/user/available_users"):"/user/available_users",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e)}});if(!o.ok){if(404===o.status)return null;let e=await o.text();throw m(e),Error("Network response was not ok")}return await o.json()}catch(e){throw console.error("Failed to fetch remaining users:",e),e}},os=async(e,t,o)=>{try{let a=s?"".concat(s,"/config/pass_through_endpoint/").concat(encodeURIComponent(t)):"/config/pass_through_endpoint/".concat(encodeURIComponent(t)),r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return n.Z.success("Pass through endpoint updated successfully"),l}catch(e){throw console.error("Failed to update pass through endpoint:",e),e}},od=async(e,t)=>{try{let o=s?"".concat(s,"/config/pass_through_endpoint?endpoint_id=").concat(encodeURIComponent(t)):"/config/pass_through_endpoint?endpoint_id=".concat(encodeURIComponent(t)),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=(await a.json()).endpoints;if(!r||0===r.length)throw Error("Pass through endpoint not found");return r[0]}catch(e){throw console.error("Failed to get pass through endpoint info:",e),e}},ou=async(e,t)=>{try{let o=s?"".concat(s,"/config/callback/delete"):"/config/callback/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({callback_name:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to delete specific callback:",e),e}},op=async e=>{let t=u(),o=await fetch("".concat(t,"/v1/mcp/tools"),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok)throw Error("HTTP error! status: ".concat(o.status));return await o.json()},oh=async(e,t)=>{try{console.log("Testing MCP connection with config:",JSON.stringify(t));let a=s?"".concat(s,"/mcp-rest/test/connection"):"/mcp-rest/test/connection",r=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",[f]:"Bearer ".concat(e)},body:JSON.stringify(t)}),n=r.headers.get("content-type");if(!n||!n.includes("application/json")){let e=await r.text();throw console.error("Received non-JSON response:",e),Error("Received non-JSON response (".concat(r.status,": ").concat(r.statusText,"). Check network tab for details."))}let l=await r.json();if(!r.ok||"error"===l.status){if("error"===l.status);else{var o;return{status:"error",message:(null===(o=l.error)||void 0===o?void 0:o.message)||"MCP connection test failed: ".concat(r.status," ").concat(r.statusText)}}}return l}catch(e){throw console.error("MCP connection test error:",e),e}},og=async(e,t)=>{try{console.log("Testing MCP tools list with config:",JSON.stringify(t));let o=s?"".concat(s,"/mcp-rest/test/tools/list"):"/mcp-rest/test/tools/list",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",[f]:"Bearer ".concat(e)},body:JSON.stringify(t)}),r=a.headers.get("content-type");if(!r||!r.includes("application/json")){let e=await a.text();throw console.error("Received non-JSON response:",e),Error("Received non-JSON response (".concat(a.status,": ").concat(a.statusText,"). Check network tab for details."))}let n=await a.json();if((!a.ok||n.error)&&!n.error)return{tools:[],error:"request_failed",message:n.message||"MCP tools list failed: ".concat(a.status," ").concat(a.statusText)};return n}catch(e){throw console.error("MCP tools list test error:",e),e}},om=async(e,t,o)=>{try{let a="".concat(u(),"/v1/vector_stores/").concat(t,"/search"),r=await fetch(a,{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({query:o})});if(!r.ok){let e=await r.text();return await m(e),null}return await r.json()}catch(e){throw console.error("Error testing vector store search:",e),e}},of=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:50,n=arguments.length>5?arguments[5]:void 0;try{let l=s?"".concat(s,"/tag/user-agent/analytics"):"/tag/user-agent/analytics",c=new URLSearchParams,i=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)};c.append("start_date",i(t)),c.append("end_date",i(o)),c.append("page",a.toString()),c.append("page_size",r.toString()),n&&c.append("user_agent_filter",n);let d=c.toString();d&&(l+="?".concat(d));let u=await fetch(l,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!u.ok){let e=await u.json(),t=ov(e);throw m(t),Error(t)}return await u.json()}catch(e){throw console.error("Failed to fetch user agent analytics:",e),e}},ow=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/dau"):"/tag/dau",n=new URLSearchParams;n.append("end_date",(e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)})(t)),a&&a.length>0?a.forEach(e=>{n.append("tag_filters",e)}):o&&n.append("tag_filter",o);let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch DAU:",e),e}},oy=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/wau"):"/tag/wau",n=new URLSearchParams;n.append("end_date",(e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)})(t)),a&&a.length>0?a.forEach(e=>{n.append("tag_filters",e)}):o&&n.append("tag_filter",o);let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch WAU:",e),e}},oj=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/mau"):"/tag/mau",n=new URLSearchParams;n.append("end_date",(e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)})(t)),a&&a.length>0?a.forEach(e=>{n.append("tag_filters",e)}):o&&n.append("tag_filter",o);let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch MAU:",e),e}},o_=async e=>{try{let t=s?"".concat(s,"/tag/distinct"):"/tag/distinct",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to fetch distinct tags:",e),e}},oC=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/summary"):"/tag/summary",n=new URLSearchParams,l=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)};n.append("start_date",l(t)),n.append("end_date",l(o)),a&&a.length>0&&a.forEach(e=>{n.append("tag_filters",e)});let c=n.toString();c&&(r+="?".concat(c));let i=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}return await i.json()}catch(e){throw console.error("Failed to fetch user agent summary:",e),e}},ok=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:50,a=arguments.length>3?arguments[3]:void 0;try{let r=s?"".concat(s,"/tag/user-agent/per-user-analytics"):"/tag/user-agent/per-user-analytics",n=new URLSearchParams;n.append("page",t.toString()),n.append("page_size",o.toString()),a&&a.length>0&&a.forEach(e=>{n.append("tag_filters",e)});let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch per-user analytics:",e),e}},ov=e=>(null==e?void 0:e.error)&&(e.error.message||e.error)||(null==e?void 0:e.message)||(null==e?void 0:e.detail)||(null==e?void 0:e.error)||JSON.stringify(e)},85968:function(e,t,o){o.d(t,{O:function(){return a}});let a=e=>{if(!e)return"An unknown error occurred";if("string"==typeof e)return e;if(e.message)try{let t=JSON.parse(e.message);if(t.error&&t.error.message)return t.error.message;return"string"==typeof t?t:JSON.stringify(t,null,2)}catch(t){return e.message}if(e.response&&e.response.data){if("string"==typeof e.response.data)return e.response.data;if(e.response.data.message)return e.response.data.message;if(e.response.data.error)return"string"==typeof e.response.data.error?e.response.data.error:e.response.data.error.message||JSON.stringify(e.response.data.error)}return String(e)}},3914:function(e,t,o){function a(){let e=window.location.hostname,t=["Lax","Strict","None"];["/","/ui"].forEach(o=>{document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,";"),document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,"; domain=").concat(e,";"),t.forEach(t=>{let a="None"===t?" Secure;":"";document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,"; SameSite=").concat(t,";").concat(a),document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,"; domain=").concat(e,"; SameSite=").concat(t,";").concat(a)})}),console.log("After clearing cookies:",document.cookie)}function r(e){let t=document.cookie.split("; ").find(t=>t.startsWith(e+"="));return t?t.split("=")[1]:null}o.d(t,{b:function(){return a},e:function(){return r}})}}]); \ No newline at end of file +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[154],{49169:function(e,t,o){o.d(t,{o:function(){return a.Z}});var a=o(49566)},63610:function(e,t,o){o.d(t,{d:function(){return h}});var a=o(57437),r=o(2265),n=o(64482),l=o(52787),c=o(20577),i=o(13634),s=o(49169),d=o(15424),u=o(89970),p=o(19250);let h=["metadata","config","enforced_params","aliases"],g=(e,t)=>h.includes(e)||"json"===t.format,m=e=>{if(!e)return!0;try{return JSON.parse(e),!0}catch(e){return!1}},f=(e,t,o)=>{let a={max_budget:"Enter maximum budget in USD (e.g., 100.50)",budget_duration:"Select a time period for budget reset",tpm_limit:"Enter maximum tokens per minute (whole number)",rpm_limit:"Enter maximum requests per minute (whole number)",duration:"Enter duration (e.g., 30s, 24h, 7d)",metadata:'Enter JSON object with key-value pairs\nExample: {"team": "research", "project": "nlp"}',config:'Enter configuration as JSON object\nExample: {"setting": "value"}',permissions:"Enter comma-separated permission strings",enforced_params:'Enter parameters as JSON object\nExample: {"param": "value"}',blocked:"Enter true/false or specific block conditions",aliases:'Enter aliases as JSON object\nExample: {"alias1": "value1", "alias2": "value2"}',models:"Select one or more model names",key_alias:"Enter a unique identifier for this key",tags:"Enter comma-separated tag strings"}[e]||({string:"Text input",number:"Numeric input",integer:"Whole number input",boolean:"True/False value"})[o]||"Text input";return g(e,t)?"".concat(a,"\nMust be valid JSON format"):t.enum?"Select from available options\nAllowed values: ".concat(t.enum.join(", ")):a};t.Z=e=>{let{schemaComponent:t,excludedFields:o=[],form:h,overrideLabels:w={},overrideTooltips:y={},customValidation:j={},defaultValues:_={}}=e,[C,k]=(0,r.useState)(null),[v,T]=(0,r.useState)(null);(0,r.useEffect)(()=>{(async()=>{try{let e=(await (0,p.getOpenAPISchema)()).components.schemas[t];if(!e)throw Error('Schema component "'.concat(t,'" not found'));k(e);let a={};Object.keys(e.properties).filter(e=>!o.includes(e)&&void 0!==_[e]).forEach(e=>{a[e]=_[e]}),h.setFieldsValue(a)}catch(e){console.error("Schema fetch error:",e),T(e instanceof Error?e.message:"Failed to fetch schema")}})()},[t,h,o]);let E=e=>{if(e.type)return e.type;if(e.anyOf){let t=e.anyOf.map(e=>e.type);if(t.includes("number")||t.includes("integer"))return"number";t.includes("string")}return"string"},S=(e,t)=>{var o;let r;let p=E(t),h=null==C?void 0:null===(o=C.required)||void 0===o?void 0:o.includes(e),k=w[e]||t.title||e,v=y[e]||t.description,T=[];h&&T.push({required:!0,message:"".concat(k," is required")}),j[e]&&T.push({validator:j[e]}),g(e,t)&&T.push({validator:async(e,t)=>{if(t&&!m(t))throw Error("Please enter valid JSON")}});let S=v?(0,a.jsxs)("span",{children:[k," ",(0,a.jsx)(u.Z,{title:v,children:(0,a.jsx)(d.Z,{style:{marginLeft:"4px"}})})]}):k;return r=g(e,t)?(0,a.jsx)(n.default.TextArea,{rows:4,placeholder:"Enter as JSON",className:"font-mono"}):t.enum?(0,a.jsx)(l.default,{children:t.enum.map(e=>(0,a.jsx)(l.default.Option,{value:e,children:e},e))}):"number"===p||"integer"===p?(0,a.jsx)(c.Z,{style:{width:"100%"},precision:"integer"===p?0:void 0}):"duration"===e?(0,a.jsx)(s.o,{placeholder:"eg: 30s, 30h, 30d"}):(0,a.jsx)(s.o,{placeholder:v||""}),(0,a.jsx)(i.Z.Item,{label:S,name:e,className:"mt-8",rules:T,initialValue:_[e],help:(0,a.jsx)("div",{className:"text-xs text-gray-500",children:f(e,t,p)}),children:r},e)};return v?(0,a.jsxs)("div",{className:"text-red-500",children:["Error: ",v]}):(null==C?void 0:C.properties)?(0,a.jsx)("div",{children:Object.entries(C.properties).filter(e=>{let[t]=e;return!o.includes(t)}).map(e=>{let[t,o]=e;return S(t,o)})}):null}},9114:function(e,t,o){var a=o(2265),r=o(57271),n=o(85968);function l(){return"topRight"}function c(e,t){var o;return"string"==typeof e?{message:t,description:e}:{message:null!==(o=e.message)&&void 0!==o?o:t,...e}}function i(e){return"number"==typeof e?e:"string"==typeof e&&/^\d+$/.test(e)?parseInt(e,10):void 0}let s=["invalid api key","invalid authorization header format","authentication error","invalid proxy server token","invalid jwt token","invalid jwt submitted","unauthorized access to metrics endpoint"],d=["admin-only endpoint","not allowed to access model","user does not have permission","access forbidden","invalid credentials used to access ui","user not allowed to access proxy"],u=["db not connected","database not initialized","no db connected","prisma client not initialized","service unhealthy"],p=["no models configured on proxy","llm router not initialized","no deployments available","no healthy deployment available","not allowed to access model due to tags configuration","invalid model name passed in"],h=["deployment over user-defined ratelimit","crossed tpm / rpm / max parallel request limit","max parallel request limit"],g=["budget exceeded","crossed budget","provider budget"],m=["must be a litellm enterprise user","only be available for liteLLM enterprise users","missing litellm-enterprise package","only available on the docker image","enterprise feature","premium user"],f=["invalid json payload","invalid request type","invalid key format","invalid hash key","invalid sort column","invalid sort order","invalid limit","invalid file type","invalid field","invalid date format"],w=["model not found","model with id","credential not found","user not found","team not found","organization not found","mcp server with id","tool '"],y=["already exists","team member is already in team","user already exists"],j=["violated openai moderation policy","violated jailbreak threshold","violated prompt_injection threshold","violated content safety policy","violated lasso guardrail policy","blocked by pillar security guardrail","violated azure prompt shield guardrail policy","content blocked by model armor","response blocked by model armor","streaming response blocked by model armor","guardrail","moderation"],_=["invalid purpose","service must be specified","invalid response - response.response is none"],C=["cloudzero settings not configured","failed to decrypt cloudzero api key","cloudzero settings not found"],k=["created successfully","updated successfully","deleted successfully","credential created successfully","model added successfully","team created successfully","user created successfully","organization created successfully","cloudzero settings initialized successfully","cloudzero settings updated successfully","cloudzero export completed successfully","mock llm request made","mock slack alert sent","mock email alert sent","spend for all api keys and teams reset successfully","monthlyglobalspend view refreshed","cache cleared successfully","cache set successfully","ip ","deleted successfully"],v=["rate limit reached for deployment","deployment cooldown period active"],T=["this feature is only available for litellm enterprise users","enterprise features are not available","regenerating virtual keys is an enterprise feature","trying to set allowed_routes. this is an enterprise feature"],E=["invalid maximum_spend_logs_retention_interval value","error has invalid or non-convertible code","failed to save health check to database"];t.Z={error(e){var t,o;let a=c(e,"Error");r.ZP.error({...a,placement:null!==(t=a.placement)&&void 0!==t?t:l(),duration:null!==(o=a.duration)&&void 0!==o?o:6})},warning(e){var t,o;let a=c(e,"Warning");r.ZP.warning({...a,placement:null!==(t=a.placement)&&void 0!==t?t:l(),duration:null!==(o=a.duration)&&void 0!==o?o:5})},info(e){var t,o;let a=c(e,"Info");r.ZP.info({...a,placement:null!==(t=a.placement)&&void 0!==t?t:l(),duration:null!==(o=a.duration)&&void 0!==o?o:4})},success(e){var t,o;if(a.isValidElement(e)){r.ZP.success({message:"Success",description:e,placement:l(),duration:3.5});return}let n=c(e,"Success");r.ZP.success({...n,placement:null!==(t=n.placement)&&void 0!==t?t:l(),duration:null!==(o=n.duration)&&void 0!==o?o:3.5})},fromBackend(e,t){var o,a,c,S,b,F,P,O,B,N,x,G;let J=null!==(G=null!==(x=i(null==e?void 0:null===(N=e.response)||void 0===N?void 0:N.status))&&void 0!==x?x:i(null==e?void 0:e.status_code))&&void 0!==G?G:i(null==e?void 0:e.code),A=function(e){var t,o,a,r,l,c,i,s,d,u,p,h;if("string"==typeof e)return e;let g=null!==(h=null!==(p=null!==(u=null!==(d=null!==(s=null==e?void 0:null===(a=e.response)||void 0===a?void 0:null===(o=a.data)||void 0===o?void 0:null===(t=o.error)||void 0===t?void 0:t.message)&&void 0!==s?s:null==e?void 0:null===(l=e.response)||void 0===l?void 0:null===(r=l.data)||void 0===r?void 0:r.message)&&void 0!==d?d:null==e?void 0:null===(i=e.response)||void 0===i?void 0:null===(c=i.data)||void 0===c?void 0:c.error)&&void 0!==u?u:null==e?void 0:e.detail)&&void 0!==p?p:null==e?void 0:e.message)&&void 0!==h?h:e;return(0,n.O)(g)}(e),U={...null!=t?t:{},description:A,placement:null!==(o=null==t?void 0:t.placement)&&void 0!==o?o:l()};if(void 0!==J||e instanceof Error||"string"==typeof e||e&&"object"==typeof e&&("error"in e||"detail"in e)){let e=function(e,t){var o,a,r,n,l;let c=(t||"").toLowerCase();return s.some(e=>c.includes(e))?"Authentication Error":d.some(e=>c.includes(e))?"Access Denied":(null==u?void 0:null===(o=u.some)||void 0===o?void 0:o.call(u,e=>c.includes(e)))||503===e?"Service Unavailable":(null==g?void 0:null===(a=g.some)||void 0===a?void 0:a.call(g,e=>c.includes(e)))?"Budget Exceeded":(null==m?void 0:null===(r=m.some)||void 0===r?void 0:r.call(m,e=>c.includes(e)))?"Feature Unavailable":(null==p?void 0:null===(n=p.some)||void 0===n?void 0:n.call(p,e=>c.includes(e)))?"Routing Error":y.some(e=>c.includes(e))?"Already Exists":j.some(e=>c.includes(e))?"Content Blocked":_.some(e=>c.includes(e))?"Validation Error":C.some(e=>c.includes(e))?"Integration Error":f.some(e=>c.includes(e))?"Validation Error":404===e||c.includes("not found")||w.some(e=>c.includes(e))?"Not Found":429===e||c.includes("rate limit")||c.includes("tpm")||c.includes("rpm")||(null==h?void 0:null===(l=h.some)||void 0===l?void 0:l.call(h,e=>c.includes(e)))?"Rate Limit Exceeded":e&&e>=500?"Server Error":401===e?"Authentication Error":403===e?"Access Denied":c.includes("enterprise")||c.includes("premium")?"Info":e&&e>=400?"Request Error":"Error"}(J,A),o={...U,message:e};if("Rate Limit Exceeded"===e||"Info"===e||"Budget Exceeded"===e||"Feature Unavailable"===e||"Content Blocked"===e||"Integration Error"===e){r.ZP.warning({...o,duration:null!==(a=null==t?void 0:t.duration)&&void 0!==a?a:7});return}if("Server Error"===e){r.ZP.error({...o,duration:null!==(c=null==t?void 0:t.duration)&&void 0!==c?c:8});return}if("Request Error"===e||"Authentication Error"===e||"Access Denied"===e||"Not Found"===e||"Error"===e){r.ZP.error({...o,duration:null!==(S=null==t?void 0:t.duration)&&void 0!==S?S:6});return}r.ZP.info({...o,duration:null!==(b=null==t?void 0:t.duration)&&void 0!==b?b:4});return}let R=function(e){let t=(e||"").toLowerCase();return k.some(e=>t.includes(e))?{kind:"success",title:"Success"}:T.some(e=>t.includes(e))?{kind:"warning",title:"Feature Notice"}:E.some(e=>t.includes(e))?{kind:"warning",title:"Configuration Warning"}:v.some(e=>t.includes(e))?{kind:"warning",title:"Rate Limit"}:null}(A),I={...U,message:null!==(F=null==R?void 0:R.title)&&void 0!==F?F:"Info"};if((null==R?void 0:R.kind)==="success"){r.ZP.success({...I,duration:null!==(P=null==t?void 0:t.duration)&&void 0!==P?P:3.5});return}if((null==R?void 0:R.kind)==="warning"){r.ZP.warning({...I,duration:null!==(O=null==t?void 0:t.duration)&&void 0!==O?O:6});return}r.ZP.info({...I,duration:null!==(B=null==t?void 0:t.duration)&&void 0!==B?B:4})},clear(){r.ZP.destroy()}}},19250:function(e,t,o){o.r(t),o.d(t,{DEFAULT_ORGANIZATION:function(){return h},PredictedSpendLogsCall:function(){return tl},addAllowedIP:function(){return em},adminGlobalActivity:function(){return eJ},adminGlobalActivityExceptions:function(){return eR},adminGlobalActivityExceptionsPerDeployment:function(){return eI},adminGlobalActivityPerModel:function(){return eU},adminGlobalCacheActivity:function(){return eA},adminSpendLogsCall:function(){return eB},adminTopEndUsersCall:function(){return ex},adminTopKeysCall:function(){return eN},adminTopModelsCall:function(){return eM},adminspendByProvider:function(){return eG},alertingSettingsCall:function(){return A},allEndUsersCall:function(){return eb},allTagNamesCall:function(){return eS},availableTeamListCall:function(){return W},budgetCreateCall:function(){return N},budgetDeleteCall:function(){return B},budgetUpdateCall:function(){return x},cachingHealthCheckCall:function(){return tv},callMCPTool:function(){return tZ},cancelModelCostMapReload:function(){return S},claimOnboardingToken:function(){return el},convertPromptFileToJson:function(){return tx},createGuardrailCall:function(){return tJ},createMCPServer:function(){return tz},createPassThroughEndpoint:function(){return tf},createPromptCall:function(){return tO},credentialCreateCall:function(){return eQ},credentialDeleteCall:function(){return e1},credentialGetCall:function(){return e0},credentialListCall:function(){return eX},credentialUpdateCall:function(){return e2},defaultProxyBaseUrl:function(){return c},deleteAllowedIP:function(){return ef},deleteCallback:function(){return ou},deleteConfigFieldSetting:function(){return ty},deleteGuardrailCall:function(){return oe},deleteMCPServer:function(){return tD},deletePassThroughEndpointsCall:function(){return tj},deletePromptCall:function(){return tN},fetchMCPAccessGroups:function(){return tM},fetchMCPServers:function(){return tI},formatDate:function(){return l},getAllowedIPs:function(){return eg},getBudgetList:function(){return ts},getBudgetSettings:function(){return td},getCallbacksCall:function(){return tu},getConfigFieldSetting:function(){return tg},getDefaultTeamSettings:function(){return t$},getEmailEventSettings:function(){return t9},getGeneralSettingsCall:function(){return tp},getGuardrailInfo:function(){return oa},getGuardrailProviderSpecificParams:function(){return oo},getGuardrailUISettings:function(){return ot},getGuardrailsList:function(){return tb},getInternalUserSettings:function(){return tU},getModelCostMapReloadStatus:function(){return b},getOnboardingCredentials:function(){return en},getOpenAPISchema:function(){return k},getPassThroughEndpointInfo:function(){return od},getPassThroughEndpointsCall:function(){return th},getPossibleUserRoles:function(){return eK},getPromptInfo:function(){return tP},getPromptsList:function(){return tF},getProxyBaseUrl:function(){return u},getProxyUISettings:function(){return tS},getPublicModelHubInfo:function(){return C},getRemainingUsers:function(){return oi},getSSOSettings:function(){return on},getTeamPermissionsCall:function(){return tX},getTotalSpendCall:function(){return er},getUiConfig:function(){return _},healthCheckCall:function(){return tC},healthCheckHistoryCall:function(){return tT},individualModelHealthCheckCall:function(){return tk},invitationClaimCall:function(){return J},invitationCreateCall:function(){return G},keyCreateCall:function(){return R},keyCreateServiceAccountCall:function(){return U},keyDeleteCall:function(){return M},keyInfoCall:function(){return ez},keyInfoV1Call:function(){return eD},keyListCall:function(){return eV},keySpendLogsCall:function(){return ev},keyUpdateCall:function(){return e4},latestHealthChecksCall:function(){return tE},listMCPTools:function(){return tV},makeModelGroupPublic:function(){return j},mcpToolsCall:function(){return op},modelAvailableCall:function(){return ek},modelCostMap:function(){return v},modelCreateCall:function(){return F},modelDeleteCall:function(){return O},modelExceptionsCall:function(){return e_},modelHubCall:function(){return eh},modelHubPublicModelsCall:function(){return ep},modelInfoCall:function(){return ed},modelInfoV1Call:function(){return eu},modelMetricsCall:function(){return ew},modelMetricsSlowResponsesCall:function(){return ej},modelPatchUpdateCall:function(){return e5},modelSettingsCall:function(){return P},modelUpdateCall:function(){return e6},organizationCreateCall:function(){return $},organizationDeleteCall:function(){return X},organizationInfoCall:function(){return K},organizationListCall:function(){return Y},organizationMemberAddCall:function(){return tt},organizationMemberDeleteCall:function(){return to},organizationMemberUpdateCall:function(){return ta},organizationUpdateCall:function(){return Q},patchPromptCall:function(){return tG},perUserAnalyticsCall:function(){return ok},proxyBaseUrl:function(){return s},regenerateKeyCall:function(){return ec},reloadModelCostMap:function(){return T},resetEmailEventSettings:function(){return t8},scheduleModelCostMapReload:function(){return E},serverRootPath:function(){return i},serviceHealthCheck:function(){return ti},sessionSpendLogsCall:function(){return t1},setCallbacksCall:function(){return t_},setGlobalLitellmHeaderName:function(){return y},slackBudgetAlertsHealthCheck:function(){return tc},spendUsersCall:function(){return eZ},streamingModelMetricsCall:function(){return ey},tagCreateCall:function(){return tq},tagDailyActivityCall:function(){return eo},tagDauCall:function(){return ow},tagDeleteCall:function(){return tK},tagDistinctCall:function(){return o_},tagInfoCall:function(){return tW},tagListCall:function(){return tY},tagMauCall:function(){return oj},tagUpdateCall:function(){return tH},tagWauCall:function(){return oy},tagsSpendLogsCall:function(){return eE},teamBulkMemberAddCall:function(){return e7},teamCreateCall:function(){return e$},teamDailyActivityCall:function(){return ea},teamDeleteCall:function(){return L},teamInfoCall:function(){return Z},teamListCall:function(){return H},teamMemberAddCall:function(){return e9},teamMemberDeleteCall:function(){return te},teamMemberUpdateCall:function(){return e8},teamPermissionsUpdateCall:function(){return t0},teamSpendLogsCall:function(){return eT},teamUpdateCall:function(){return e3},testConnectionRequest:function(){return eL},testMCPConnectionRequest:function(){return oh},testMCPToolsListRequest:function(){return og},transformRequestCall:function(){return ee},uiAuditLogsCall:function(){return oc},uiSpendLogDetailsCall:function(){return tA},uiSpendLogsCall:function(){return eO},updateConfigFieldSetting:function(){return tw},updateDefaultTeamSettings:function(){return tQ},updateEmailEventSettings:function(){return t7},updateGuardrailCall:function(){return or},updateInternalUserSettings:function(){return tR},updateMCPServer:function(){return tL},updatePassThroughEndpoint:function(){return os},updatePassThroughFieldSetting:function(){return tm},updatePromptCall:function(){return tB},updateSSOSettings:function(){return ol},updateUsefulLinksCall:function(){return eC},userAgentAnalyticsCall:function(){return of},userAgentSummaryCall:function(){return oC},userBulkUpdateUserCall:function(){return tn},userCreateCall:function(){return I},userDailyActivityAggregatedCall:function(){return eW},userDailyActivityCall:function(){return et},userDeleteCall:function(){return z},userFilterUICall:function(){return eF},userGetAllUsersCall:function(){return eY},userGetRequesedtModelsCall:function(){return eH},userInfoCall:function(){return V},userListCall:function(){return D},userRequestModelCall:function(){return eq},userSpendLogsCall:function(){return eP},userUpdateUserCall:function(){return tr},v2TeamListCall:function(){return q},vectorStoreCreateCall:function(){return t2},vectorStoreDeleteCall:function(){return t3},vectorStoreInfoCall:function(){return t5},vectorStoreListCall:function(){return t4},vectorStoreSearchCall:function(){return om},vectorStoreUpdateCall:function(){return t6}});var a=o(42264),r=o(63610),n=o(9114);let l=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)},c=null,i="/",s=null;console.log=function(){};let d=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=window.location.origin,a=t||o;console.log("proxyBaseUrl:",s),console.log("serverRootPath:",e),e.length>0&&!a.endsWith(e)&&"/"!=e&&(a+=e,s=a),console.log("Updated proxyBaseUrl:",s)},u=()=>s||window.location.origin,p={GET:"GET",DELETE:"DELETE"},h="default_organization",g=0,m=async e=>{let t=Date.now();t-g>6e4?(e.includes("Authentication Error - Expired Key")&&(n.Z.info("UI Session Expired. Logging out."),g=t,document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;",window.location.href=window.location.pathname),g=t):console.log("Error suppressed to prevent spam:",e)},f="Authorization",w="x-mcp-auth";function y(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Authorization";console.log("setGlobalLitellmHeaderName: ".concat(e)),f=e}let j=async(e,t)=>{let o=s?"".concat(s,"/model_group/make_public"):"/model_group/make_public";return(await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({model_groups:t})})).json()},_=async()=>{console.log("Getting UI config");let e=await fetch(c?"".concat(c,"/litellm/.well-known/litellm-ui-config"):"/litellm/.well-known/litellm-ui-config"),t=await e.json();return console.log("jsonData in getUiConfig:",t),d(t.server_root_path,t.proxy_base_url),t},C=async()=>{let e=await fetch(c?"".concat(c,"/public/model_hub/info"):"/public/model_hub/info");return await e.json()},k=async()=>{let e=s?"".concat(s,"/openapi.json"):"/openapi.json",t=await fetch(e);return await t.json()},v=async e=>{try{let t=s?"".concat(s,"/get/litellm_model_cost_map"):"/get/litellm_model_cost_map",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),a=await o.json();return console.log("received litellm model cost data: ".concat(a)),a}catch(e){throw console.error("Failed to get model cost map:",e),e}},T=async e=>{try{let t=s?"".concat(s,"/reload/model_cost_map"):"/reload/model_cost_map",o=await fetch(t,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),a=await o.json();return console.log("Model cost map reload response: ".concat(a)),a}catch(e){throw console.error("Failed to reload model cost map:",e),e}},E=async(e,t)=>{try{let o=s?"".concat(s,"/schedule/model_cost_map_reload?hours=").concat(t):"/schedule/model_cost_map_reload?hours=".concat(t),a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),r=await a.json();return console.log("Schedule model cost map reload response: ".concat(r)),r}catch(e){throw console.error("Failed to schedule model cost map reload:",e),e}},S=async e=>{try{let t=s?"".concat(s,"/schedule/model_cost_map_reload"):"/schedule/model_cost_map_reload",o=await fetch(t,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}}),a=await o.json();return console.log("Cancel model cost map reload response: ".concat(a)),a}catch(e){throw console.error("Failed to cancel model cost map reload:",e),e}},b=async e=>{try{let t=s?"".concat(s,"/schedule/model_cost_map_reload/status"):"/schedule/model_cost_map_reload/status";console.log("Fetching status from URL:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){console.error("Status request failed with status: ".concat(o.status));let e=await o.text();throw console.error("Error response:",e),Error("HTTP ".concat(o.status,": ").concat(e))}let a=await o.json();return console.log("Model cost map reload status:",a),a}catch(e){throw console.error("Failed to get model cost map reload status:",e),e}},F=async(e,t)=>{try{let o=s?"".concat(s,"/model/new"):"/model/new",r=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return console.log("API Response:",l),a.ZP.destroy(),n.Z.success("Model ".concat(t.model_name," created successfully")),l}catch(e){throw console.error("Failed to create key:",e),e}},P=async e=>{try{let t=s?"".concat(s,"/model/settings"):"/model/settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){console.error("Failed to get model settings:",e)}},O=async(e,t)=>{console.log("model_id in model delete call: ".concat(t));try{let o=s?"".concat(s,"/model/delete"):"/model/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},B=async(e,t)=>{if(console.log("budget_id in budget delete call: ".concat(t)),null!=e)try{let o=s?"".concat(s,"/budget/delete"):"/budget/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({id:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},N=async(e,t)=>{try{console.log("Form Values in budgetCreateCall:",t),console.log("Form Values after check:",t);let o=s?"".concat(s,"/budget/new"):"/budget/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},x=async(e,t)=>{try{console.log("Form Values in budgetUpdateCall:",t),console.log("Form Values after check:",t);let o=s?"".concat(s,"/budget/update"):"/budget/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},G=async(e,t)=>{try{let o=s?"".concat(s,"/invitation/new"):"/invitation/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},J=async(e,t)=>{try{console.log("Form Values in invitationCreateCall:",t),console.log("Form Values after check:",t);let o=s?"".concat(s,"/invitation/claim"):"/invitation/claim",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},A=async e=>{try{let t=s?"".concat(s,"/alerting/settings"):"/alerting/settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},U=async(e,t)=>{try{for(let e of(console.log("Form Values in keyCreateServiceAccountCall:",t),t.description&&(t.metadata||(t.metadata={}),t.metadata.description=t.description,delete t.description,t.metadata=JSON.stringify(t.metadata)),r.d))if(t[e]){console.log("formValues.".concat(e,":"),t[e]);try{t[e]=JSON.parse(t[e])}catch(t){throw Error("Failed to parse ".concat(e,": ")+t)}}console.log("Form Values after check:",t);let o=s?"".concat(s,"/key/service-account/generate"):"/key/service-account/generate",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let n=await a.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},R=async(e,t,o)=>{try{for(let e of(console.log("Form Values in keyCreateCall:",o),o.description&&(o.metadata||(o.metadata={}),o.metadata.description=o.description,delete o.description,o.metadata=JSON.stringify(o.metadata)),r.d))if(o[e]){console.log("formValues.".concat(e,":"),o[e]);try{o[e]=JSON.parse(o[e])}catch(t){throw Error("Failed to parse ".concat(e,": ")+t)}}console.log("Form Values after check:",o);let a=s?"".concat(s,"/key/generate"):"/key/generate",n=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:t,...o})});if(!n.ok){let e=await n.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let l=await n.json();return console.log("API Response:",l),l}catch(e){throw console.error("Failed to create key:",e),e}},I=async(e,t,o)=>{try{if(console.log("Form Values in keyCreateCall:",o),o.description&&(o.metadata||(o.metadata={}),o.metadata.description=o.description,delete o.description,o.metadata=JSON.stringify(o.metadata)),o.auto_create_key=!1,o.metadata){console.log("formValues.metadata:",o.metadata);try{o.metadata=JSON.parse(o.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}console.log("Form Values after check:",o);let a=s?"".concat(s,"/user/new"):"/user/new",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_id:t,...o})});if(!r.ok){let e=await r.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},M=async(e,t)=>{try{let o=s?"".concat(s,"/key/delete"):"/key/delete";console.log("in keyDeleteCall:",t);let a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:[t]})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},z=async(e,t)=>{try{let o=s?"".concat(s,"/user/delete"):"/user/delete";console.log("in userDeleteCall:",t);let a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({user_ids:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to delete user(s):",e),e}},L=async(e,t)=>{try{let o=s?"".concat(s,"/team/delete"):"/team/delete";console.log("in teamDeleteCall:",t);let a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_ids:[t]})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to delete key:",e),e}},D=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,c=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,i=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,d=arguments.length>9&&void 0!==arguments[9]?arguments[9]:null;try{let u=s?"".concat(s,"/user/list"):"/user/list";console.log("in userListCall");let p=new URLSearchParams;if(t&&t.length>0){let e=t.join(",");p.append("user_ids",e)}o&&p.append("page",o.toString()),a&&p.append("page_size",a.toString()),r&&p.append("user_email",r),n&&p.append("role",n),l&&p.append("team",l),c&&p.append("sso_user_ids",c),i&&p.append("sort_by",i),d&&p.append("sort_order",d);let h=p.toString();h&&(u+="?".concat(h));let g=await fetch(u,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!g.ok){let e=await g.json(),t=ov(e);throw m(t),Error(t)}let w=await g.json();return console.log("/user/list API Response:",w),w}catch(e){throw console.error("Failed to create key:",e),e}},V=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4?arguments[4]:void 0,n=arguments.length>5?arguments[5]:void 0,l=arguments.length>6&&void 0!==arguments[6]&&arguments[6];console.log("userInfoCall: ".concat(t,", ").concat(o,", ").concat(a,", ").concat(r,", ").concat(n,", ").concat(l));try{let c;if(a){c=s?"".concat(s,"/user/list"):"/user/list";let e=new URLSearchParams;null!=r&&e.append("page",r.toString()),null!=n&&e.append("page_size",n.toString()),c+="?".concat(e.toString())}else c=s?"".concat(s,"/user/info"):"/user/info",("Admin"!==o&&"Admin Viewer"!==o||l)&&t&&(c+="?user_id=".concat(t));console.log("Requesting user data from:",c);let i=await fetch(c,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}let d=await i.json();return console.log("API Response:",d),d}catch(e){throw console.error("Failed to fetch user data:",e),e}},Z=async(e,t)=>{try{let o=s?"".concat(s,"/team/info"):"/team/info";t&&(o="".concat(o,"?team_id=").concat(t)),console.log("in teamInfoCall");let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},q=async function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;arguments.length>5&&void 0!==arguments[5]&&arguments[5],arguments.length>6&&void 0!==arguments[6]&&arguments[6],arguments.length>7&&void 0!==arguments[7]&&arguments[7],arguments.length>8&&void 0!==arguments[8]&&arguments[8];try{let n=s?"".concat(s,"/v2/team/list"):"/v2/team/list";console.log("in teamInfoCall");let l=new URLSearchParams;o&&l.append("user_id",o.toString()),t&&l.append("organization_id",t.toString()),a&&l.append("team_id",a.toString()),r&&l.append("team_alias",r.toString());let c=l.toString();c&&(n+="?".concat(c));let i=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}let d=await i.json();return console.log("/v2/team/list API Response:",d),d}catch(e){throw console.error("Failed to create key:",e),e}},H=async function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{let n=s?"".concat(s,"/team/list"):"/team/list";console.log("in teamInfoCall");let l=new URLSearchParams;o&&l.append("user_id",o.toString()),t&&l.append("organization_id",t.toString()),a&&l.append("team_id",a.toString()),r&&l.append("team_alias",r.toString());let c=l.toString();c&&(n+="?".concat(c));let i=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}let d=await i.json();return console.log("/team/list API Response:",d),d}catch(e){throw console.error("Failed to create key:",e),e}},W=async e=>{try{let t=s?"".concat(s,"/team/available"):"/team/available";console.log("in availableTeamListCall");let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("/team/available_teams API Response:",a),a}catch(e){throw e}},Y=async e=>{try{let t=s?"".concat(s,"/organization/list"):"/organization/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},K=async(e,t)=>{try{let o=s?"".concat(s,"/organization/info"):"/organization/info";t&&(o="".concat(o,"?organization_id=").concat(t)),console.log("in teamInfoCall");let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},$=async(e,t)=>{try{if(console.log("Form Values in organizationCreateCall:",t),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw console.error("Failed to parse metadata:",e),Error("Failed to parse metadata: "+e)}}let o=s?"".concat(s,"/organization/new"):"/organization/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},Q=async(e,t)=>{try{console.log("Form Values in organizationUpdateCall:",t);let o=s?"".concat(s,"/organization/update"):"/organization/update",a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Update Team Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},X=async(e,t)=>{try{let o=s?"".concat(s,"/organization/delete"):"/organization/delete",a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_ids:[t]})});if(!a.ok){let e=await a.text();throw m(e),Error("Error deleting organization: ".concat(e))}return await a.json()}catch(e){throw console.error("Failed to delete organization:",e),e}},ee=async(e,t)=>{try{let o=s?"".concat(s,"/utils/transform_request"):"/utils/transform_request",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create key:",e),e}},et=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;try{let r=s?"".concat(s,"/user/daily/activity"):"/user/daily/activity",n=new URLSearchParams;n.append("start_date",l(t)),n.append("end_date",l(o)),n.append("page_size","1000"),n.append("page",a.toString());let c=n.toString();c&&(r+="?".concat(c));let i=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}return await i.json()}catch(e){throw console.error("Failed to create key:",e),e}},eo=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{let n=s?"".concat(s,"/tag/daily/activity"):"/tag/daily/activity",c=new URLSearchParams;c.append("start_date",l(t)),c.append("end_date",l(o)),c.append("page_size","1000"),c.append("page",a.toString()),r&&c.append("tags",r.join(","));let i=c.toString();i&&(n+="?".concat(i));let d=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=ov(e);throw m(t),Error(t)}return await d.json()}catch(e){throw console.error("Failed to create key:",e),e}},ea=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{let n=s?"".concat(s,"/team/daily/activity"):"/team/daily/activity",c=new URLSearchParams;c.append("start_date",l(t)),c.append("end_date",l(o)),c.append("page_size","1000"),c.append("page",a.toString()),r&&c.append("team_ids",r.join(",")),c.append("exclude_team_ids","litellm-dashboard");let i=c.toString();i&&(n+="?".concat(i));let d=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=ov(e);throw m(t),Error(t)}return await d.json()}catch(e){throw console.error("Failed to create key:",e),e}},er=async e=>{try{let t=s?"".concat(s,"/global/spend"):"/global/spend",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},en=async e=>{try{let t=s?"".concat(s,"/onboarding/get_token"):"/onboarding/get_token";t+="?invite_link=".concat(e);let o=await fetch(t,{method:"GET",headers:{"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},el=async(e,t,o,a)=>{let r=s?"".concat(s,"/onboarding/claim_token"):"/onboarding/claim_token";try{let n=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({invitation_link:t,user_id:o,password:a})});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to delete key:",e),e}},ec=async(e,t,o)=>{try{let a=s?"".concat(s,"/key/").concat(t,"/regenerate"):"/key/".concat(t,"/regenerate"),r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("Regenerate key Response:",n),n}catch(e){throw console.error("Failed to regenerate key:",e),e}},ei=!1,es=null,ed=async(e,t,o)=>{try{console.log("modelInfoCall:",e,t,o);let a=s?"".concat(s,"/v2/model/info"):"/v2/model/info",r=new URLSearchParams;r.append("include_team_models","true"),r.toString()&&(a+="?".concat(r.toString()));let l=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.text();throw e+="error shown=".concat(ei),ei||(e.includes("No model list passed")&&(e="No Models Exist. Click Add Model to get started."),n.Z.info(e),ei=!0,es&&clearTimeout(es),es=setTimeout(()=>{ei=!1},1e4)),Error("Network response was not ok")}let c=await l.json();return console.log("modelInfoCall:",c),c}catch(e){throw console.error("Failed to create key:",e),e}},eu=async(e,t)=>{try{let o=s?"".concat(s,"/v1/model/info"):"/v1/model/info";o+="?litellm_model_id=".concat(t);let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("modelInfoV1Call:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},ep=async()=>{let e=s?"".concat(s,"/public/model_hub"):"/public/model_hub";return(await fetch(e,{method:"GET",headers:{"Content-Type":"application/json"}})).json()},eh=async e=>{try{let t=s?"".concat(s,"/model_group/info"):"/model_group/info",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("modelHubCall:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},eg=async e=>{try{let t=s?"".concat(s,"/get/allowed_ips"):"/get/allowed_ips",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("getAllowedIPs:",a),a.data}catch(e){throw console.error("Failed to get allowed IPs:",e),e}},em=async(e,t)=>{try{let o=s?"".concat(s,"/add/allowed_ip"):"/add/allowed_ip",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({ip:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("addAllowedIP:",r),r}catch(e){throw console.error("Failed to add allowed IP:",e),e}},ef=async(e,t)=>{try{let o=s?"".concat(s,"/delete/allowed_ip"):"/delete/allowed_ip",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({ip:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("deleteAllowedIP:",r),r}catch(e){throw console.error("Failed to delete allowed IP:",e),e}},ew=async(e,t,o,a,r,n,l,c)=>{try{let t=s?"".concat(s,"/model/metrics"):"/model/metrics";a&&(t="".concat(t,"?_selected_model_group=").concat(a,"&startTime=").concat(r,"&endTime=").concat(n,"&api_key=").concat(l,"&customer=").concat(c));let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},ey=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/model/streaming_metrics"):"/model/streaming_metrics";t&&(r="".concat(r,"?_selected_model_group=").concat(t,"&startTime=").concat(o,"&endTime=").concat(a));let n=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}return await n.json()}catch(e){throw console.error("Failed to create key:",e),e}},ej=async(e,t,o,a,r,n,l,c)=>{try{let t=s?"".concat(s,"/model/metrics/slow_responses"):"/model/metrics/slow_responses";a&&(t="".concat(t,"?_selected_model_group=").concat(a,"&startTime=").concat(r,"&endTime=").concat(n,"&api_key=").concat(l,"&customer=").concat(c));let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},e_=async(e,t,o,a,r,n,l,c)=>{try{let t=s?"".concat(s,"/model/metrics/exceptions"):"/model/metrics/exceptions";a&&(t="".concat(t,"?_selected_model_group=").concat(a,"&startTime=").concat(r,"&endTime=").concat(n,"&api_key=").concat(l,"&customer=").concat(c));let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to create key:",e),e}},eC=async(e,t)=>{try{let o=s?"".concat(s,"/model_hub/update_useful_links"):"/model_hub/update_useful_links",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({useful_links:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create key:",e),e}},ek=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=(arguments.length>5&&void 0!==arguments[5]&&arguments[5],arguments.length>6&&void 0!==arguments[6]&&arguments[6]);console.log("in /models calls, globalLitellmHeaderName",f);try{let t=s?"".concat(s,"/models"):"/models",o=new URLSearchParams;o.append("include_model_access_groups","True"),!0===a&&o.append("return_wildcard_routes","True"),!0===n&&o.append("only_model_access_groups","True"),r&&o.append("team_id",r.toString()),o.toString()&&(t+="?".concat(o.toString()));let l=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}return await l.json()}catch(e){throw console.error("Failed to create key:",e),e}},ev=async(e,t)=>{try{let o=s?"".concat(s,"/global/spend/logs"):"/global/spend/logs";console.log("in keySpendLogsCall:",o);let a=await fetch("".concat(o,"?api_key=").concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},eT=async e=>{try{let t=s?"".concat(s,"/global/spend/teams"):"/global/spend/teams";console.log("in teamSpendLogsCall:",t);let o=await fetch("".concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eE=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/spend/tags"):"/global/spend/tags";t&&o&&(r="".concat(r,"?start_date=").concat(t,"&end_date=").concat(o)),a&&(r+="".concat(r,"&tags=").concat(a.join(","))),console.log("in tagsSpendLogsCall:",r);let n=await fetch("".concat(r),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to create key:",e),e}},eS=async e=>{try{let t=s?"".concat(s,"/global/spend/all_tag_names"):"/global/spend/all_tag_names";console.log("in global/spend/all_tag_names call",t);let o=await fetch("".concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eb=async e=>{try{let t=s?"".concat(s,"/global/all_end_users"):"/global/all_end_users";console.log("in global/all_end_users call",t);let o=await fetch("".concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eF=async(e,t)=>{try{let o=s?"".concat(s,"/user/filter/ui"):"/user/filter/ui";t.get("user_email")&&(o+="?user_email=".concat(t.get("user_email"))),t.get("user_id")&&(o+="?user_id=".concat(t.get("user_id")));let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create key:",e),e}},eP=async(e,t,o,a,r,n)=>{try{console.log("user role in spend logs call: ".concat(o));let t=s?"".concat(s,"/spend/logs"):"/spend/logs";t="App Owner"==o?"".concat(t,"?user_id=").concat(a,"&start_date=").concat(r,"&end_date=").concat(n):"".concat(t,"?start_date=").concat(r,"&end_date=").concat(n);let l=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to create key:",e),e}},eO=async(e,t,o,a,r,n,l,c,i,d,u,p,h)=>{try{let g=s?"".concat(s,"/spend/logs/ui"):"/spend/logs/ui",w=new URLSearchParams;t&&w.append("api_key",t),o&&w.append("team_id",o),a&&w.append("request_id",a),r&&w.append("start_date",r),n&&w.append("end_date",n),l&&w.append("page",l.toString()),c&&w.append("page_size",c.toString()),i&&w.append("user_id",i),d&&w.append("end_user",d),u&&w.append("status_filter",u),p&&w.append("model",p),h&&w.append("key_alias",h);let y=w.toString();y&&(g+="?".concat(y));let j=await fetch(g,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!j.ok){let e=await j.json(),t=ov(e);throw m(t),Error(t)}let _=await j.json();return console.log("Spend Logs Response:",_),_}catch(e){throw console.error("Failed to fetch spend logs:",e),e}},eB=async e=>{try{let t=s?"".concat(s,"/global/spend/logs"):"/global/spend/logs",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},eN=async e=>{try{let t=s?"".concat(s,"/global/spend/keys?limit=5"):"/global/spend/keys?limit=5",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},ex=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/spend/end_users"):"/global/spend/end_users",n="";n=t?JSON.stringify({api_key:t,startTime:o,endTime:a}):JSON.stringify({startTime:o,endTime:a});let l={method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:n},c=await fetch(r,l);if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}let i=await c.json();return console.log(i),i}catch(e){throw console.error("Failed to create key:",e),e}},eG=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/spend/provider"):"/global/spend/provider";o&&a&&(r+="?start_date=".concat(o,"&end_date=").concat(a)),t&&(r+="&api_key=".concat(t));let n={method:"GET",headers:{[f]:"Bearer ".concat(e)}},l=await fetch(r,n);if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eJ=async(e,t,o)=>{try{let a=s?"".concat(s,"/global/activity"):"/global/activity";t&&o&&(a+="?start_date=".concat(t,"&end_date=").concat(o));let r={method:"GET",headers:{[f]:"Bearer ".concat(e)}},n=await fetch(a,r);if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eA=async(e,t,o)=>{try{let a=s?"".concat(s,"/global/activity/cache_hits"):"/global/activity/cache_hits";t&&o&&(a+="?start_date=".concat(t,"&end_date=").concat(o));let r={method:"GET",headers:{[f]:"Bearer ".concat(e)}},n=await fetch(a,r);if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eU=async(e,t,o)=>{try{let a=s?"".concat(s,"/global/activity/model"):"/global/activity/model";t&&o&&(a+="?start_date=".concat(t,"&end_date=").concat(o));let r={method:"GET",headers:{[f]:"Bearer ".concat(e)}},n=await fetch(a,r);if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eR=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/activity/exceptions"):"/global/activity/exceptions";t&&o&&(r+="?start_date=".concat(t,"&end_date=").concat(o)),a&&(r+="&model_group=".concat(a));let n={method:"GET",headers:{[f]:"Bearer ".concat(e)}},l=await fetch(r,n);if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eI=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/global/activity/exceptions/deployment"):"/global/activity/exceptions/deployment";t&&o&&(r+="?start_date=".concat(t,"&end_date=").concat(o)),a&&(r+="&model_group=".concat(a));let n={method:"GET",headers:{[f]:"Bearer ".concat(e)}},l=await fetch(r,n);if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log(c),c}catch(e){throw console.error("Failed to fetch spend data:",e),e}},eM=async e=>{try{let t=s?"".concat(s,"/global/spend/models?limit=5"):"/global/spend/models?limit=5",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to create key:",e),e}},ez=async(e,t)=>{try{let o=s?"".concat(s,"/v2/key/info"):"/v2/key/info",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({keys:t})});if(!a.ok){let e=await a.text();if(e.includes("Invalid proxy server token passed"))throw Error("Invalid proxy server token passed");throw m(e),Error("Network response was not ok")}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},eL=async(e,t,o,a)=>{try{console.log("Sending model connection test request:",JSON.stringify(t));let n=s?"".concat(s,"/health/test_connection"):"/health/test_connection",l=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",[f]:"Bearer ".concat(e)},body:JSON.stringify({litellm_params:t,model_info:o,mode:a})}),c=l.headers.get("content-type");if(!c||!c.includes("application/json")){let e=await l.text();throw console.error("Received non-JSON response:",e),Error("Received non-JSON response (".concat(l.status,": ").concat(l.statusText,"). Check network tab for details."))}let i=await l.json();if(!l.ok||"error"===i.status){if("error"===i.status);else{var r;return{status:"error",message:(null===(r=i.error)||void 0===r?void 0:r.message)||"Connection test failed: ".concat(l.status," ").concat(l.statusText)}}}return i}catch(e){throw console.error("Model connection test error:",e),e}},eD=async(e,t)=>{try{console.log("entering keyInfoV1Call");let o=s?"".concat(s,"/key/info"):"/key/info";o="".concat(o,"?key=").concat(t);let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(console.log("response",a),!a.ok){let e=await a.text();m(e),n.Z.fromBackend("Failed to fetch key info - "+e)}let r=await a.json();return console.log("data",r),r}catch(e){throw console.error("Failed to fetch key info:",e),e}},eV=async function(e,t,o,a,r,n,l,c){let i=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,d=arguments.length>9&&void 0!==arguments[9]?arguments[9]:null;try{let u=s?"".concat(s,"/key/list"):"/key/list";console.log("in keyListCall");let p=new URLSearchParams;o&&p.append("team_id",o.toString()),t&&p.append("organization_id",t.toString()),a&&p.append("key_alias",a),n&&p.append("key_hash",n),r&&p.append("user_id",r.toString()),l&&p.append("page",l.toString()),c&&p.append("size",c.toString()),i&&p.append("sort_by",i),d&&p.append("sort_order",d),p.append("return_full_object","true"),p.append("include_team_keys","true"),p.append("include_created_by_keys","true");let h=p.toString();h&&(u+="?".concat(h));let g=await fetch(u,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!g.ok){let e=await g.json(),t=ov(e);throw m(t),Error(t)}let w=await g.json();return console.log("/team/list API Response:",w),w}catch(e){throw console.error("Failed to create key:",e),e}},eZ=async(e,t)=>{try{let o=s?"".concat(s,"/spend/users"):"/spend/users";console.log("in spendUsersCall:",o);let a=await fetch("".concat(o,"?user_id=").concat(t),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to get spend for user",e),e}},eq=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/user/request_model"):"/user/request_model",n=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({models:[t],user_id:o,justification:a})});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log(l),l}catch(e){throw console.error("Failed to create key:",e),e}},eH=async e=>{try{let t=s?"".concat(s,"/user/get_requests"):"/user/get_requests";console.log("in userGetRequesedtModelsCall:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log(a),a}catch(e){throw console.error("Failed to get requested models:",e),e}},eW=async(e,t,o)=>{try{let a=s?"".concat(s,"/user/daily/activity/aggregated"):"/user/daily/activity/aggregated",r=new URLSearchParams,n=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)};r.append("start_date",n(t)),r.append("end_date",n(o));let l=r.toString();l&&(a+="?".concat(l));let c=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch aggregated user daily activity:",e),e}},eY=async(e,t)=>{try{let o=s?"".concat(s,"/user/get_users?role=").concat(t):"/user/get_users?role=".concat(t);console.log("in userGetAllUsersCall:",o);let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to get requested models:",e),e}},eK=async e=>{try{let t=s?"".concat(s,"/user/available_roles"):"/user/available_roles",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("response from user/available_role",a),a}catch(e){throw e}},e$=async(e,t)=>{try{if(console.log("Form Values in teamCreateCall:",t),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}let o=s?"".concat(s,"/team/new"):"/team/new",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},eQ=async(e,t)=>{try{if(console.log("Form Values in credentialCreateCall:",t),t.metadata){console.log("formValues.metadata:",t.metadata);try{t.metadata=JSON.parse(t.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}let o=s?"".concat(s,"/credentials"):"/credentials",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},eX=async e=>{try{let t=s?"".concat(s,"/credentials"):"/credentials";console.log("in credentialListCall");let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("/credentials API Response:",a),a}catch(e){throw console.error("Failed to create key:",e),e}},e0=async(e,t,o)=>{try{let a=s?"".concat(s,"/credentials"):"/credentials";t?a+="/by_name/".concat(t):o&&(a+="/by_model/".concat(o)),console.log("in credentialListCall");let r=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("/credentials API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},e1=async(e,t)=>{try{let o=s?"".concat(s,"/credentials/").concat(t):"/credentials/".concat(t);console.log("in credentialDeleteCall:",t);let a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to delete key:",e),e}},e2=async(e,t,o)=>{try{if(console.log("Form Values in credentialUpdateCall:",o),o.metadata){console.log("formValues.metadata:",o.metadata);try{o.metadata=JSON.parse(o.metadata)}catch(e){throw Error("Failed to parse metadata: "+e)}}let a=s?"".concat(s,"/credentials/").concat(t):"/credentials/".concat(t),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},e4=async(e,t)=>{try{if(console.log("Form Values in keyUpdateCall:",t),t.model_tpm_limit){console.log("formValues.model_tpm_limit:",t.model_tpm_limit);try{t.model_tpm_limit=JSON.parse(t.model_tpm_limit)}catch(e){throw Error("Failed to parse model_tpm_limit: "+e)}}if(t.model_rpm_limit){console.log("formValues.model_rpm_limit:",t.model_rpm_limit);try{t.model_rpm_limit=JSON.parse(t.model_rpm_limit)}catch(e){throw Error("Failed to parse model_rpm_limit: "+e)}}let o=s?"".concat(s,"/key/update"):"/key/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let r=await a.json();return console.log("Update key Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},e3=async(e,t)=>{try{console.log("Form Values in teamUpateCall:",t);let o=s?"".concat(s,"/team/update"):"/team/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error response from the server:",e),n.Z.fromBackend("Failed to update team settings: "+e),Error(e)}let r=await a.json();return console.log("Update Team Response:",r),r}catch(e){throw console.error("Failed to update team:",e),e}},e5=async(e,t,o)=>{try{console.log("Form Values in modelUpateCall:",t);let a=s?"".concat(s,"/model/").concat(o,"/update"):"/model/".concat(o,"/update"),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!r.ok){let e=await r.text();throw m(e),console.error("Error update from the server:",e),Error("Network response was not ok")}let n=await r.json();return console.log("Update model Response:",n),n}catch(e){throw console.error("Failed to update model:",e),e}},e6=async(e,t)=>{try{console.log("Form Values in modelUpateCall:",t);let o=s?"".concat(s,"/model/update"):"/model/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.text();throw m(e),console.error("Error update from the server:",e),Error("Network response was not ok")}let r=await a.json();return console.log("Update model Response:",r),r}catch(e){throw console.error("Failed to update model:",e),e}},e9=async(e,t,o)=>{try{console.log("Form Values in teamMemberAddCall:",o);let r=s?"".concat(s,"/team/member_add"):"/team/member_add",n=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:t,member:o})});if(!n.ok){var a;let e=await n.text(),t={};try{t=JSON.parse(e)}catch(t){console.warn("Failed to parse error body as JSON:",e)}let o=(null==t?void 0:null===(a=t.detail)||void 0===a?void 0:a.error)||"Failed to add team member",r=Error(o);throw r.raw=t,r}let l=await n.json();return console.log("API Response:",l),l}catch(e){throw console.error("Failed to create key:",e),e}},e7=async(e,t,o,a,r)=>{try{console.log("Bulk add team members:",{teamId:t,members:o,maxBudgetInTeam:a});let l=s?"".concat(s,"/team/bulk_member_add"):"/team/bulk_member_add",c={team_id:t};r?c.all_users=!0:c.members=o,null!=a&&(c.max_budget_in_team=a);let i=await fetch(l,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(c)});if(!i.ok){var n;let e=await i.text(),t={};try{t=JSON.parse(e)}catch(t){console.warn("Failed to parse error body as JSON:",e)}let o=(null==t?void 0:null===(n=t.detail)||void 0===n?void 0:n.error)||"Failed to bulk add team members",a=Error(o);throw a.raw=t,a}let d=await i.json();return console.log("Bulk team member add API Response:",d),d}catch(e){throw console.error("Failed to bulk add team members:",e),e}},e8=async(e,t,o)=>{try{console.log("Form Values in teamMemberUpdateCall:",o),console.log("Budget value:",o.max_budget_in_team),console.log("TPM limit:",o.tpm_limit),console.log("RPM limit:",o.rpm_limit);let r=s?"".concat(s,"/team/member_update"):"/team/member_update",n={team_id:t,role:o.role,user_id:o.user_id};void 0!==o.user_email&&(n.user_email=o.user_email),void 0!==o.max_budget_in_team&&null!==o.max_budget_in_team&&(n.max_budget_in_team=o.max_budget_in_team),void 0!==o.tpm_limit&&null!==o.tpm_limit&&(n.tpm_limit=o.tpm_limit),void 0!==o.rpm_limit&&null!==o.rpm_limit&&(n.rpm_limit=o.rpm_limit),console.log("Final request body:",n);let l=await fetch(r,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok){var a;let e=await l.text(),t={};try{t=JSON.parse(e)}catch(t){console.warn("Failed to parse error body as JSON:",e)}let o=(null==t?void 0:null===(a=t.detail)||void 0===a?void 0:a.error)||"Failed to add team member",r=Error(o);throw r.raw=t,r}let c=await l.json();return console.log("API Response:",c),c}catch(e){throw console.error("Failed to update team member:",e),e}},te=async(e,t,o)=>{try{console.log("Form Values in teamMemberAddCall:",o);let a=s?"".concat(s,"/team/member_delete"):"/team/member_delete",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({team_id:t,...void 0!==o.user_email&&{user_email:o.user_email},...void 0!==o.user_id&&{user_id:o.user_id}})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create key:",e),e}},tt=async(e,t,o)=>{try{console.log("Form Values in teamMemberAddCall:",o);let a=s?"".concat(s,"/organization/member_add"):"/organization/member_add",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_id:t,member:o})});if(!r.ok){let e=await r.text();throw m(e),console.error("Error response from the server:",e),Error(e)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to create organization member:",e),e}},to=async(e,t,o)=>{try{console.log("Form Values in organizationMemberDeleteCall:",o);let a=s?"".concat(s,"/organization/member_delete"):"/organization/member_delete",r=await fetch(a,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_id:t,user_id:o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to delete organization member:",e),e}},ta=async(e,t,o)=>{try{console.log("Form Values in organizationMemberUpdateCall:",o);let a=s?"".concat(s,"/organization/member_update"):"/organization/member_update",r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({organization_id:t,...o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("API Response:",n),n}catch(e){throw console.error("Failed to update organization member:",e),e}},tr=async(e,t,o)=>{try{console.log("Form Values in userUpdateUserCall:",t);let a=s?"".concat(s,"/user/update"):"/user/update",r={...t};null!==o&&(r.user_role=o),r=JSON.stringify(r);let n=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:r});if(!n.ok){let e=await n.json(),t=ov(e);throw m(t),Error(t)}let l=await n.json();return console.log("API Response:",l),l}catch(e){throw console.error("Failed to create key:",e),e}},tn=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];try{let r;console.log("Form Values in userUpdateUserCall:",t);let n=s?"".concat(s,"/user/bulk_update"):"/user/bulk_update";if(a)r=JSON.stringify({all_users:!0,user_updates:t});else if(o&&o.length>0){let e=[];for(let a of o)e.push({user_id:a,...t});r=JSON.stringify({users:e})}else throw Error("Must provide either userIds or set allUsers=true");let l=await fetch(n,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:r});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}let c=await l.json();return console.log("API Response:",c),c}catch(e){throw console.error("Failed to create key:",e),e}},tl=async(e,t)=>{try{let o=s?"".concat(s,"/global/predict/spend/logs"):"/global/predict/spend/logs",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({data:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log(r),r}catch(e){throw console.error("Failed to create key:",e),e}},tc=async e=>{try{let t=s?"".concat(s,"/health/services?service=slack_budget_alerts"):"/health/services?service=slack_budget_alerts";console.log("Checking Slack Budget Alerts service health");let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error(e)}let a=await o.json();return n.Z.success("Test Slack Alert worked - check your Slack!"),console.log("Service Health Response:",a),a}catch(e){throw console.error("Failed to perform health check:",e),e}},ti=async(e,t)=>{try{let o=s?"".concat(s,"/health/services?service=").concat(t):"/health/services?service=".concat(t);console.log("Checking Slack Budget Alerts service health");let a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw m(e),Error(e)}return await a.json()}catch(e){throw console.error("Failed to perform health check:",e),e}},ts=async e=>{try{let t=s?"".concat(s,"/budget/list"):"/budget/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},td=async e=>{try{let t=s?"".concat(s,"/budget/settings"):"/budget/settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tu=async(e,t,o)=>{try{let t=s?"".concat(s,"/get/config/callbacks"):"/get/config/callbacks",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tp=async e=>{try{let t=s?"".concat(s,"/config/list?config_type=general_settings"):"/config/list?config_type=general_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},th=async e=>{try{let t=s?"".concat(s,"/config/pass_through_endpoint"):"/config/pass_through_endpoint",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tg=async(e,t)=>{try{let o=s?"".concat(s,"/config/field/info?field_name=").concat(t):"/config/field/info?field_name=".concat(t),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},tm=async(e,t,o)=>{try{let a=s?"".concat(s,"/config/pass_through_endpoint"):"/config/pass_through_endpoint",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:t,field_value:o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return n.Z.success("Successfully updated value!"),l}catch(e){throw console.error("Failed to set callbacks:",e),e}},tf=async(e,t)=>{try{let o=s?"".concat(s,"/config/pass_through_endpoint"):"/config/pass_through_endpoint",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},tw=async(e,t,o)=>{try{let a=s?"".concat(s,"/config/field/update"):"/config/field/update",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:t,field_value:o,config_type:"general_settings"})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return n.Z.success("Successfully updated value!"),l}catch(e){throw console.error("Failed to set callbacks:",e),e}},ty=async(e,t)=>{try{let o=s?"".concat(s,"/config/field/delete"):"/config/field/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({field_name:t,config_type:"general_settings"})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return n.Z.success("Field reset on proxy"),r}catch(e){throw console.error("Failed to get callbacks:",e),e}},tj=async(e,t)=>{try{let o=s?"".concat(s,"/config/pass_through_endpoint?endpoint_id=").concat(t):"/config/pass_through_endpoint?endpoint_id=".concat(t),a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},t_=async(e,t)=>{try{let o=s?"".concat(s,"/config/update"):"/config/update",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to set callbacks:",e),e}},tC=async e=>{try{let t=s?"".concat(s,"/health"):"/health",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to call /health:",e),e}},tk=async(e,t)=>{try{let o=s?"".concat(s,"/health?model=").concat(encodeURIComponent(t)):"/health?model=".concat(encodeURIComponent(t)),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to call /health for model ".concat(t,":"),e),e}},tv=async e=>{try{let t=s?"".concat(s,"/cache/ping"):"/cache/ping",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error(e)}return await o.json()}catch(e){throw console.error("Failed to call /cache/ping:",e),e}},tT=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:100,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;try{let n=s?"".concat(s,"/health/history"):"/health/history",l=new URLSearchParams;t&&l.append("model",t),o&&l.append("status_filter",o),l.append("limit",a.toString()),l.append("offset",r.toString()),l.toString()&&(n+="?".concat(l.toString()));let c=await fetch(n,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.text();throw m(e),Error(e)}return await c.json()}catch(e){throw console.error("Failed to call /health/history:",e),e}},tE=async e=>{try{let t=s?"".concat(s,"/health/latest"):"/health/latest",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error(e)}return await o.json()}catch(e){throw console.error("Failed to call /health/latest:",e),e}},tS=async e=>{try{console.log("Getting proxy UI settings"),console.log("proxyBaseUrl in getProxyUISettings:",s);let t=s?"".concat(s,"/sso/get/ui_settings"):"/sso/get/ui_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get callbacks:",e),e}},tb=async e=>{try{let t=s?"".concat(s,"/v2/guardrails/list"):"/v2/guardrails/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get guardrails list:",e),e}},tF=async e=>{try{let t=s?"".concat(s,"/prompts/list"):"/prompts/list",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to get prompts list:",e),e}},tP=async(e,t)=>{try{let o=s?"".concat(s,"/prompts/").concat(t,"/info"):"/prompts/".concat(t,"/info"),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to get prompt info:",e),e}},tO=async(e,t)=>{try{let o=s?"".concat(s,"/prompts"):"/prompts",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to create prompt:",e),e}},tB=async(e,t,o)=>{try{let a=s?"".concat(s,"/prompts/").concat(t):"/prompts/".concat(t),r=await fetch(a,{method:"PUT",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}return await r.json()}catch(e){throw console.error("Failed to update prompt:",e),e}},tN=async(e,t)=>{try{let o=s?"".concat(s,"/prompts/").concat(t):"/prompts/".concat(t),a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to delete prompt:",e),e}},tx=async(e,t)=>{try{let o=new FormData;o.append("file",t);let a=s?"".concat(s,"/utils/dotprompt_json_converter"):"/utils/dotprompt_json_converter",r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e)},body:o});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}return await r.json()}catch(e){throw console.error("Failed to convert prompt file:",e),e}},tG=async(e,t,o)=>{try{let a=s?"".concat(s,"/prompts/").concat(t):"/prompts/".concat(t),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}return await r.json()}catch(e){throw console.error("Failed to patch prompt:",e),e}},tJ=async(e,t)=>{try{let o=s?"".concat(s,"/guardrails"):"/guardrails",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({guardrail:t})});if(!a.ok){let e=await a.text();throw m(e),Error(e)}let r=await a.json();return console.log("Create guardrail response:",r),r}catch(e){throw console.error("Failed to create guardrail:",e),e}},tA=async(e,t,o)=>{try{let a=s?"".concat(s,"/spend/logs/ui/").concat(t,"?start_date=").concat(encodeURIComponent(o)):"/spend/logs/ui/".concat(t,"?start_date=").concat(encodeURIComponent(o));console.log("Fetching log details from:",a);let r=await fetch(a,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("Fetched log details:",n),n}catch(e){throw console.error("Failed to fetch log details:",e),e}},tU=async e=>{try{let t=s?"".concat(s,"/get/internal_user_settings"):"/get/internal_user_settings";console.log("Fetching SSO settings from:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched SSO settings:",a),a}catch(e){throw console.error("Failed to fetch SSO settings:",e),e}},tR=async(e,t)=>{try{let o=s?"".concat(s,"/update/internal_user_settings"):"/update/internal_user_settings";console.log("Updating internal user settings:",t);let a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();throw m(e),Error(e)}let r=await a.json();return console.log("Updated internal user settings:",r),n.Z.success("Internal user settings updated successfully"),r}catch(e){throw console.error("Failed to update internal user settings:",e),e}},tI=async e=>{try{let t=s?"".concat(s,"/v1/mcp/server"):"/v1/mcp/server";console.log("Fetching MCP servers from:",t);let o=await fetch(t,{method:p.GET,headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched MCP servers:",a),a}catch(e){throw console.error("Failed to fetch MCP servers:",e),e}},tM=async e=>{try{let t=s?"".concat(s,"/v1/mcp/access_groups"):"/v1/mcp/access_groups";console.log("Fetching MCP access groups from:",t);let o=await fetch(t,{method:p.GET,headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched MCP access groups:",a),a.access_groups||[]}catch(e){throw console.error("Failed to fetch MCP access groups:",e),e}},tz=async(e,t)=>{try{console.log("Form Values in createMCPServer:",t);let o=s?"".concat(s,"/v1/mcp/server"):"/v1/mcp/server",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({...t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("API Response:",r),r}catch(e){throw console.error("Failed to create key:",e),e}},tL=async(e,t)=>{try{let o=s?"".concat(s,"/v1/mcp/server"):"/v1/mcp/server",a=await fetch(o,{method:"PUT",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to update MCP server:",e),e}},tD=async(e,t)=>{try{let o=(s?"".concat(s):"")+"/v1/mcp/server/".concat(t);console.log("in deleteMCPServer:",t);let a=await fetch(o,{method:p.DELETE,headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}}catch(e){throw console.error("Failed to delete key:",e),e}},tV=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/mcp-rest/tools/list?server_id=").concat(t):"/mcp-rest/tools/list?server_id=".concat(t);console.log("Fetching MCP tools from:",r);let n={[f]:"Bearer ".concat(e),"Content-Type":"application/json"};a&&o?n["x-mcp-".concat(a,"-authorization")]=o:o&&(n[w]=o);let l=await fetch(r,{method:"GET",headers:n}),c=await l.json();if(console.log("Fetched MCP tools response:",c),!l.ok){if(c.error&&c.message)throw Error(c.message);throw Error("Failed to fetch MCP tools")}return c}catch(e){return console.error("Failed to fetch MCP tools:",e),{tools:[],error:"network_error",message:e instanceof Error?e.message:"Failed to fetch MCP tools"}}},tZ=async(e,t,o,a,r)=>{try{let n=s?"".concat(s,"/mcp-rest/tools/call"):"/mcp-rest/tools/call";console.log("Calling MCP tool:",t,"with arguments:",o);let l={[f]:"Bearer ".concat(e),"Content-Type":"application/json"};r?l["x-mcp-".concat(r,"-authorization")]=a:l[w]=a;let c=await fetch(n,{method:"POST",headers:l,body:JSON.stringify({name:t,arguments:o})});if(!c.ok){let e="Network response was not ok",t=null,o=await c.text();try{let a=JSON.parse(o);a.detail?"string"==typeof a.detail?e=a.detail:"object"==typeof a.detail&&(e=a.detail.message||a.detail.error||"An error occurred",t=a.detail):e=a.message||a.error||e}catch(t){console.error("Failed to parse JSON error response:",t),o&&(e=o)}let a=Error(e);throw a.status=c.status,a.statusText=c.statusText,a.details=t,m(e),a}let i=await c.json();return console.log("MCP tool call response:",i),i}catch(e){throw console.error("Failed to call MCP tool:",e),console.error("Error type:",typeof e),e instanceof Error&&(console.error("Error message:",e.message),console.error("Error stack:",e.stack)),e}},tq=async(e,t)=>{try{let o=s?"".concat(s,"/tag/new"):"/tag/new",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();await m(e);return}return await a.json()}catch(e){throw console.error("Error creating tag:",e),e}},tH=async(e,t)=>{try{let o=s?"".concat(s,"/tag/update"):"/tag/update",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();await m(e);return}return await a.json()}catch(e){throw console.error("Error updating tag:",e),e}},tW=async(e,t)=>{try{let o=s?"".concat(s,"/tag/info"):"/tag/info",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({names:t})});if(!a.ok){let e=await a.text();return await m(e),{}}return await a.json()}catch(e){throw console.error("Error getting tag info:",e),e}},tY=async e=>{try{let t=s?"".concat(s,"/tag/list"):"/tag/list",o=await fetch(t,{method:"GET",headers:{Authorization:"Bearer ".concat(e)}});if(!o.ok){let e=await o.text();return await m(e),{}}return await o.json()}catch(e){throw console.error("Error listing tags:",e),e}},tK=async(e,t)=>{try{let o=s?"".concat(s,"/tag/delete"):"/tag/delete",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({name:t})});if(!a.ok){let e=await a.text();await m(e);return}return await a.json()}catch(e){throw console.error("Error deleting tag:",e),e}},t$=async e=>{try{let t=s?"".concat(s,"/get/default_team_settings"):"/get/default_team_settings";console.log("Fetching default team settings from:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched default team settings:",a),a}catch(e){throw console.error("Failed to fetch default team settings:",e),e}},tQ=async(e,t)=>{try{let o=s?"".concat(s,"/update/default_team_settings"):"/update/default_team_settings";console.log("Updating default team settings:",t);let a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Updated default team settings:",r),n.Z.success("Default team settings updated successfully"),r}catch(e){throw console.error("Failed to update default team settings:",e),e}},tX=async(e,t)=>{try{let o=s?"".concat(s,"/team/permissions_list?team_id=").concat(t):"/team/permissions_list?team_id=".concat(t),a=await fetch(o,{method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Team permissions response:",r),r}catch(e){throw console.error("Failed to get team permissions:",e),e}},t0=async(e,t,o)=>{try{let a=s?"".concat(s,"/team/permissions_update"):"/team/permissions_update",r=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({team_id:t,team_member_permissions:o})});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let n=await r.json();return console.log("Team permissions response:",n),n}catch(e){throw console.error("Failed to update team permissions:",e),e}},t1=async(e,t)=>{try{let o=s?"".concat(s,"/spend/logs/session/ui?session_id=").concat(encodeURIComponent(t)):"/spend/logs/session/ui?session_id=".concat(encodeURIComponent(t)),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to fetch session logs:",e),e}},t2=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/new"):"/vector_store/new",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to create vector store")}return await a.json()}catch(e){throw console.error("Error creating vector store:",e),e}},t4=async function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1],arguments.length>2&&void 0!==arguments[2]&&arguments[2];try{let t=s?"".concat(s,"/vector_store/list"):"/vector_store/list",o=await fetch(t,{method:"GET",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)}});if(!o.ok){let e=await o.json();throw Error(e.detail||"Failed to list vector stores")}return await o.json()}catch(e){throw console.error("Error listing vector stores:",e),e}},t3=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/delete"):"/vector_store/delete",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({vector_store_id:t})});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to delete vector store")}return await a.json()}catch(e){throw console.error("Error deleting vector store:",e),e}},t5=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/info"):"/vector_store/info",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify({vector_store_id:t})});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to get vector store info")}return await a.json()}catch(e){throw console.error("Error getting vector store info:",e),e}},t6=async(e,t)=>{try{let o=s?"".concat(s,"/vector_store/update"):"/vector_store/update",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e)},body:JSON.stringify(t)});if(!a.ok){let e=await a.json();throw Error(e.detail||"Failed to update vector store")}return await a.json()}catch(e){throw console.error("Error updating vector store:",e),e}},t9=async e=>{try{let t=s?"".concat(s,"/email/event_settings"):"/email/event_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to get email event settings")}let a=await o.json();return console.log("Email event settings response:",a),a}catch(e){throw console.error("Failed to get email event settings:",e),e}},t7=async(e,t)=>{try{let o=s?"".concat(s,"/email/event_settings"):"/email/event_settings",a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.text();throw m(e),Error("Failed to update email event settings")}let r=await a.json();return console.log("Update email event settings response:",r),r}catch(e){throw console.error("Failed to update email event settings:",e),e}},t8=async e=>{try{let t=s?"".concat(s,"/email/event_settings/reset"):"/email/event_settings/reset",o=await fetch(t,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to reset email event settings")}let a=await o.json();return console.log("Reset email event settings response:",a),a}catch(e){throw console.error("Failed to reset email event settings:",e),e}},oe=async(e,t)=>{try{let o=s?"".concat(s,"/guardrails/").concat(t):"/guardrails/".concat(t),a=await fetch(o,{method:"DELETE",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw m(e),Error(e)}let r=await a.json();return console.log("Delete guardrail response:",r),r}catch(e){throw console.error("Failed to delete guardrail:",e),e}},ot=async e=>{try{let t=s?"".concat(s,"/guardrails/ui/add_guardrail_settings"):"/guardrails/ui/add_guardrail_settings",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to get guardrail UI settings")}let a=await o.json();return console.log("Guardrail UI settings response:",a),a}catch(e){throw console.error("Failed to get guardrail UI settings:",e),e}},oo=async e=>{try{let t=s?"".concat(s,"/guardrails/ui/provider_specific_params"):"/guardrails/ui/provider_specific_params",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.text();throw m(e),Error("Failed to get guardrail provider specific parameters")}let a=await o.json();return console.log("Guardrail provider specific params response:",a),a}catch(e){throw console.error("Failed to get guardrail provider specific parameters:",e),e}},oa=async(e,t)=>{try{let o=s?"".concat(s,"/guardrails/").concat(t,"/info"):"/guardrails/".concat(t,"/info"),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.text();throw m(e),Error("Failed to get guardrail info")}let r=await a.json();return console.log("Guardrail info response:",r),r}catch(e){throw console.error("Failed to get guardrail info:",e),e}},or=async(e,t,o)=>{try{let a=s?"".concat(s,"/guardrails/").concat(t):"/guardrails/".concat(t),r=await fetch(a,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.text();throw m(e),Error("Failed to update guardrail")}let n=await r.json();return console.log("Update guardrail response:",n),n}catch(e){throw console.error("Failed to update guardrail:",e),e}},on=async e=>{try{let t=s?"".concat(s,"/get/sso_settings"):"/get/sso_settings";console.log("Fetching SSO configuration from:",t);let o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}let a=await o.json();return console.log("Fetched SSO configuration:",a),a}catch(e){throw console.error("Failed to fetch SSO configuration:",e),e}},ol=async(e,t)=>{try{let o=s?"".concat(s,"/update/sso_settings"):"/update/sso_settings";console.log("Updating SSO configuration:",t);let a=await fetch(o,{method:"PATCH",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(t)});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=await a.json();return console.log("Updated SSO configuration:",r),r}catch(e){throw console.error("Failed to update SSO configuration:",e),e}},oc=async(e,t,o,a,r)=>{try{let t=s?"".concat(s,"/audit"):"/audit",o=new URLSearchParams;a&&o.append("page",a.toString()),r&&o.append("page_size",r.toString());let n=o.toString();n&&(t+="?".concat(n));let l=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=ov(e);throw m(t),Error(t)}return await l.json()}catch(e){throw console.error("Failed to fetch audit logs:",e),e}},oi=async e=>{try{let t=s?"".concat(s,"/user/available_users"):"/user/available_users",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e)}});if(!o.ok){if(404===o.status)return null;let e=await o.text();throw m(e),Error("Network response was not ok")}return await o.json()}catch(e){throw console.error("Failed to fetch remaining users:",e),e}},os=async(e,t,o)=>{try{let a=s?"".concat(s,"/config/pass_through_endpoint/").concat(encodeURIComponent(t)):"/config/pass_through_endpoint/".concat(encodeURIComponent(t)),r=await fetch(a,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){let e=await r.json(),t=ov(e);throw m(t),Error(t)}let l=await r.json();return n.Z.success("Pass through endpoint updated successfully"),l}catch(e){throw console.error("Failed to update pass through endpoint:",e),e}},od=async(e,t)=>{try{let o=s?"".concat(s,"/config/pass_through_endpoint?endpoint_id=").concat(encodeURIComponent(t)):"/config/pass_through_endpoint?endpoint_id=".concat(encodeURIComponent(t)),a=await fetch(o,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}let r=(await a.json()).endpoints;if(!r||0===r.length)throw Error("Pass through endpoint not found");return r[0]}catch(e){throw console.error("Failed to get pass through endpoint info:",e),e}},ou=async(e,t)=>{try{let o=s?"".concat(s,"/config/callback/delete"):"/config/callback/delete",a=await fetch(o,{method:"POST",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({callback_name:t})});if(!a.ok){let e=await a.json(),t=ov(e);throw m(t),Error(t)}return await a.json()}catch(e){throw console.error("Failed to delete specific callback:",e),e}},op=async e=>{let t=u(),o=await fetch("".concat(t,"/v1/mcp/tools"),{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok)throw Error("HTTP error! status: ".concat(o.status));return await o.json()},oh=async(e,t)=>{try{console.log("Testing MCP connection with config:",JSON.stringify(t));let a=s?"".concat(s,"/mcp-rest/test/connection"):"/mcp-rest/test/connection",r=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",[f]:"Bearer ".concat(e)},body:JSON.stringify(t)}),n=r.headers.get("content-type");if(!n||!n.includes("application/json")){let e=await r.text();throw console.error("Received non-JSON response:",e),Error("Received non-JSON response (".concat(r.status,": ").concat(r.statusText,"). Check network tab for details."))}let l=await r.json();if(!r.ok||"error"===l.status){if("error"===l.status);else{var o;return{status:"error",message:(null===(o=l.error)||void 0===o?void 0:o.message)||"MCP connection test failed: ".concat(r.status," ").concat(r.statusText)}}}return l}catch(e){throw console.error("MCP connection test error:",e),e}},og=async(e,t)=>{try{console.log("Testing MCP tools list with config:",JSON.stringify(t));let o=s?"".concat(s,"/mcp-rest/test/tools/list"):"/mcp-rest/test/tools/list",a=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json",[f]:"Bearer ".concat(e)},body:JSON.stringify(t)}),r=a.headers.get("content-type");if(!r||!r.includes("application/json")){let e=await a.text();throw console.error("Received non-JSON response:",e),Error("Received non-JSON response (".concat(a.status,": ").concat(a.statusText,"). Check network tab for details."))}let n=await a.json();if((!a.ok||n.error)&&!n.error)return{tools:[],error:"request_failed",message:n.message||"MCP tools list failed: ".concat(a.status," ").concat(a.statusText)};return n}catch(e){throw console.error("MCP tools list test error:",e),e}},om=async(e,t,o)=>{try{let a="".concat(u(),"/v1/vector_stores/").concat(t,"/search"),r=await fetch(a,{method:"POST",headers:{Authorization:"Bearer ".concat(e),"Content-Type":"application/json"},body:JSON.stringify({query:o})});if(!r.ok){let e=await r.text();return await m(e),null}return await r.json()}catch(e){throw console.error("Error testing vector store search:",e),e}},of=async function(e,t,o){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:50,n=arguments.length>5?arguments[5]:void 0;try{let l=s?"".concat(s,"/tag/user-agent/analytics"):"/tag/user-agent/analytics",c=new URLSearchParams,i=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)};c.append("start_date",i(t)),c.append("end_date",i(o)),c.append("page",a.toString()),c.append("page_size",r.toString()),n&&c.append("user_agent_filter",n);let d=c.toString();d&&(l+="?".concat(d));let u=await fetch(l,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!u.ok){let e=await u.json(),t=ov(e);throw m(t),Error(t)}return await u.json()}catch(e){throw console.error("Failed to fetch user agent analytics:",e),e}},ow=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/dau"):"/tag/dau",n=new URLSearchParams;n.append("end_date",(e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)})(t)),a&&a.length>0?a.forEach(e=>{n.append("tag_filters",e)}):o&&n.append("tag_filter",o);let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch DAU:",e),e}},oy=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/wau"):"/tag/wau",n=new URLSearchParams;n.append("end_date",(e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)})(t)),a&&a.length>0?a.forEach(e=>{n.append("tag_filters",e)}):o&&n.append("tag_filter",o);let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch WAU:",e),e}},oj=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/mau"):"/tag/mau",n=new URLSearchParams;n.append("end_date",(e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)})(t)),a&&a.length>0?a.forEach(e=>{n.append("tag_filters",e)}):o&&n.append("tag_filter",o);let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch MAU:",e),e}},o_=async e=>{try{let t=s?"".concat(s,"/tag/distinct"):"/tag/distinct",o=await fetch(t,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!o.ok){let e=await o.json(),t=ov(e);throw m(t),Error(t)}return await o.json()}catch(e){throw console.error("Failed to fetch distinct tags:",e),e}},oC=async(e,t,o,a)=>{try{let r=s?"".concat(s,"/tag/summary"):"/tag/summary",n=new URLSearchParams,l=e=>{let t=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return"".concat(t,"-").concat(o,"-").concat(a)};n.append("start_date",l(t)),n.append("end_date",l(o)),a&&a.length>0&&a.forEach(e=>{n.append("tag_filters",e)});let c=n.toString();c&&(r+="?".concat(c));let i=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!i.ok){let e=await i.json(),t=ov(e);throw m(t),Error(t)}return await i.json()}catch(e){throw console.error("Failed to fetch user agent summary:",e),e}},ok=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:50,a=arguments.length>3?arguments[3]:void 0;try{let r=s?"".concat(s,"/tag/user-agent/per-user-analytics"):"/tag/user-agent/per-user-analytics",n=new URLSearchParams;n.append("page",t.toString()),n.append("page_size",o.toString()),a&&a.length>0&&a.forEach(e=>{n.append("tag_filters",e)});let l=n.toString();l&&(r+="?".concat(l));let c=await fetch(r,{method:"GET",headers:{[f]:"Bearer ".concat(e),"Content-Type":"application/json"}});if(!c.ok){let e=await c.json(),t=ov(e);throw m(t),Error(t)}return await c.json()}catch(e){throw console.error("Failed to fetch per-user analytics:",e),e}},ov=e=>(null==e?void 0:e.error)&&(e.error.message||e.error)||(null==e?void 0:e.message)||(null==e?void 0:e.detail)||(null==e?void 0:e.error)||JSON.stringify(e)},85968:function(e,t,o){o.d(t,{O:function(){return a}});let a=e=>{if(!e)return"An unknown error occurred";if("string"==typeof e)return e;if(e.message)try{let t=JSON.parse(e.message);if(t.error&&t.error.message)return t.error.message;return"string"==typeof t?t:JSON.stringify(t,null,2)}catch(t){return e.message}if(e.response&&e.response.data){if("string"==typeof e.response.data)return e.response.data;if(e.response.data.message)return e.response.data.message;if(e.response.data.error)return"string"==typeof e.response.data.error?e.response.data.error:e.response.data.error.message||JSON.stringify(e.response.data.error)}return String(e)}},3914:function(e,t,o){function a(){let e=window.location.hostname,t=["Lax","Strict","None"];["/","/ui"].forEach(o=>{document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,";"),document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,"; domain=").concat(e,";"),t.forEach(t=>{let a="None"===t?" Secure;":"";document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,"; SameSite=").concat(t,";").concat(a),document.cookie="token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=".concat(o,"; domain=").concat(e,"; SameSite=").concat(t,";").concat(a)})}),console.log("After clearing cookies:",document.cookie)}function r(e){let t=document.cookie.split("; ").find(t=>t.startsWith(e+"="));return t?t.split("=")[1]:null}o.d(t,{b:function(){return a},e:function(){return r}})}}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/220-8af5927d18414264.js b/litellm/proxy/_experimental/out/_next/static/chunks/220-89d73a525e307735.js similarity index 99% rename from litellm/proxy/_experimental/out/_next/static/chunks/220-8af5927d18414264.js rename to litellm/proxy/_experimental/out/_next/static/chunks/220-89d73a525e307735.js index 22c341172f..57e9349d8f 100644 --- a/litellm/proxy/_experimental/out/_next/static/chunks/220-8af5927d18414264.js +++ b/litellm/proxy/_experimental/out/_next/static/chunks/220-89d73a525e307735.js @@ -1,4 +1,4 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[220],{12660:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M917.7 148.8l-42.4-42.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-76.1 76.1a199.27 199.27 0 00-112.1-34.3c-51.2 0-102.4 19.5-141.5 58.6L432.3 308.7a8.03 8.03 0 000 11.3L704 591.7c1.6 1.6 3.6 2.3 5.7 2.3 2 0 4.1-.8 5.7-2.3l101.9-101.9c68.9-69 77-175.7 24.3-253.5l76.1-76.1c3.1-3.2 3.1-8.3 0-11.4zM769.1 441.7l-59.4 59.4-186.8-186.8 59.4-59.4c24.9-24.9 58.1-38.7 93.4-38.7 35.3 0 68.4 13.7 93.4 38.7 24.9 24.9 38.7 58.1 38.7 93.4 0 35.3-13.8 68.4-38.7 93.4zm-190.2 105a8.03 8.03 0 00-11.3 0L501 613.3 410.7 523l66.7-66.7c3.1-3.1 3.1-8.2 0-11.3L441 408.6a8.03 8.03 0 00-11.3 0L363 475.3l-43-43a7.85 7.85 0 00-5.7-2.3c-2 0-4.1.8-5.7 2.3L206.8 534.2c-68.9 69-77 175.7-24.3 253.5l-76.1 76.1a8.03 8.03 0 000 11.3l42.4 42.4c1.6 1.6 3.6 2.3 5.7 2.3s4.1-.8 5.7-2.3l76.1-76.1c33.7 22.9 72.9 34.3 112.1 34.3 51.2 0 102.4-19.5 141.5-58.6l101.9-101.9c3.1-3.1 3.1-8.2 0-11.3l-43-43 66.7-66.7c3.1-3.1 3.1-8.2 0-11.3l-36.6-36.2zM441.7 769.1a131.32 131.32 0 01-93.4 38.7c-35.3 0-68.4-13.7-93.4-38.7a131.32 131.32 0 01-38.7-93.4c0-35.3 13.7-68.4 38.7-93.4l59.4-59.4 186.8 186.8-59.4 59.4z"}}]},name:"api",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},88009:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z"}}]},name:"appstore",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},79276:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z"}}]},name:"arrow-up",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},37527:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M894 462c30.9 0 43.8-39.7 18.7-58L530.8 126.2a31.81 31.81 0 00-37.6 0L111.3 404c-25.1 18.2-12.2 58 18.8 58H192v374h-72c-4.4 0-8 3.6-8 8v52c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-52c0-4.4-3.6-8-8-8h-72V462h62zM512 196.7l271.1 197.2H240.9L512 196.7zM264 462h117v374H264V462zm189 0h117v374H453V462zm307 374H642V462h118v374z"}}]},name:"bank",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},9775:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm-600-80h56c4.4 0 8-3.6 8-8V560c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V384c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v320c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V462c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v242c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V304c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v400c0 4.4 3.6 8 8 8z"}}]},name:"bar-chart",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},11429:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M766.4 744.3c43.7 0 79.4-36.2 79.4-80.5 0-53.5-79.4-140.8-79.4-140.8S687 610.3 687 663.8c0 44.3 35.7 80.5 79.4 80.5zm-377.1-44.1c7.1 7.1 18.6 7.1 25.6 0l256.1-256c7.1-7.1 7.1-18.6 0-25.6l-256-256c-.6-.6-1.3-1.2-2-1.7l-78.2-78.2a9.11 9.11 0 00-12.8 0l-48 48a9.11 9.11 0 000 12.8l67.2 67.2-207.8 207.9c-7.1 7.1-7.1 18.6 0 25.6l255.9 256zm12.9-448.6l178.9 178.9H223.4l178.8-178.9zM904 816H120c-4.4 0-8 3.6-8 8v80c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-80c0-4.4-3.6-8-8-8z"}}]},name:"bg-colors",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},68208:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M856 376H648V168c0-8.8-7.2-16-16-16H168c-8.8 0-16 7.2-16 16v464c0 8.8 7.2 16 16 16h208v208c0 8.8 7.2 16 16 16h464c8.8 0 16-7.2 16-16V392c0-8.8-7.2-16-16-16zm-480 16v188H220V220h360v156H392c-8.8 0-16 7.2-16 16zm204 52v136H444V444h136zm224 360H444V648h188c8.8 0 16-7.2 16-16V444h156v360z"}}]},name:"block",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},83322:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M632 888H392c-4.4 0-8 3.6-8 8v32c0 17.7 14.3 32 32 32h192c17.7 0 32-14.3 32-32v-32c0-4.4-3.6-8-8-8zM512 64c-181.1 0-328 146.9-328 328 0 121.4 66 227.4 164 284.1V792c0 17.7 14.3 32 32 32h264c17.7 0 32-14.3 32-32V676.1c98-56.7 164-162.7 164-284.1 0-181.1-146.9-328-328-328zm127.9 549.8L604 634.6V752H420V634.6l-35.9-20.8C305.4 568.3 256 484.5 256 392c0-141.4 114.6-256 256-256s256 114.6 256 256c0 92.5-49.4 176.3-128.1 221.8z"}}]},name:"bulb",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},49634:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z"}}]},name:"calendar",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},83669:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},26430:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M899.1 869.6l-53-305.6H864c14.4 0 26-11.6 26-26V346c0-14.4-11.6-26-26-26H618V138c0-14.4-11.6-26-26-26H432c-14.4 0-26 11.6-26 26v182H160c-14.4 0-26 11.6-26 26v192c0 14.4 11.6 26 26 26h17.9l-53 305.6a25.95 25.95 0 0025.6 30.4h723c1.5 0 3-.1 4.4-.4a25.88 25.88 0 0021.2-30zM204 390h272V182h72v208h272v104H204V390zm468 440V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H416V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H202.8l45.1-260H776l45.1 260H672z"}}]},name:"clear",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},5540:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},11894:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"code",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},44625:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},26349:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},62670:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm47.7-395.2l-25.4-5.9V348.6c38 5.2 61.5 29 65.5 58.2.5 4 3.9 6.9 7.9 6.9h44.9c4.7 0 8.4-4.1 8-8.8-6.1-62.3-57.4-102.3-125.9-109.2V263c0-4.4-3.6-8-8-8h-28.1c-4.4 0-8 3.6-8 8v33c-70.8 6.9-126.2 46-126.2 119 0 67.6 49.8 100.2 102.1 112.7l24.7 6.3v142.7c-44.2-5.9-69-29.5-74.1-61.3-.6-3.8-4-6.6-7.9-6.6H363c-4.7 0-8.4 4-8 8.7 4.5 55 46.2 105.6 135.2 112.1V761c0 4.4 3.6 8 8 8h28.4c4.4 0 8-3.6 8-8.1l-.2-31.7c78.3-6.9 134.3-48.8 134.3-124-.1-69.4-44.2-100.4-109-116.4zm-68.6-16.2c-5.6-1.6-10.3-3.1-15-5-33.8-12.2-49.5-31.9-49.5-57.3 0-36.3 27.5-57 64.5-61.7v124zM534.3 677V543.3c3.1.9 5.9 1.6 8.8 2.2 47.3 14.4 63.2 34.4 63.2 65.1 0 39.1-29.4 62.6-72 66.4z"}}]},name:"dollar",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},73879:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},29271:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},41169:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 472a40 40 0 1080 0 40 40 0 10-80 0zm367 352.9L696.3 352V178H768v-68H256v68h71.7v174L145 824.9c-2.8 7.4-4.3 15.2-4.3 23.1 0 35.3 28.7 64 64 64h614.6c7.9 0 15.7-1.5 23.1-4.3 33-12.7 49.4-49.8 36.6-82.8zM395.7 364.7V180h232.6v184.7L719.2 600c-20.7-5.3-42.1-8-63.9-8-61.2 0-119.2 21.5-165.3 60a188.78 188.78 0 01-121.3 43.9c-32.7 0-64.1-8.3-91.8-23.7l118.8-307.5zM210.5 844l41.7-107.8c35.7 18.1 75.4 27.8 116.6 27.8 61.2 0 119.2-21.5 165.3-60 33.9-28.2 76.3-43.9 121.3-43.9 35 0 68.4 9.5 97.6 27.1L813.5 844h-603z"}}]},name:"experiment",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},11741:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM770.87 199.13l-52.2-52.2a8.01 8.01 0 014.7-13.6l179.4-21c5.1-.6 9.5 3.7 8.9 8.9l-21 179.4c-.8 6.6-8.9 9.4-13.6 4.7l-52.4-52.4-256.2 256.2a8.03 8.03 0 01-11.3 0l-42.4-42.4a8.03 8.03 0 010-11.3l256.1-256.3z"}}]},name:"export",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},34310:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494zM472 744a40 40 0 1080 0 40 40 0 10-80 0zm16-104h48c4.4 0 8-3.6 8-8V448c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v184c0 4.4 3.6 8 8 8z"}}]},name:"file-exclamation",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},50010:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M531.3 574.4l.3-1.4c5.8-23.9 13.1-53.7 7.4-80.7-3.8-21.3-19.5-29.6-32.9-30.2-15.8-.7-29.9 8.3-33.4 21.4-6.6 24-.7 56.8 10.1 98.6-13.6 32.4-35.3 79.5-51.2 107.5-29.6 15.3-69.3 38.9-75.2 68.7-1.2 5.5.2 12.5 3.5 18.8 3.7 7 9.6 12.4 16.5 15 3 1.1 6.6 2 10.8 2 17.6 0 46.1-14.2 84.1-79.4 5.8-1.9 11.8-3.9 17.6-5.9 27.2-9.2 55.4-18.8 80.9-23.1 28.2 15.1 60.3 24.8 82.1 24.8 21.6 0 30.1-12.8 33.3-20.5 5.6-13.5 2.9-30.5-6.2-39.6-13.2-13-45.3-16.4-95.3-10.2-24.6-15-40.7-35.4-52.4-65.8zM421.6 726.3c-13.9 20.2-24.4 30.3-30.1 34.7 6.7-12.3 19.8-25.3 30.1-34.7zm87.6-235.5c5.2 8.9 4.5 35.8.5 49.4-4.9-19.9-5.6-48.1-2.7-51.4.8.1 1.5.7 2.2 2zm-1.6 120.5c10.7 18.5 24.2 34.4 39.1 46.2-21.6 4.9-41.3 13-58.9 20.2-4.2 1.7-8.3 3.4-12.3 5 13.3-24.1 24.4-51.4 32.1-71.4zm155.6 65.5c.1.2.2.5-.4.9h-.2l-.2.3c-.8.5-9 5.3-44.3-8.6 40.6-1.9 45 7.3 45.1 7.4zm191.4-388.2L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file-pdf",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},38434:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494zM504 618H320c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM312 490v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H320c-4.4 0-8 3.6-8 8z"}}]},name:"file-text",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},10798:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z"}}]},name:"filter",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},71282:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"}}]},name:"import",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},92403:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M608 112c-167.9 0-304 136.1-304 304 0 70.3 23.9 135 63.9 186.5l-41.1 41.1-62.3-62.3a8.15 8.15 0 00-11.4 0l-39.8 39.8a8.15 8.15 0 000 11.4l62.3 62.3-44.9 44.9-62.3-62.3a8.15 8.15 0 00-11.4 0l-39.8 39.8a8.15 8.15 0 000 11.4l62.3 62.3-65.3 65.3a8.03 8.03 0 000 11.3l42.3 42.3c3.1 3.1 8.2 3.1 11.3 0l253.6-253.6A304.06 304.06 0 00608 720c167.9 0 304-136.1 304-304S775.9 112 608 112zm161.2 465.2C726.2 620.3 668.9 644 608 644c-60.9 0-118.2-23.7-161.2-66.8-43.1-43-66.8-100.3-66.8-161.2 0-60.9 23.7-118.2 66.8-161.2 43-43.1 100.3-66.8 161.2-66.8 60.9 0 118.2 23.7 161.2 66.8 43.1 43 66.8 100.3 66.8 161.2 0 60.9-23.7 118.2-66.8 161.2z"}}]},name:"key",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},48231:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM305.8 637.7c3.1 3.1 8.1 3.1 11.3 0l138.3-137.6L583 628.5c3.1 3.1 8.2 3.1 11.3 0l275.4-275.3c3.1-3.1 3.1-8.2 0-11.3l-39.6-39.6a8.03 8.03 0 00-11.3 0l-230 229.9L461.4 404a8.03 8.03 0 00-11.3 0L266.3 586.7a8.03 8.03 0 000 11.3l39.5 39.7z"}}]},name:"line-chart",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},62272:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"}}]},name:"link",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},45246:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"minus-circle",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},16601:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 394c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8H708V152c0-4.4-3.6-8-8-8h-64c-4.4 0-8 3.6-8 8v166H400V152c0-4.4-3.6-8-8-8h-64c-4.4 0-8 3.6-8 8v166H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h168v236H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h168v166c0 4.4 3.6 8 8 8h64c4.4 0 8-3.6 8-8V706h228v166c0 4.4 3.6 8 8 8h64c4.4 0 8-3.6 8-8V706h164c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8H708V394h164zM628 630H400V394h228v236z"}}]},name:"number",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},53508:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"}}]},name:"paper-clip",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},99890:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2zM304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z"}}]},name:"picture",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},28595:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M719.4 499.1l-296.1-215A15.9 15.9 0 00398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 000-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"}}]},name:"play-circle",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},34419:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},96473:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"}},{tag:"path",attrs:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8z"}}]},name:"plus",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},89245:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},69993:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M300 328a60 60 0 10120 0 60 60 0 10-120 0zM852 64H172c-17.7 0-32 14.3-32 32v660c0 17.7 14.3 32 32 32h680c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-32 660H204V128h616v596zM604 328a60 60 0 10120 0 60 60 0 10-120 0zm250.2 556H169.8c-16.5 0-29.8 14.3-29.8 32v36c0 4.4 3.3 8 7.4 8h729.1c4.1 0 7.4-3.6 7.4-8v-36c.1-17.7-13.2-32-29.7-32zM664 508H360c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h304c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}}]},name:"robot",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},78355:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},23907:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M931.4 498.9L94.9 79.5c-3.4-1.7-7.3-2.1-11-1.2a15.99 15.99 0 00-11.7 19.3l86.2 352.2c1.3 5.3 5.2 9.6 10.4 11.3l147.7 50.7-147.6 50.7c-5.2 1.8-9.1 6-10.3 11.3L72.2 926.5c-.9 3.7-.5 7.6 1.2 10.9 3.9 7.9 13.5 11.1 21.5 7.2l836.5-417c3.1-1.5 5.6-4.1 7.2-7.1 3.9-8 .7-17.6-7.2-21.6zM170.8 826.3l50.3-205.6 295.2-101.3c2.3-.8 4.2-2.6 5-5 1.4-4.2-.8-8.7-5-10.2L221.1 403 171 198.2l628 314.9-628.2 313.2z"}}]},name:"send",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},55322:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z"}}]},name:"setting",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},8881:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372 0-89 31.3-170.8 83.5-234.8l523.3 523.3C682.8 852.7 601 884 512 884zm288.5-137.2L277.2 223.5C341.2 171.3 423 140 512 140c205.4 0 372 166.6 372 372 0 89-31.3 170.8-83.5 234.8z"}}]},name:"stop",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},71891:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M483.2 790.3L861.4 412c1.7-1.7 2.5-4 2.3-6.3l-25.5-301.4c-.7-7.8-6.8-13.9-14.6-14.6L522.2 64.3c-2.3-.2-4.7.6-6.3 2.3L137.7 444.8a8.03 8.03 0 000 11.3l334.2 334.2c3.1 3.2 8.2 3.2 11.3 0zm62.6-651.7l224.6 19 19 224.6L477.5 694 233.9 450.5l311.9-311.9zm60.16 186.23a48 48 0 1067.88-67.89 48 48 0 10-67.88 67.89zM889.7 539.8l-39.6-39.5a8.03 8.03 0 00-11.3 0l-362 361.3-237.6-237a8.03 8.03 0 00-11.3 0l-39.6 39.5a8.03 8.03 0 000 11.3l243.2 242.8 39.6 39.5c3.1 3.1 8.2 3.1 11.3 0l407.3-406.6c3.1-3.1 3.1-8.2 0-11.3z"}}]},name:"tags",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},41361:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M824.2 699.9a301.55 301.55 0 00-86.4-60.4C783.1 602.8 812 546.8 812 484c0-110.8-92.4-201.7-203.2-200-109.1 1.7-197 90.6-197 200 0 62.8 29 118.8 74.2 155.5a300.95 300.95 0 00-86.4 60.4C345 754.6 314 826.8 312 903.8a8 8 0 008 8.2h56c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5A226.62 226.62 0 01612 684c60.9 0 118.2 23.7 161.3 66.8C814.5 792 838 846.3 840 904.3c.1 4.3 3.7 7.7 8 7.7h56a8 8 0 008-8.2c-2-77-33-149.2-87.8-203.9zM612 612c-34.2 0-66.4-13.3-90.5-37.5a126.86 126.86 0 01-37.5-91.8c.3-32.8 13.4-64.5 36.3-88 24-24.6 56.1-38.3 90.4-38.7 33.9-.3 66.8 12.9 91 36.6 24.8 24.3 38.4 56.8 38.4 91.4 0 34.2-13.3 66.3-37.5 90.5A127.3 127.3 0 01612 612zM361.5 510.4c-.9-8.7-1.4-17.5-1.4-26.4 0-15.9 1.5-31.4 4.3-46.5.7-3.6-1.2-7.3-4.5-8.8-13.6-6.1-26.1-14.5-36.9-25.1a127.54 127.54 0 01-38.7-95.4c.9-32.1 13.8-62.6 36.3-85.6 24.7-25.3 57.9-39.1 93.2-38.7 31.9.3 62.7 12.6 86 34.4 7.9 7.4 14.7 15.6 20.4 24.4 2 3.1 5.9 4.4 9.3 3.2 17.6-6.1 36.2-10.4 55.3-12.4 5.6-.6 8.8-6.6 6.3-11.6-32.5-64.3-98.9-108.7-175.7-109.9-110.9-1.7-203.3 89.2-203.3 199.9 0 62.8 28.9 118.8 74.2 155.5-31.8 14.7-61.1 35-86.5 60.4-54.8 54.7-85.8 126.9-87.8 204a8 8 0 008 8.2h56.1c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5 29.4-29.4 65.4-49.8 104.7-59.7 3.9-1 6.5-4.7 6-8.7z"}}]},name:"team",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},58630:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M876.6 239.5c-.5-.9-1.2-1.8-2-2.5-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5 3.6-6.1 1.6-13.9-4.5-17.5-98.2-58-226.8-44.7-311.3 39.7-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4 84.4-84.5 97.7-213.1 39.7-311.3zM786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8-.1-.1-274 274.1-79.2-79.2 230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 01144-53.5L537 318.9a32.05 32.05 0 000 45.3l124.5 124.5a32.05 32.05 0 0045.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9z"}}]},name:"tool",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},3632:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},35291:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(1119),o=n(2265),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M464 720a48 48 0 1096 0 48 48 0 10-96 0zm16-304v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8zm475.7 440l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zm-783.5-27.9L512 239.9l339.8 588.2H172.2z"}}]},name:"warning",theme:"outlined"},a=n(55015),l=o.forwardRef(function(e,t){return o.createElement(a.Z,(0,r.Z)({},e,{ref:t,icon:i}))})},58747:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(5853),o=n(2265);let i=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),o.createElement("path",{d:"M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z"}))}},4537:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(5853),o=n(2265);let i=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),o.createElement("path",{d:"M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 10.5858L9.17157 7.75736L7.75736 9.17157L10.5858 12L7.75736 14.8284L9.17157 16.2426L12 13.4142L14.8284 16.2426L16.2426 14.8284L13.4142 12L16.2426 9.17157L14.8284 7.75736L12 10.5858Z"}))}},75105:function(e,t,n){"use strict";n.d(t,{Z:function(){return et}});var r=n(5853),o=n(2265),i=n(47625),a=n(93765),l=n(87602),s=n(59221),c=n(86757),u=n.n(c),d=n(95645),f=n.n(d),p=n(77571),h=n.n(p),m=n(82559),g=n.n(m),v=n(21652),y=n.n(v),b=n(57165),x=n(81889),w=n(9841),k=n(58772),S=n(34067),E=n(16630),O=n(85355),C=n(82944),j=["layout","type","stroke","connectNulls","isRange","ref"];function _(e){return(_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function P(){return(P=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(i,j));return o.createElement(w.m,{clipPath:n?"url(#clipPath-".concat(r,")"):null},o.createElement(b.H,P({},(0,C.L6)(d,!0),{points:e,connectNulls:c,type:l,baseLine:t,layout:a,stroke:"none",className:"recharts-area-area"})),"none"!==s&&o.createElement(b.H,P({},(0,C.L6)(this.props,!1),{className:"recharts-area-curve",layout:a,type:l,connectNulls:c,fill:"none",points:e})),"none"!==s&&u&&o.createElement(b.H,P({},(0,C.L6)(this.props,!1),{className:"recharts-area-curve",layout:a,type:l,connectNulls:c,fill:"none",points:t})))}},{key:"renderAreaWithAnimation",value:function(e,t){var n=this,r=this.props,i=r.points,a=r.baseLine,l=r.isAnimationActive,c=r.animationBegin,u=r.animationDuration,d=r.animationEasing,f=r.animationId,p=this.state,m=p.prevPoints,v=p.prevBaseLine;return o.createElement(s.ZP,{begin:c,duration:u,isActive:l,easing:d,from:{t:0},to:{t:1},key:"area-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(r){var l=r.t;if(m){var s,c=m.length/i.length,u=i.map(function(e,t){var n=Math.floor(t*c);if(m[n]){var r=m[n],o=(0,E.k4)(r.x,e.x),i=(0,E.k4)(r.y,e.y);return M(M({},e),{},{x:o(l),y:i(l)})}return e});return s=(0,E.hj)(a)&&"number"==typeof a?(0,E.k4)(v,a)(l):h()(a)||g()(a)?(0,E.k4)(v,0)(l):a.map(function(e,t){var n=Math.floor(t*c);if(v[n]){var r=v[n],o=(0,E.k4)(r.x,e.x),i=(0,E.k4)(r.y,e.y);return M(M({},e),{},{x:o(l),y:i(l)})}return e}),n.renderAreaStatically(u,s,e,t)}return o.createElement(w.m,null,o.createElement("defs",null,o.createElement("clipPath",{id:"animationClipPath-".concat(t)},n.renderClipRect(l))),o.createElement(w.m,{clipPath:"url(#animationClipPath-".concat(t,")")},n.renderAreaStatically(i,a,e,t)))})}},{key:"renderArea",value:function(e,t){var n=this.props,r=n.points,o=n.baseLine,i=n.isAnimationActive,a=this.state,l=a.prevPoints,s=a.prevBaseLine,c=a.totalLength;return i&&r&&r.length&&(!l&&c>0||!y()(l,r)||!y()(s,o))?this.renderAreaWithAnimation(e,t):this.renderAreaStatically(r,o,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,r=t.dot,i=t.points,a=t.className,s=t.top,c=t.left,u=t.xAxis,d=t.yAxis,f=t.width,p=t.height,m=t.isAnimationActive,g=t.id;if(n||!i||!i.length)return null;var v=this.state.isAnimationFinished,y=1===i.length,b=(0,l.Z)("recharts-area",a),x=u&&u.allowDataOverflow,S=d&&d.allowDataOverflow,E=x||S,O=h()(g)?this.id:g,j=null!==(e=(0,C.L6)(r,!1))&&void 0!==e?e:{r:3,strokeWidth:2},_=j.r,P=j.strokeWidth,T=((0,C.$k)(r)?r:{}).clipDot,M=void 0===T||T,N=2*(void 0===_?3:_)+(void 0===P?2:P);return o.createElement(w.m,{className:b},x||S?o.createElement("defs",null,o.createElement("clipPath",{id:"clipPath-".concat(O)},o.createElement("rect",{x:x?c:c-f/2,y:S?s:s-p/2,width:x?f:2*f,height:S?p:2*p})),!M&&o.createElement("clipPath",{id:"clipPath-dots-".concat(O)},o.createElement("rect",{x:c-N/2,y:s-N/2,width:f+N,height:p+N}))):null,y?null:this.renderArea(E,O),(r||y)&&this.renderDots(E,M,O),(!m||v)&&k.e.renderCallByParent(this.props,i))}}],r=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,curBaseLine:e.baseLine,prevPoints:t.curPoints,prevBaseLine:t.curBaseLine}:e.points!==t.curPoints||e.baseLine!==t.curBaseLine?{curPoints:e.points,curBaseLine:e.baseLine}:null}}],n&&N(a.prototype,n),r&&N(a,r),Object.defineProperty(a,"prototype",{writable:!1}),a}(o.PureComponent);D(z,"displayName","Area"),D(z,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!S.x.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"}),D(z,"getBaseValue",function(e,t,n,r){var o=e.layout,i=e.baseValue,a=t.props.baseValue,l=null!=a?a:i;if((0,E.hj)(l)&&"number"==typeof l)return l;var s="horizontal"===o?r:n,c=s.scale.domain();if("number"===s.type){var u=Math.max(c[0],c[1]),d=Math.min(c[0],c[1]);return"dataMin"===l?d:"dataMax"===l?u:u<0?u:Math.max(Math.min(c[0],c[1]),0)}return"dataMin"===l?c[0]:"dataMax"===l?c[1]:c[0]}),D(z,"getComposedData",function(e){var t,n=e.props,r=e.item,o=e.xAxis,i=e.yAxis,a=e.xAxisTicks,l=e.yAxisTicks,s=e.bandSize,c=e.dataKey,u=e.stackedData,d=e.dataStartIndex,f=e.displayedData,p=e.offset,h=n.layout,m=u&&u.length,g=z.getBaseValue(n,r,o,i),v="horizontal"===h,y=!1,b=f.map(function(e,t){m?n=u[d+t]:Array.isArray(n=(0,O.F$)(e,c))?y=!0:n=[g,n];var n,r=null==n[1]||m&&null==(0,O.F$)(e,c);return v?{x:(0,O.Hv)({axis:o,ticks:a,bandSize:s,entry:e,index:t}),y:r?null:i.scale(n[1]),value:n,payload:e}:{x:r?null:o.scale(n[1]),y:(0,O.Hv)({axis:i,ticks:l,bandSize:s,entry:e,index:t}),value:n,payload:e}});return t=m||y?b.map(function(e){var t=Array.isArray(e.value)?e.value[0]:null;return v?{x:e.x,y:null!=t&&null!=e.y?i.scale(t):null}:{x:null!=t?o.scale(t):null,y:e.y}}):v?i.scale(g):o.scale(g),M({points:b,baseLine:t,layout:h,isRange:y},p)}),D(z,"renderDotItem",function(e,t){return o.isValidElement(e)?o.cloneElement(e,t):u()(e)?e(t):o.createElement(x.o,P({},t,{className:"recharts-area-dot"}))});var Z=n(97059),B=n(62994),F=n(25311),H=(0,a.z)({chartName:"AreaChart",GraphicalChild:z,axisComponents:[{axisType:"xAxis",AxisComp:Z.K},{axisType:"yAxis",AxisComp:B.B}],formatAxisMap:F.t9}),q=n(56940),U=n(8147),W=n(22190),K=n(54061),V=n(65278),$=n(98593),X=n(69448),G=n(32644),Y=n(7084),Q=n(26898),J=n(97324),ee=n(1153);let et=o.forwardRef((e,t)=>{let{data:n=[],categories:a=[],index:l,stack:s=!1,colors:c=Q.s,valueFormatter:u=ee.Cj,startEndOnly:d=!1,showXAxis:f=!0,showYAxis:p=!0,yAxisWidth:h=56,intervalType:m="equidistantPreserveStart",showAnimation:g=!1,animationDuration:v=900,showTooltip:y=!0,showLegend:b=!0,showGridLines:w=!0,showGradient:k=!0,autoMinValue:S=!1,curveType:E="linear",minValue:O,maxValue:C,connectNulls:j=!1,allowDecimals:_=!0,noDataText:P,className:T,onValueChange:M,enableLegendSlider:N=!1,customTooltip:A,rotateLabelX:I,tickGap:R=5}=e,D=(0,r._T)(e,["data","categories","index","stack","colors","valueFormatter","startEndOnly","showXAxis","showYAxis","yAxisWidth","intervalType","showAnimation","animationDuration","showTooltip","showLegend","showGridLines","showGradient","autoMinValue","curveType","minValue","maxValue","connectNulls","allowDecimals","noDataText","className","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","tickGap"]),L=(f||p)&&(!d||p)?20:0,[F,et]=(0,o.useState)(60),[en,er]=(0,o.useState)(void 0),[eo,ei]=(0,o.useState)(void 0),ea=(0,G.me)(a,c),el=(0,G.i4)(S,O,C),es=!!M;function ec(e){es&&(e===eo&&!en||(0,G.FB)(n,e)&&en&&en.dataKey===e?(ei(void 0),null==M||M(null)):(ei(e),null==M||M({eventType:"category",categoryClicked:e})),er(void 0))}return o.createElement("div",Object.assign({ref:t,className:(0,J.q)("w-full h-80",T)},D),o.createElement(i.h,{className:"h-full w-full"},(null==n?void 0:n.length)?o.createElement(H,{data:n,onClick:es&&(eo||en)?()=>{er(void 0),ei(void 0),null==M||M(null)}:void 0},w?o.createElement(q.q,{className:(0,J.q)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:!0,vertical:!1}):null,o.createElement(Z.K,{padding:{left:L,right:L},hide:!f,dataKey:l,tick:{transform:"translate(0, 6)"},ticks:d?[n[0][l],n[n.length-1][l]]:void 0,fill:"",stroke:"",className:(0,J.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),interval:d?"preserveStartEnd":m,tickLine:!1,axisLine:!1,minTickGap:R,angle:null==I?void 0:I.angle,dy:null==I?void 0:I.verticalShift,height:null==I?void 0:I.xAxisHeight}),o.createElement(B.B,{width:h,hide:!p,axisLine:!1,tickLine:!1,type:"number",domain:el,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,J.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:u,allowDecimals:_}),o.createElement(U.u,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{stroke:"#d1d5db",strokeWidth:1},content:y?e=>{let{active:t,payload:n,label:r}=e;return A?o.createElement(A,{payload:null==n?void 0:n.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!==(t=ea.get(e.dataKey))&&void 0!==t?t:Y.fr.Gray})}),active:t,label:r}):o.createElement($.ZP,{active:t,payload:n,label:r,valueFormatter:u,categoryColors:ea})}:o.createElement(o.Fragment,null),position:{y:0}}),b?o.createElement(W.D,{verticalAlign:"top",height:F,content:e=>{let{payload:t}=e;return(0,V.Z)({payload:t},ea,et,eo,es?e=>ec(e):void 0,N)}}):null,a.map(e=>{var t,n;return o.createElement("defs",{key:e},k?o.createElement("linearGradient",{className:(0,ee.bM)(null!==(t=ea.get(e))&&void 0!==t?t:Y.fr.Gray,Q.K.text).textColor,id:ea.get(e),x1:"0",y1:"0",x2:"0",y2:"1"},o.createElement("stop",{offset:"5%",stopColor:"currentColor",stopOpacity:en||eo&&eo!==e?.15:.4}),o.createElement("stop",{offset:"95%",stopColor:"currentColor",stopOpacity:0})):o.createElement("linearGradient",{className:(0,ee.bM)(null!==(n=ea.get(e))&&void 0!==n?n:Y.fr.Gray,Q.K.text).textColor,id:ea.get(e),x1:"0",y1:"0",x2:"0",y2:"1"},o.createElement("stop",{stopColor:"currentColor",stopOpacity:en||eo&&eo!==e?.1:.3})))}),a.map(e=>{var t;return o.createElement(z,{className:(0,ee.bM)(null!==(t=ea.get(e))&&void 0!==t?t:Y.fr.Gray,Q.K.text).strokeColor,strokeOpacity:en||eo&&eo!==e?.3:1,activeDot:e=>{var t;let{cx:r,cy:i,stroke:a,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,dataKey:u}=e;return o.createElement(x.o,{className:(0,J.q)("stroke-tremor-background dark:stroke-dark-tremor-background",M?"cursor-pointer":"",(0,ee.bM)(null!==(t=ea.get(u))&&void 0!==t?t:Y.fr.Gray,Q.K.text).fillColor),cx:r,cy:i,r:5,fill:"",stroke:a,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,onClick:(t,r)=>{r.stopPropagation(),es&&(e.index===(null==en?void 0:en.index)&&e.dataKey===(null==en?void 0:en.dataKey)||(0,G.FB)(n,e.dataKey)&&eo&&eo===e.dataKey?(ei(void 0),er(void 0),null==M||M(null)):(ei(e.dataKey),er({index:e.index,dataKey:e.dataKey}),null==M||M(Object.assign({eventType:"dot",categoryClicked:e.dataKey},e.payload))))}})},dot:t=>{var r;let{stroke:i,strokeLinecap:a,strokeLinejoin:l,strokeWidth:s,cx:c,cy:u,dataKey:d,index:f}=t;return(0,G.FB)(n,e)&&!(en||eo&&eo!==e)||(null==en?void 0:en.index)===f&&(null==en?void 0:en.dataKey)===e?o.createElement(x.o,{key:f,cx:c,cy:u,r:5,stroke:i,fill:"",strokeLinecap:a,strokeLinejoin:l,strokeWidth:s,className:(0,J.q)("stroke-tremor-background dark:stroke-dark-tremor-background",M?"cursor-pointer":"",(0,ee.bM)(null!==(r=ea.get(d))&&void 0!==r?r:Y.fr.Gray,Q.K.text).fillColor)}):o.createElement(o.Fragment,{key:f})},key:e,name:e,type:E,dataKey:e,stroke:"",fill:"url(#".concat(ea.get(e),")"),strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:g,animationDuration:v,stackId:s?"a":void 0,connectNulls:j})}),M?a.map(e=>o.createElement(K.x,{className:(0,J.q)("cursor-pointer"),strokeOpacity:0,key:e,name:e,type:E,dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:j,onClick:(e,t)=>{t.stopPropagation();let{name:n}=e;ec(n)}})):null):o.createElement(X.Z,{noDataText:P})))});et.displayName="AreaChart"},40278:function(e,t,n){"use strict";n.d(t,{Z:function(){return S}});var r=n(5853),o=n(7084),i=n(26898),a=n(97324),l=n(1153),s=n(2265),c=n(47625),u=n(93765),d=n(31699),f=n(97059),p=n(62994),h=n(25311),m=(0,u.z)({chartName:"BarChart",GraphicalChild:d.$,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:f.K},{axisType:"yAxis",AxisComp:p.B}],formatAxisMap:h.t9}),g=n(56940),v=n(8147),y=n(22190),b=n(65278),x=n(98593),w=n(69448),k=n(32644);let S=s.forwardRef((e,t)=>{let{data:n=[],categories:u=[],index:h,colors:S=i.s,valueFormatter:E=l.Cj,layout:O="horizontal",stack:C=!1,relative:j=!1,startEndOnly:_=!1,animationDuration:P=900,showAnimation:T=!1,showXAxis:M=!0,showYAxis:N=!0,yAxisWidth:A=56,intervalType:I="equidistantPreserveStart",showTooltip:R=!0,showLegend:D=!0,showGridLines:L=!0,autoMinValue:z=!1,minValue:Z,maxValue:B,allowDecimals:F=!0,noDataText:H,onValueChange:q,enableLegendSlider:U=!1,customTooltip:W,rotateLabelX:K,tickGap:V=5,className:$}=e,X=(0,r._T)(e,["data","categories","index","colors","valueFormatter","layout","stack","relative","startEndOnly","animationDuration","showAnimation","showXAxis","showYAxis","yAxisWidth","intervalType","showTooltip","showLegend","showGridLines","autoMinValue","minValue","maxValue","allowDecimals","noDataText","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","tickGap","className"]),G=M||N?20:0,[Y,Q]=(0,s.useState)(60),J=(0,k.me)(u,S),[ee,et]=s.useState(void 0),[en,er]=(0,s.useState)(void 0),eo=!!q;function ei(e,t,n){var r,o,i,a;n.stopPropagation(),q&&((0,k.vZ)(ee,Object.assign(Object.assign({},e.payload),{value:e.value}))?(er(void 0),et(void 0),null==q||q(null)):(er(null===(o=null===(r=e.tooltipPayload)||void 0===r?void 0:r[0])||void 0===o?void 0:o.dataKey),et(Object.assign(Object.assign({},e.payload),{value:e.value})),null==q||q(Object.assign({eventType:"bar",categoryClicked:null===(a=null===(i=e.tooltipPayload)||void 0===i?void 0:i[0])||void 0===a?void 0:a.dataKey},e.payload))))}let ea=(0,k.i4)(z,Z,B);return s.createElement("div",Object.assign({ref:t,className:(0,a.q)("w-full h-80",$)},X),s.createElement(c.h,{className:"h-full w-full"},(null==n?void 0:n.length)?s.createElement(m,{data:n,stackOffset:C?"sign":j?"expand":"none",layout:"vertical"===O?"vertical":"horizontal",onClick:eo&&(en||ee)?()=>{et(void 0),er(void 0),null==q||q(null)}:void 0},L?s.createElement(g.q,{className:(0,a.q)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:"vertical"!==O,vertical:"vertical"===O}):null,"vertical"!==O?s.createElement(f.K,{padding:{left:G,right:G},hide:!M,dataKey:h,interval:_?"preserveStartEnd":I,tick:{transform:"translate(0, 6)"},ticks:_?[n[0][h],n[n.length-1][h]]:void 0,fill:"",stroke:"",className:(0,a.q)("mt-4 text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,angle:null==K?void 0:K.angle,dy:null==K?void 0:K.verticalShift,height:null==K?void 0:K.xAxisHeight,minTickGap:V}):s.createElement(f.K,{hide:!M,type:"number",tick:{transform:"translate(-3, 0)"},domain:ea,fill:"",stroke:"",className:(0,a.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,tickFormatter:E,minTickGap:V,allowDecimals:F,angle:null==K?void 0:K.angle,dy:null==K?void 0:K.verticalShift,height:null==K?void 0:K.xAxisHeight}),"vertical"!==O?s.createElement(p.B,{width:A,hide:!N,axisLine:!1,tickLine:!1,type:"number",domain:ea,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,a.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:j?e=>"".concat((100*e).toString()," %"):E,allowDecimals:F}):s.createElement(p.B,{width:A,hide:!N,dataKey:h,axisLine:!1,tickLine:!1,ticks:_?[n[0][h],n[n.length-1][h]]:void 0,type:"category",interval:"preserveStartEnd",tick:{transform:"translate(0, 6)"},fill:"",stroke:"",className:(0,a.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content")}),s.createElement(v.u,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{fill:"#d1d5db",opacity:"0.15"},content:R?e=>{let{active:t,payload:n,label:r}=e;return W?s.createElement(W,{payload:null==n?void 0:n.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!==(t=J.get(e.dataKey))&&void 0!==t?t:o.fr.Gray})}),active:t,label:r}):s.createElement(x.ZP,{active:t,payload:n,label:r,valueFormatter:E,categoryColors:J})}:s.createElement(s.Fragment,null),position:{y:0}}),D?s.createElement(y.D,{verticalAlign:"top",height:Y,content:e=>{let{payload:t}=e;return(0,b.Z)({payload:t},J,Q,en,eo?e=>{eo&&(e!==en||ee?(er(e),null==q||q({eventType:"category",categoryClicked:e})):(er(void 0),null==q||q(null)),et(void 0))}:void 0,U)}}):null,u.map(e=>{var t;return s.createElement(d.$,{className:(0,a.q)((0,l.bM)(null!==(t=J.get(e))&&void 0!==t?t:o.fr.Gray,i.K.background).fillColor,q?"cursor-pointer":""),key:e,name:e,type:"linear",stackId:C||j?"a":void 0,dataKey:e,fill:"",isAnimationActive:T,animationDuration:P,shape:e=>((e,t,n,r)=>{let{fillOpacity:o,name:i,payload:a,value:l}=e,{x:c,width:u,y:d,height:f}=e;return"horizontal"===r&&f<0?(d+=f,f=Math.abs(f)):"vertical"===r&&u<0&&(c+=u,u=Math.abs(u)),s.createElement("rect",{x:c,y:d,width:u,height:f,opacity:t||n&&n!==i?(0,k.vZ)(t,Object.assign(Object.assign({},a),{value:l}))?o:.3:o})})(e,ee,en,O),onClick:ei})})):s.createElement(w.Z,{noDataText:H})))});S.displayName="BarChart"},14042:function(e,t,n){"use strict";n.d(t,{Z:function(){return eZ}});var r=n(5853),o=n(7084),i=n(26898),a=n(97324),l=n(1153),s=n(2265),c=n(60474),u=n(47625),d=n(93765),f=n(86757),p=n.n(f),h=n(9841),m=n(81889),g=n(87602),v=n(82944),y=["points","className","baseLinePoints","connectNulls"];function b(){return(b=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n0&&void 0!==arguments[0]?arguments[0]:[],t=[[]];return e.forEach(function(e){k(e)?t[t.length-1].push(e):t[t.length-1].length>0&&t.push([])}),k(e[0])&&t[t.length-1].push(e[0]),t[t.length-1].length<=0&&(t=t.slice(0,-1)),t},E=function(e,t){var n=S(e);t&&(n=[n.reduce(function(e,t){return[].concat(x(e),x(t))},[])]);var r=n.map(function(e){return e.reduce(function(e,t,n){return"".concat(e).concat(0===n?"M":"L").concat(t.x,",").concat(t.y)},"")}).join("");return 1===n.length?"".concat(r,"Z"):r},O=function(e,t,n){var r=E(e,n);return"".concat("Z"===r.slice(-1)?r.slice(0,-1):r,"L").concat(E(t.reverse(),n).slice(1))},C=function(e){var t=e.points,n=e.className,r=e.baseLinePoints,o=e.connectNulls,i=function(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,y);if(!t||!t.length)return null;var a=(0,g.Z)("recharts-polygon",n);if(r&&r.length){var l=i.stroke&&"none"!==i.stroke,c=O(t,r,o);return s.createElement("g",{className:a},s.createElement("path",b({},(0,v.L6)(i,!0),{fill:"Z"===c.slice(-1)?i.fill:"none",stroke:"none",d:c})),l?s.createElement("path",b({},(0,v.L6)(i,!0),{fill:"none",d:E(t,o)})):null,l?s.createElement("path",b({},(0,v.L6)(i,!0),{fill:"none",d:E(r,o)})):null)}var u=E(t,o);return s.createElement("path",b({},(0,v.L6)(i,!0),{fill:"Z"===u.slice(-1)?i.fill:"none",className:a,d:u}))},j=n(58811),_=n(41637),P=n(39206);function T(e){return(T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function M(){return(M=Object.assign?Object.assign.bind():function(e){for(var t=1;t1e-5?"outer"===t?"start":"end":n<-.00001?"outer"===t?"end":"start":"middle"}},{key:"renderAxisLine",value:function(){var e=this.props,t=e.cx,n=e.cy,r=e.radius,o=e.axisLine,i=e.axisLineType,a=A(A({},(0,v.L6)(this.props,!1)),{},{fill:"none"},(0,v.L6)(o,!1));if("circle"===i)return s.createElement(m.o,M({className:"recharts-polar-angle-axis-line"},a,{cx:t,cy:n,r:r}));var l=this.props.ticks.map(function(e){return(0,P.op)(t,n,r,e.coordinate)});return s.createElement(C,M({className:"recharts-polar-angle-axis-line"},a,{points:l}))}},{key:"renderTicks",value:function(){var e=this,t=this.props,n=t.ticks,r=t.tick,o=t.tickLine,a=t.tickFormatter,l=t.stroke,c=(0,v.L6)(this.props,!1),u=(0,v.L6)(r,!1),d=A(A({},c),{},{fill:"none"},(0,v.L6)(o,!1)),f=n.map(function(t,n){var f=e.getTickLineCoord(t),p=A(A(A({textAnchor:e.getTickTextAnchor(t)},c),{},{stroke:"none",fill:l},u),{},{index:n,payload:t,x:f.x2,y:f.y2});return s.createElement(h.m,M({className:"recharts-polar-angle-axis-tick",key:"tick-".concat(t.coordinate)},(0,_.bw)(e.props,t,n)),o&&s.createElement("line",M({className:"recharts-polar-angle-axis-tick-line"},d,f)),r&&i.renderTickItem(r,p,a?a(t.value,n):t.value))});return s.createElement(h.m,{className:"recharts-polar-angle-axis-ticks"},f)}},{key:"render",value:function(){var e=this.props,t=e.ticks,n=e.radius,r=e.axisLine;return!(n<=0)&&t&&t.length?s.createElement(h.m,{className:"recharts-polar-angle-axis"},r&&this.renderAxisLine(),this.renderTicks()):null}}],r=[{key:"renderTickItem",value:function(e,t,n){return s.isValidElement(e)?s.cloneElement(e,t):p()(e)?e(t):s.createElement(j.x,M({},t,{className:"recharts-polar-angle-axis-tick-value"}),n)}}],n&&I(i.prototype,n),r&&I(i,r),Object.defineProperty(i,"prototype",{writable:!1}),i}(s.PureComponent);L(B,"displayName","PolarAngleAxis"),L(B,"axisType","angleAxis"),L(B,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var F=n(35802),H=n.n(F),q=n(37891),U=n.n(q),W=n(26680),K=["cx","cy","angle","ticks","axisLine"],V=["ticks","tick","angle","tickFormatter","stroke"];function $(e){return($="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function X(){return(X=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function J(e,t){for(var n=0;n0?el()(e,"paddingAngle",0):0;if(n){var l=(0,eg.k4)(n.endAngle-n.startAngle,e.endAngle-e.startAngle),s=eS(eS({},e),{},{startAngle:i+a,endAngle:i+l(r)+a});o.push(s),i=s.endAngle}else{var c=e.endAngle,d=e.startAngle,f=(0,eg.k4)(0,c-d)(r),p=eS(eS({},e),{},{startAngle:i+a,endAngle:i+f+a});o.push(p),i=p.endAngle}}),s.createElement(h.m,null,e.renderSectorsStatically(o))})}},{key:"attachKeyboardHandlers",value:function(e){var t=this;e.onkeydown=function(e){if(!e.altKey)switch(e.key){case"ArrowLeft":var n=++t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[n].focus(),t.setState({sectorToFocus:n});break;case"ArrowRight":var r=--t.state.sectorToFocus<0?t.sectorRefs.length-1:t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[r].focus(),t.setState({sectorToFocus:r});break;case"Escape":t.sectorRefs[t.state.sectorToFocus].blur(),t.setState({sectorToFocus:0})}}}},{key:"renderSectors",value:function(){var e=this.props,t=e.sectors,n=e.isAnimationActive,r=this.state.prevSectors;return n&&t&&t.length&&(!r||!ec()(r,t))?this.renderSectorsWithAnimation():this.renderSectorsStatically(t)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var e=this,t=this.props,n=t.hide,r=t.sectors,o=t.className,i=t.label,a=t.cx,l=t.cy,c=t.innerRadius,u=t.outerRadius,d=t.isAnimationActive,f=this.state.isAnimationFinished;if(n||!r||!r.length||!(0,eg.hj)(a)||!(0,eg.hj)(l)||!(0,eg.hj)(c)||!(0,eg.hj)(u))return null;var p=(0,g.Z)("recharts-pie",o);return s.createElement(h.m,{tabIndex:this.props.rootTabIndex,className:p,ref:function(t){e.pieRef=t}},this.renderSectors(),i&&this.renderLabels(r),W._.renderCallByParent(this.props,null,!1),(!d||f)&&ep.e.renderCallByParent(this.props,r,!1))}}],r=[{key:"getDerivedStateFromProps",value:function(e,t){return t.prevIsAnimationActive!==e.isAnimationActive?{prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:[],isAnimationFinished:!0}:e.isAnimationActive&&e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:t.curSectors,isAnimationFinished:!0}:e.sectors!==t.curSectors?{curSectors:e.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(e,t){return e>t?"start":e=360?x:x-1)*u,k=i.reduce(function(e,t){var n=(0,ev.F$)(t,b,0);return e+((0,eg.hj)(n)?n:0)},0);return k>0&&(t=i.map(function(e,t){var r,o=(0,ev.F$)(e,b,0),i=(0,ev.F$)(e,f,t),a=((0,eg.hj)(o)?o:0)/k,c=(r=t?n.endAngle+(0,eg.uY)(v)*u*(0!==o?1:0):s)+(0,eg.uY)(v)*((0!==o?m:0)+a*w),d=(r+c)/2,p=(g.innerRadius+g.outerRadius)/2,y=[{name:i,value:o,payload:e,dataKey:b,type:h}],x=(0,P.op)(g.cx,g.cy,p,d);return n=eS(eS(eS({percent:a,cornerRadius:l,name:i,tooltipPayload:y,midAngle:d,middleRadius:p,tooltipPosition:x},e),g),{},{value:(0,ev.F$)(e,b),startAngle:r,endAngle:c,payload:e,paddingAngle:(0,eg.uY)(v)*u})})),eS(eS({},g),{},{sectors:t,data:i})});var eM=(0,d.z)({chartName:"PieChart",GraphicalChild:eT,validateTooltipEventTypes:["item"],defaultTooltipEventType:"item",legendContent:"children",axisComponents:[{axisType:"angleAxis",AxisComp:B},{axisType:"radiusAxis",AxisComp:eo}],formatAxisMap:P.t9,defaultProps:{layout:"centric",startAngle:0,endAngle:360,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"}}),eN=n(8147),eA=n(69448),eI=n(98593);let eR=e=>{let{active:t,payload:n,valueFormatter:r}=e;if(t&&(null==n?void 0:n[0])){let e=null==n?void 0:n[0];return s.createElement(eI.$B,null,s.createElement("div",{className:(0,a.q)("px-4 py-2")},s.createElement(eI.zX,{value:r(e.value),name:e.name,color:e.payload.color})))}return null},eD=(e,t)=>e.map((e,n)=>{let r=ne||t((0,l.vP)(n.map(e=>e[r]))),ez=e=>{let{cx:t,cy:n,innerRadius:r,outerRadius:o,startAngle:i,endAngle:a,className:l}=e;return s.createElement("g",null,s.createElement(c.L,{cx:t,cy:n,innerRadius:r,outerRadius:o,startAngle:i,endAngle:a,className:l,fill:"",opacity:.3,style:{outline:"none"}}))},eZ=s.forwardRef((e,t)=>{let{data:n=[],category:c="value",index:d="name",colors:f=i.s,variant:p="donut",valueFormatter:h=l.Cj,label:m,showLabel:g=!0,animationDuration:v=900,showAnimation:y=!1,showTooltip:b=!0,noDataText:x,onValueChange:w,customTooltip:k,className:S}=e,E=(0,r._T)(e,["data","category","index","colors","variant","valueFormatter","label","showLabel","animationDuration","showAnimation","showTooltip","noDataText","onValueChange","customTooltip","className"]),O="donut"==p,C=eL(m,h,n,c),[j,_]=s.useState(void 0),P=!!w;return(0,s.useEffect)(()=>{let e=document.querySelectorAll(".recharts-pie-sector");e&&e.forEach(e=>{e.setAttribute("style","outline: none")})},[j]),s.createElement("div",Object.assign({ref:t,className:(0,a.q)("w-full h-40",S)},E),s.createElement(u.h,{className:"h-full w-full"},(null==n?void 0:n.length)?s.createElement(eM,{onClick:P&&j?()=>{_(void 0),null==w||w(null)}:void 0,margin:{top:0,left:0,right:0,bottom:0}},g&&O?s.createElement("text",{className:(0,a.q)("fill-tremor-content-emphasis","dark:fill-dark-tremor-content-emphasis"),x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle"},C):null,s.createElement(eT,{className:(0,a.q)("stroke-tremor-background dark:stroke-dark-tremor-background",w?"cursor-pointer":"cursor-default"),data:eD(n,f),cx:"50%",cy:"50%",startAngle:90,endAngle:-270,innerRadius:O?"75%":"0%",outerRadius:"100%",stroke:"",strokeLinejoin:"round",dataKey:c,nameKey:d,isAnimationActive:y,animationDuration:v,onClick:function(e,t,n){n.stopPropagation(),P&&(j===t?(_(void 0),null==w||w(null)):(_(t),null==w||w(Object.assign({eventType:"slice"},e.payload.payload))))},activeIndex:j,inactiveShape:ez,style:{outline:"none"}}),s.createElement(eN.u,{wrapperStyle:{outline:"none"},isAnimationActive:!1,content:b?e=>{var t;let{active:n,payload:r}=e;return k?s.createElement(k,{payload:null==r?void 0:r.map(e=>{var t,n,i;return Object.assign(Object.assign({},e),{color:null!==(i=null===(n=null===(t=null==r?void 0:r[0])||void 0===t?void 0:t.payload)||void 0===n?void 0:n.color)&&void 0!==i?i:o.fr.Gray})}),active:n,label:null===(t=null==r?void 0:r[0])||void 0===t?void 0:t.name}):s.createElement(eR,{active:n,payload:r,valueFormatter:h})}:s.createElement(s.Fragment,null)})):s.createElement(eA.Z,{noDataText:x})))});eZ.displayName="DonutChart"},59664:function(e,t,n){"use strict";n.d(t,{Z:function(){return E}});var r=n(5853),o=n(2265),i=n(47625),a=n(93765),l=n(54061),s=n(97059),c=n(62994),u=n(25311),d=(0,a.z)({chartName:"LineChart",GraphicalChild:l.x,axisComponents:[{axisType:"xAxis",AxisComp:s.K},{axisType:"yAxis",AxisComp:c.B}],formatAxisMap:u.t9}),f=n(56940),p=n(8147),h=n(22190),m=n(81889),g=n(65278),v=n(98593),y=n(69448),b=n(32644),x=n(7084),w=n(26898),k=n(97324),S=n(1153);let E=o.forwardRef((e,t)=>{let{data:n=[],categories:a=[],index:u,colors:E=w.s,valueFormatter:O=S.Cj,startEndOnly:C=!1,showXAxis:j=!0,showYAxis:_=!0,yAxisWidth:P=56,intervalType:T="equidistantPreserveStart",animationDuration:M=900,showAnimation:N=!1,showTooltip:A=!0,showLegend:I=!0,showGridLines:R=!0,autoMinValue:D=!1,curveType:L="linear",minValue:z,maxValue:Z,connectNulls:B=!1,allowDecimals:F=!0,noDataText:H,className:q,onValueChange:U,enableLegendSlider:W=!1,customTooltip:K,rotateLabelX:V,tickGap:$=5}=e,X=(0,r._T)(e,["data","categories","index","colors","valueFormatter","startEndOnly","showXAxis","showYAxis","yAxisWidth","intervalType","animationDuration","showAnimation","showTooltip","showLegend","showGridLines","autoMinValue","curveType","minValue","maxValue","connectNulls","allowDecimals","noDataText","className","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","tickGap"]),G=j||_?20:0,[Y,Q]=(0,o.useState)(60),[J,ee]=(0,o.useState)(void 0),[et,en]=(0,o.useState)(void 0),er=(0,b.me)(a,E),eo=(0,b.i4)(D,z,Z),ei=!!U;function ea(e){ei&&(e===et&&!J||(0,b.FB)(n,e)&&J&&J.dataKey===e?(en(void 0),null==U||U(null)):(en(e),null==U||U({eventType:"category",categoryClicked:e})),ee(void 0))}return o.createElement("div",Object.assign({ref:t,className:(0,k.q)("w-full h-80",q)},X),o.createElement(i.h,{className:"h-full w-full"},(null==n?void 0:n.length)?o.createElement(d,{data:n,onClick:ei&&(et||J)?()=>{ee(void 0),en(void 0),null==U||U(null)}:void 0},R?o.createElement(f.q,{className:(0,k.q)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:!0,vertical:!1}):null,o.createElement(s.K,{padding:{left:G,right:G},hide:!j,dataKey:u,interval:C?"preserveStartEnd":T,tick:{transform:"translate(0, 6)"},ticks:C?[n[0][u],n[n.length-1][u]]:void 0,fill:"",stroke:"",className:(0,k.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,minTickGap:$,angle:null==V?void 0:V.angle,dy:null==V?void 0:V.verticalShift,height:null==V?void 0:V.xAxisHeight}),o.createElement(c.B,{width:P,hide:!_,axisLine:!1,tickLine:!1,type:"number",domain:eo,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,k.q)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:O,allowDecimals:F}),o.createElement(p.u,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{stroke:"#d1d5db",strokeWidth:1},content:A?e=>{let{active:t,payload:n,label:r}=e;return K?o.createElement(K,{payload:null==n?void 0:n.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!==(t=er.get(e.dataKey))&&void 0!==t?t:x.fr.Gray})}),active:t,label:r}):o.createElement(v.ZP,{active:t,payload:n,label:r,valueFormatter:O,categoryColors:er})}:o.createElement(o.Fragment,null),position:{y:0}}),I?o.createElement(h.D,{verticalAlign:"top",height:Y,content:e=>{let{payload:t}=e;return(0,g.Z)({payload:t},er,Q,et,ei?e=>ea(e):void 0,W)}}):null,a.map(e=>{var t;return o.createElement(l.x,{className:(0,k.q)((0,S.bM)(null!==(t=er.get(e))&&void 0!==t?t:x.fr.Gray,w.K.text).strokeColor),strokeOpacity:J||et&&et!==e?.3:1,activeDot:e=>{var t;let{cx:r,cy:i,stroke:a,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,dataKey:u}=e;return o.createElement(m.o,{className:(0,k.q)("stroke-tremor-background dark:stroke-dark-tremor-background",U?"cursor-pointer":"",(0,S.bM)(null!==(t=er.get(u))&&void 0!==t?t:x.fr.Gray,w.K.text).fillColor),cx:r,cy:i,r:5,fill:"",stroke:a,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,onClick:(t,r)=>{r.stopPropagation(),ei&&(e.index===(null==J?void 0:J.index)&&e.dataKey===(null==J?void 0:J.dataKey)||(0,b.FB)(n,e.dataKey)&&et&&et===e.dataKey?(en(void 0),ee(void 0),null==U||U(null)):(en(e.dataKey),ee({index:e.index,dataKey:e.dataKey}),null==U||U(Object.assign({eventType:"dot",categoryClicked:e.dataKey},e.payload))))}})},dot:t=>{var r;let{stroke:i,strokeLinecap:a,strokeLinejoin:l,strokeWidth:s,cx:c,cy:u,dataKey:d,index:f}=t;return(0,b.FB)(n,e)&&!(J||et&&et!==e)||(null==J?void 0:J.index)===f&&(null==J?void 0:J.dataKey)===e?o.createElement(m.o,{key:f,cx:c,cy:u,r:5,stroke:i,fill:"",strokeLinecap:a,strokeLinejoin:l,strokeWidth:s,className:(0,k.q)("stroke-tremor-background dark:stroke-dark-tremor-background",U?"cursor-pointer":"",(0,S.bM)(null!==(r=er.get(d))&&void 0!==r?r:x.fr.Gray,w.K.text).fillColor)}):o.createElement(o.Fragment,{key:f})},key:e,name:e,type:L,dataKey:e,stroke:"",strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:N,animationDuration:M,connectNulls:B})}),U?a.map(e=>o.createElement(l.x,{className:(0,k.q)("cursor-pointer"),strokeOpacity:0,key:e,name:e,type:L,dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:B,onClick:(e,t)=>{t.stopPropagation();let{name:n}=e;ea(n)}})):null):o.createElement(y.Z,{noDataText:H})))});E.displayName="LineChart"},65278:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(2265);let o=(e,t)=>{let[n,o]=(0,r.useState)(t);(0,r.useEffect)(()=>{let t=()=>{o(window.innerWidth),e()};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[e,n])};var i=n(5853),a=n(26898),l=n(97324),s=n(1153);let c=e=>{var t=(0,i._T)(e,[]);return r.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),r.createElement("path",{d:"M8 12L14 6V18L8 12Z"}))},u=e=>{var t=(0,i._T)(e,[]);return r.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),r.createElement("path",{d:"M16 12L10 18V6L16 12Z"}))},d=(0,s.fn)("Legend"),f=e=>{let{name:t,color:n,onClick:o,activeLegend:i}=e,c=!!o;return r.createElement("li",{className:(0,l.q)(d("legendItem"),"group inline-flex items-center px-2 py-0.5 rounded-tremor-small transition whitespace-nowrap",c?"cursor-pointer":"cursor-default","text-tremor-content",c?"hover:bg-tremor-background-subtle":"","dark:text-dark-tremor-content",c?"dark:hover:bg-dark-tremor-background-subtle":""),onClick:e=>{e.stopPropagation(),null==o||o(t,n)}},r.createElement("svg",{className:(0,l.q)("flex-none h-2 w-2 mr-1.5",(0,s.bM)(n,a.K.text).textColor,i&&i!==t?"opacity-40":"opacity-100"),fill:"currentColor",viewBox:"0 0 8 8"},r.createElement("circle",{cx:4,cy:4,r:4})),r.createElement("p",{className:(0,l.q)("whitespace-nowrap truncate text-tremor-default","text-tremor-content",c?"group-hover:text-tremor-content-emphasis":"","dark:text-dark-tremor-content",i&&i!==t?"opacity-40":"opacity-100",c?"dark:group-hover:text-dark-tremor-content-emphasis":"")},t))},p=e=>{let{icon:t,onClick:n,disabled:o}=e,[i,a]=r.useState(!1),s=r.useRef(null);return r.useEffect(()=>(i?s.current=setInterval(()=>{null==n||n()},300):clearInterval(s.current),()=>clearInterval(s.current)),[i,n]),(0,r.useEffect)(()=>{o&&(clearInterval(s.current),a(!1))},[o]),r.createElement("button",{type:"button",className:(0,l.q)(d("legendSliderButton"),"w-5 group inline-flex items-center truncate rounded-tremor-small transition",o?"cursor-not-allowed":"cursor-pointer",o?"text-tremor-content-subtle":"text-tremor-content hover:text-tremor-content-emphasis hover:bg-tremor-background-subtle",o?"dark:text-dark-tremor-subtle":"dark:text-dark-tremor dark:hover:text-tremor-content-emphasis dark:hover:bg-dark-tremor-background-subtle"),disabled:o,onClick:e=>{e.stopPropagation(),null==n||n()},onMouseDown:e=>{e.stopPropagation(),a(!0)},onMouseUp:e=>{e.stopPropagation(),a(!1)}},r.createElement(t,{className:"w-full"}))},h=r.forwardRef((e,t)=>{var n,o;let{categories:s,colors:h=a.s,className:m,onClickLegendItem:g,activeLegend:v,enableLegendSlider:y=!1}=e,b=(0,i._T)(e,["categories","colors","className","onClickLegendItem","activeLegend","enableLegendSlider"]),x=r.useRef(null),[w,k]=r.useState(null),[S,E]=r.useState(null),O=r.useRef(null),C=(0,r.useCallback)(()=>{let e=null==x?void 0:x.current;e&&k({left:e.scrollLeft>0,right:e.scrollWidth-e.clientWidth>e.scrollLeft})},[k]),j=(0,r.useCallback)(e=>{var t;let n=null==x?void 0:x.current,r=null!==(t=null==n?void 0:n.clientWidth)&&void 0!==t?t:0;n&&y&&(n.scrollTo({left:"left"===e?n.scrollLeft-r:n.scrollLeft+r,behavior:"smooth"}),setTimeout(()=>{C()},400))},[y,C]);r.useEffect(()=>{let e=e=>{"ArrowLeft"===e?j("left"):"ArrowRight"===e&&j("right")};return S?(e(S),O.current=setInterval(()=>{e(S)},300)):clearInterval(O.current),()=>clearInterval(O.current)},[S,j]);let _=e=>{e.stopPropagation(),"ArrowLeft"!==e.key&&"ArrowRight"!==e.key||(e.preventDefault(),E(e.key))},P=e=>{e.stopPropagation(),E(null)};return r.useEffect(()=>{let e=null==x?void 0:x.current;return y&&(C(),null==e||e.addEventListener("keydown",_),null==e||e.addEventListener("keyup",P)),()=>{null==e||e.removeEventListener("keydown",_),null==e||e.removeEventListener("keyup",P)}},[C,y]),r.createElement("ol",Object.assign({ref:t,className:(0,l.q)(d("root"),"relative overflow-hidden",m)},b),r.createElement("div",{ref:x,tabIndex:0,className:(0,l.q)("h-full flex",y?(null==w?void 0:w.right)||(null==w?void 0:w.left)?"pl-4 pr-12 items-center overflow-auto snap-mandatory [&::-webkit-scrollbar]:hidden [scrollbar-width:none]":"":"flex-wrap")},s.map((e,t)=>r.createElement(f,{key:"item-".concat(t),name:e,color:h[t],onClick:g,activeLegend:v}))),y&&((null==w?void 0:w.right)||(null==w?void 0:w.left))?r.createElement(r.Fragment,null,r.createElement("div",{className:(0,l.q)("from-tremor-background","dark:from-dark-tremor-background","absolute top-0 bottom-0 left-0 w-4 bg-gradient-to-r to-transparent pointer-events-none")}),r.createElement("div",{className:(0,l.q)("to-tremor-background","dark:to-dark-tremor-background","absolute top-0 bottom-0 right-10 w-4 bg-gradient-to-r from-transparent pointer-events-none")}),r.createElement("div",{className:(0,l.q)("bg-tremor-background","dark:bg-dark-tremor-background","absolute flex top-0 pr-1 bottom-0 right-0 items-center justify-center h-full")},r.createElement(p,{icon:c,onClick:()=>{E(null),j("left")},disabled:!(null==w?void 0:w.left)}),r.createElement(p,{icon:u,onClick:()=>{E(null),j("right")},disabled:!(null==w?void 0:w.right)}))):null)});h.displayName="Legend";let m=(e,t,n,i,a,l)=>{let{payload:s}=e,c=(0,r.useRef)(null);o(()=>{var e,t;n((t=null===(e=c.current)||void 0===e?void 0:e.clientHeight)?Number(t)+20:60)});let u=s.filter(e=>"none"!==e.type);return r.createElement("div",{ref:c,className:"flex items-center justify-end"},r.createElement(h,{categories:u.map(e=>e.value),colors:u.map(e=>t.get(e.value)),onClickLegendItem:a,activeLegend:i,enableLegendSlider:l}))}},98593:function(e,t,n){"use strict";n.d(t,{$B:function(){return s},ZP:function(){return u},zX:function(){return c}});var r=n(2265),o=n(7084),i=n(26898),a=n(97324),l=n(1153);let s=e=>{let{children:t}=e;return r.createElement("div",{className:(0,a.q)("rounded-tremor-default text-tremor-default border","bg-tremor-background shadow-tremor-dropdown border-tremor-border","dark:bg-dark-tremor-background dark:shadow-dark-tremor-dropdown dark:border-dark-tremor-border")},t)},c=e=>{let{value:t,name:n,color:o}=e;return r.createElement("div",{className:"flex items-center justify-between space-x-8"},r.createElement("div",{className:"flex items-center space-x-2"},r.createElement("span",{className:(0,a.q)("shrink-0 rounded-tremor-full border-2 h-3 w-3","border-tremor-background shadow-tremor-card","dark:border-dark-tremor-background dark:shadow-dark-tremor-card",(0,l.bM)(o,i.K.background).bgColor)}),r.createElement("p",{className:(0,a.q)("text-right whitespace-nowrap","text-tremor-content","dark:text-dark-tremor-content")},n)),r.createElement("p",{className:(0,a.q)("font-medium tabular-nums text-right whitespace-nowrap","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},t))},u=e=>{let{active:t,payload:n,label:i,categoryColors:l,valueFormatter:u}=e;if(t&&n){let e=n.filter(e=>"none"!==e.type);return r.createElement(s,null,r.createElement("div",{className:(0,a.q)("border-tremor-border border-b px-4 py-2","dark:border-dark-tremor-border")},r.createElement("p",{className:(0,a.q)("font-medium","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},i)),r.createElement("div",{className:(0,a.q)("px-4 py-2 space-y-1")},e.map((e,t)=>{var n;let{value:i,name:a}=e;return r.createElement(c,{key:"id-".concat(t),value:u(i),name:a,color:null!==(n=l.get(a))&&void 0!==n?n:o.fr.Blue})})))}return null}},69448:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r=n(97324),o=n(2265),i=n(5853);let a=(0,n(1153).fn)("Flex"),l={start:"justify-start",end:"justify-end",center:"justify-center",between:"justify-between",around:"justify-around",evenly:"justify-evenly"},s={start:"items-start",end:"items-end",center:"items-center",baseline:"items-baseline",stretch:"items-stretch"},c={row:"flex-row",col:"flex-col","row-reverse":"flex-row-reverse","col-reverse":"flex-col-reverse"},u=o.forwardRef((e,t)=>{let{flexDirection:n="row",justifyContent:u="between",alignItems:d="center",children:f,className:p}=e,h=(0,i._T)(e,["flexDirection","justifyContent","alignItems","children","className"]);return o.createElement("div",Object.assign({ref:t,className:(0,r.q)(a("root"),"flex w-full",c[n],l[u],s[d],p)},h),f)});u.displayName="Flex";var d=n(84264);let f=e=>{let{noDataText:t="No data"}=e;return o.createElement(u,{alignItems:"center",justifyContent:"center",className:(0,r.q)("w-full h-full border border-dashed rounded-tremor-default","border-tremor-border","dark:border-dark-tremor-border")},o.createElement(d.Z,{className:(0,r.q)("text-tremor-content","dark:text-dark-tremor-content")},t))}},32644:function(e,t,n){"use strict";n.d(t,{FB:function(){return i},i4:function(){return o},me:function(){return r},vZ:function(){return function e(t,n){if(t===n)return!0;if("object"!=typeof t||"object"!=typeof n||null===t||null===n)return!1;let r=Object.keys(t),o=Object.keys(n);if(r.length!==o.length)return!1;for(let i of r)if(!o.includes(i)||!e(t[i],n[i]))return!1;return!0}}});let r=(e,t)=>{let n=new Map;return e.forEach((e,r)=>{n.set(e,t[r])}),n},o=(e,t,n)=>[e?"auto":null!=t?t:0,null!=n?n:"auto"];function i(e,t){let n=[];for(let r of e)if(Object.prototype.hasOwnProperty.call(r,t)&&(n.push(r[t]),n.length>1))return!1;return!0}},47323:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(5853),o=n(2265),i=n(1526),a=n(7084),l=n(97324),s=n(1153),c=n(26898);let u={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},d={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},f={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},p=(e,t)=>{switch(e){case"simple":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,s.bM)(t,c.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.q)((0,s.bM)(t,c.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,s.bM)(t,c.K.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,l.q)((0,s.bM)(t,c.K.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}},h=(0,s.fn)("Icon"),m=o.forwardRef((e,t)=>{let{icon:n,variant:c="simple",tooltip:m,size:g=a.u8.SM,color:v,className:y}=e,b=(0,r._T)(e,["icon","variant","tooltip","size","color","className"]),x=p(c,v),{tooltipProps:w,getReferenceProps:k}=(0,i.l)();return o.createElement("span",Object.assign({ref:(0,s.lq)([t,w.refs.setReference]),className:(0,l.q)(h("root"),"inline-flex flex-shrink-0 items-center",x.bgColor,x.textColor,x.borderColor,x.ringColor,f[c].rounded,f[c].border,f[c].shadow,f[c].ring,u[g].paddingX,u[g].paddingY,y)},k,b),o.createElement(i.Z,Object.assign({text:m},w)),o.createElement(n,{className:(0,l.q)(h("icon"),"shrink-0",d[g].height,d[g].width)}))});m.displayName="Icon"},21487:function(e,t,n){"use strict";let r,o,i;n.d(t,{Z:function(){return nF}});var a,l,s,c,u=n(5853),d=n(2265),f=n(54887),p=n(13323),h=n(64518),m=n(96822),g=n(40048),v=n(72238),y=n(93689);let b=(0,d.createContext)(!1);var x=n(61424),w=n(27847);let k=d.Fragment,S=d.Fragment,E=(0,d.createContext)(null),O=(0,d.createContext)(null);Object.assign((0,w.yV)(function(e,t){var n;let r,o,i=(0,d.useRef)(null),a=(0,y.T)((0,y.h)(e=>{i.current=e}),t),l=(0,g.i)(i),s=function(e){let t=(0,d.useContext)(b),n=(0,d.useContext)(E),r=(0,g.i)(e),[o,i]=(0,d.useState)(()=>{if(!t&&null!==n||x.O.isServer)return null;let e=null==r?void 0:r.getElementById("headlessui-portal-root");if(e)return e;if(null===r)return null;let o=r.createElement("div");return o.setAttribute("id","headlessui-portal-root"),r.body.appendChild(o)});return(0,d.useEffect)(()=>{null!==o&&(null!=r&&r.body.contains(o)||null==r||r.body.appendChild(o))},[o,r]),(0,d.useEffect)(()=>{t||null!==n&&i(n.current)},[n,i,t]),o}(i),[c]=(0,d.useState)(()=>{var e;return x.O.isServer?null:null!=(e=null==l?void 0:l.createElement("div"))?e:null}),u=(0,d.useContext)(O),S=(0,v.H)();return(0,h.e)(()=>{!s||!c||s.contains(c)||(c.setAttribute("data-headlessui-portal",""),s.appendChild(c))},[s,c]),(0,h.e)(()=>{if(c&&u)return u.register(c)},[u,c]),n=()=>{var e;s&&c&&(c instanceof Node&&s.contains(c)&&s.removeChild(c),s.childNodes.length<=0&&(null==(e=s.parentElement)||e.removeChild(s)))},r=(0,p.z)(n),o=(0,d.useRef)(!1),(0,d.useEffect)(()=>(o.current=!1,()=>{o.current=!0,(0,m.Y)(()=>{o.current&&r()})}),[r]),S&&s&&c?(0,f.createPortal)((0,w.sY)({ourProps:{ref:a},theirProps:e,defaultTag:k,name:"Portal"}),c):null}),{Group:(0,w.yV)(function(e,t){let{target:n,...r}=e,o={ref:(0,y.T)(t)};return d.createElement(E.Provider,{value:n},(0,w.sY)({ourProps:o,theirProps:r,defaultTag:S,name:"Popover.Group"}))})});var C=n(31948),j=n(17684),_=n(32539),P=n(80004),T=n(38198),M=n(3141),N=((r=N||{})[r.Forwards=0]="Forwards",r[r.Backwards=1]="Backwards",r);function A(){let e=(0,d.useRef)(0);return(0,M.s)("keydown",t=>{"Tab"===t.key&&(e.current=t.shiftKey?1:0)},!0),e}var I=n(37863),R=n(47634),D=n(37105),L=n(24536),z=n(40293),Z=n(37388),B=((o=B||{})[o.Open=0]="Open",o[o.Closed=1]="Closed",o),F=((i=F||{})[i.TogglePopover=0]="TogglePopover",i[i.ClosePopover=1]="ClosePopover",i[i.SetButton=2]="SetButton",i[i.SetButtonId=3]="SetButtonId",i[i.SetPanel=4]="SetPanel",i[i.SetPanelId=5]="SetPanelId",i);let H={0:e=>{let t={...e,popoverState:(0,L.E)(e.popoverState,{0:1,1:0})};return 0===t.popoverState&&(t.__demoMode=!1),t},1:e=>1===e.popoverState?e:{...e,popoverState:1},2:(e,t)=>e.button===t.button?e:{...e,button:t.button},3:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},4:(e,t)=>e.panel===t.panel?e:{...e,panel:t.panel},5:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId}},q=(0,d.createContext)(null);function U(e){let t=(0,d.useContext)(q);if(null===t){let t=Error("<".concat(e," /> is missing a parent component."));throw Error.captureStackTrace&&Error.captureStackTrace(t,U),t}return t}q.displayName="PopoverContext";let W=(0,d.createContext)(null);function K(e){let t=(0,d.useContext)(W);if(null===t){let t=Error("<".concat(e," /> is missing a parent component."));throw Error.captureStackTrace&&Error.captureStackTrace(t,K),t}return t}W.displayName="PopoverAPIContext";let V=(0,d.createContext)(null);function $(){return(0,d.useContext)(V)}V.displayName="PopoverGroupContext";let X=(0,d.createContext)(null);function G(e,t){return(0,L.E)(t.type,H,e,t)}X.displayName="PopoverPanelContext";let Y=w.AN.RenderStrategy|w.AN.Static,Q=w.AN.RenderStrategy|w.AN.Static,J=Object.assign((0,w.yV)(function(e,t){var n,r,o,i;let a,l,s,c,u,f;let{__demoMode:h=!1,...m}=e,v=(0,d.useRef)(null),b=(0,y.T)(t,(0,y.h)(e=>{v.current=e})),x=(0,d.useRef)([]),k=(0,d.useReducer)(G,{__demoMode:h,popoverState:h?0:1,buttons:x,button:null,buttonId:null,panel:null,panelId:null,beforePanelSentinel:(0,d.createRef)(),afterPanelSentinel:(0,d.createRef)()}),[{popoverState:S,button:E,buttonId:j,panel:P,panelId:M,beforePanelSentinel:N,afterPanelSentinel:A},R]=k,z=(0,g.i)(null!=(n=v.current)?n:E),Z=(0,d.useMemo)(()=>{if(!E||!P)return!1;for(let e of document.querySelectorAll("body > *"))if(Number(null==e?void 0:e.contains(E))^Number(null==e?void 0:e.contains(P)))return!0;let e=(0,D.GO)(),t=e.indexOf(E),n=(t+e.length-1)%e.length,r=(t+1)%e.length,o=e[n],i=e[r];return!P.contains(o)&&!P.contains(i)},[E,P]),B=(0,C.E)(j),F=(0,C.E)(M),H=(0,d.useMemo)(()=>({buttonId:B,panelId:F,close:()=>R({type:1})}),[B,F,R]),U=$(),K=null==U?void 0:U.registerPopover,V=(0,p.z)(()=>{var e;return null!=(e=null==U?void 0:U.isFocusWithinPopoverGroup())?e:(null==z?void 0:z.activeElement)&&((null==E?void 0:E.contains(z.activeElement))||(null==P?void 0:P.contains(z.activeElement)))});(0,d.useEffect)(()=>null==K?void 0:K(H),[K,H]);let[Y,Q]=(a=(0,d.useContext)(O),l=(0,d.useRef)([]),s=(0,p.z)(e=>(l.current.push(e),a&&a.register(e),()=>c(e))),c=(0,p.z)(e=>{let t=l.current.indexOf(e);-1!==t&&l.current.splice(t,1),a&&a.unregister(e)}),u=(0,d.useMemo)(()=>({register:s,unregister:c,portals:l}),[s,c,l]),[l,(0,d.useMemo)(()=>function(e){let{children:t}=e;return d.createElement(O.Provider,{value:u},t)},[u])]),J=function(){var e;let{defaultContainers:t=[],portals:n,mainTreeNodeRef:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=(0,d.useRef)(null!=(e=null==r?void 0:r.current)?e:null),i=(0,g.i)(o),a=(0,p.z)(()=>{var e,r,a;let l=[];for(let e of t)null!==e&&(e instanceof HTMLElement?l.push(e):"current"in e&&e.current instanceof HTMLElement&&l.push(e.current));if(null!=n&&n.current)for(let e of n.current)l.push(e);for(let t of null!=(e=null==i?void 0:i.querySelectorAll("html > *, body > *"))?e:[])t!==document.body&&t!==document.head&&t instanceof HTMLElement&&"headlessui-portal-root"!==t.id&&(t.contains(o.current)||t.contains(null==(a=null==(r=o.current)?void 0:r.getRootNode())?void 0:a.host)||l.some(e=>t.contains(e))||l.push(t));return l});return{resolveContainers:a,contains:(0,p.z)(e=>a().some(t=>t.contains(e))),mainTreeNodeRef:o,MainTreeNode:(0,d.useMemo)(()=>function(){return null!=r?null:d.createElement(T._,{features:T.A.Hidden,ref:o})},[o,r])}}({mainTreeNodeRef:null==U?void 0:U.mainTreeNodeRef,portals:Y,defaultContainers:[E,P]});r=null==z?void 0:z.defaultView,o="focus",i=e=>{var t,n,r,o;e.target!==window&&e.target instanceof HTMLElement&&0===S&&(V()||E&&P&&(J.contains(e.target)||null!=(n=null==(t=N.current)?void 0:t.contains)&&n.call(t,e.target)||null!=(o=null==(r=A.current)?void 0:r.contains)&&o.call(r,e.target)||R({type:1})))},f=(0,C.E)(i),(0,d.useEffect)(()=>{function e(e){f.current(e)}return(r=null!=r?r:window).addEventListener(o,e,!0),()=>r.removeEventListener(o,e,!0)},[r,o,!0]),(0,_.O)(J.resolveContainers,(e,t)=>{R({type:1}),(0,D.sP)(t,D.tJ.Loose)||(e.preventDefault(),null==E||E.focus())},0===S);let ee=(0,p.z)(e=>{R({type:1});let t=e?e instanceof HTMLElement?e:"current"in e&&e.current instanceof HTMLElement?e.current:E:E;null==t||t.focus()}),et=(0,d.useMemo)(()=>({close:ee,isPortalled:Z}),[ee,Z]),en=(0,d.useMemo)(()=>({open:0===S,close:ee}),[S,ee]);return d.createElement(X.Provider,{value:null},d.createElement(q.Provider,{value:k},d.createElement(W.Provider,{value:et},d.createElement(I.up,{value:(0,L.E)(S,{0:I.ZM.Open,1:I.ZM.Closed})},d.createElement(Q,null,(0,w.sY)({ourProps:{ref:b},theirProps:m,slot:en,defaultTag:"div",name:"Popover"}),d.createElement(J.MainTreeNode,null))))))}),{Button:(0,w.yV)(function(e,t){let n=(0,j.M)(),{id:r="headlessui-popover-button-".concat(n),...o}=e,[i,a]=U("Popover.Button"),{isPortalled:l}=K("Popover.Button"),s=(0,d.useRef)(null),c="headlessui-focus-sentinel-".concat((0,j.M)()),u=$(),f=null==u?void 0:u.closeOthers,h=null!==(0,d.useContext)(X);(0,d.useEffect)(()=>{if(!h)return a({type:3,buttonId:r}),()=>{a({type:3,buttonId:null})}},[h,r,a]);let[m]=(0,d.useState)(()=>Symbol()),v=(0,y.T)(s,t,h?null:e=>{if(e)i.buttons.current.push(m);else{let e=i.buttons.current.indexOf(m);-1!==e&&i.buttons.current.splice(e,1)}i.buttons.current.length>1&&console.warn("You are already using a but only 1 is supported."),e&&a({type:2,button:e})}),b=(0,y.T)(s,t),x=(0,g.i)(s),k=(0,p.z)(e=>{var t,n,r;if(h){if(1===i.popoverState)return;switch(e.key){case Z.R.Space:case Z.R.Enter:e.preventDefault(),null==(n=(t=e.target).click)||n.call(t),a({type:1}),null==(r=i.button)||r.focus()}}else switch(e.key){case Z.R.Space:case Z.R.Enter:e.preventDefault(),e.stopPropagation(),1===i.popoverState&&(null==f||f(i.buttonId)),a({type:0});break;case Z.R.Escape:if(0!==i.popoverState)return null==f?void 0:f(i.buttonId);if(!s.current||null!=x&&x.activeElement&&!s.current.contains(x.activeElement))return;e.preventDefault(),e.stopPropagation(),a({type:1})}}),S=(0,p.z)(e=>{h||e.key===Z.R.Space&&e.preventDefault()}),E=(0,p.z)(t=>{var n,r;(0,R.P)(t.currentTarget)||e.disabled||(h?(a({type:1}),null==(n=i.button)||n.focus()):(t.preventDefault(),t.stopPropagation(),1===i.popoverState&&(null==f||f(i.buttonId)),a({type:0}),null==(r=i.button)||r.focus()))}),O=(0,p.z)(e=>{e.preventDefault(),e.stopPropagation()}),C=0===i.popoverState,_=(0,d.useMemo)(()=>({open:C}),[C]),M=(0,P.f)(e,s),I=h?{ref:b,type:M,onKeyDown:k,onClick:E}:{ref:v,id:i.buttonId,type:M,"aria-expanded":0===i.popoverState,"aria-controls":i.panel?i.panelId:void 0,onKeyDown:k,onKeyUp:S,onClick:E,onMouseDown:O},z=A(),B=(0,p.z)(()=>{let e=i.panel;e&&(0,L.E)(z.current,{[N.Forwards]:()=>(0,D.jA)(e,D.TO.First),[N.Backwards]:()=>(0,D.jA)(e,D.TO.Last)})===D.fE.Error&&(0,D.jA)((0,D.GO)().filter(e=>"true"!==e.dataset.headlessuiFocusGuard),(0,L.E)(z.current,{[N.Forwards]:D.TO.Next,[N.Backwards]:D.TO.Previous}),{relativeTo:i.button})});return d.createElement(d.Fragment,null,(0,w.sY)({ourProps:I,theirProps:o,slot:_,defaultTag:"button",name:"Popover.Button"}),C&&!h&&l&&d.createElement(T._,{id:c,features:T.A.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:B}))}),Overlay:(0,w.yV)(function(e,t){let n=(0,j.M)(),{id:r="headlessui-popover-overlay-".concat(n),...o}=e,[{popoverState:i},a]=U("Popover.Overlay"),l=(0,y.T)(t),s=(0,I.oJ)(),c=null!==s?(s&I.ZM.Open)===I.ZM.Open:0===i,u=(0,p.z)(e=>{if((0,R.P)(e.currentTarget))return e.preventDefault();a({type:1})}),f=(0,d.useMemo)(()=>({open:0===i}),[i]);return(0,w.sY)({ourProps:{ref:l,id:r,"aria-hidden":!0,onClick:u},theirProps:o,slot:f,defaultTag:"div",features:Y,visible:c,name:"Popover.Overlay"})}),Panel:(0,w.yV)(function(e,t){let n=(0,j.M)(),{id:r="headlessui-popover-panel-".concat(n),focus:o=!1,...i}=e,[a,l]=U("Popover.Panel"),{close:s,isPortalled:c}=K("Popover.Panel"),u="headlessui-focus-sentinel-before-".concat((0,j.M)()),f="headlessui-focus-sentinel-after-".concat((0,j.M)()),m=(0,d.useRef)(null),v=(0,y.T)(m,t,e=>{l({type:4,panel:e})}),b=(0,g.i)(m),x=(0,w.Y2)();(0,h.e)(()=>(l({type:5,panelId:r}),()=>{l({type:5,panelId:null})}),[r,l]);let k=(0,I.oJ)(),S=null!==k?(k&I.ZM.Open)===I.ZM.Open:0===a.popoverState,E=(0,p.z)(e=>{var t;if(e.key===Z.R.Escape){if(0!==a.popoverState||!m.current||null!=b&&b.activeElement&&!m.current.contains(b.activeElement))return;e.preventDefault(),e.stopPropagation(),l({type:1}),null==(t=a.button)||t.focus()}});(0,d.useEffect)(()=>{var t;e.static||1===a.popoverState&&(null==(t=e.unmount)||t)&&l({type:4,panel:null})},[a.popoverState,e.unmount,e.static,l]),(0,d.useEffect)(()=>{if(a.__demoMode||!o||0!==a.popoverState||!m.current)return;let e=null==b?void 0:b.activeElement;m.current.contains(e)||(0,D.jA)(m.current,D.TO.First)},[a.__demoMode,o,m,a.popoverState]);let O=(0,d.useMemo)(()=>({open:0===a.popoverState,close:s}),[a,s]),C={ref:v,id:r,onKeyDown:E,onBlur:o&&0===a.popoverState?e=>{var t,n,r,o,i;let s=e.relatedTarget;s&&m.current&&(null!=(t=m.current)&&t.contains(s)||(l({type:1}),(null!=(r=null==(n=a.beforePanelSentinel.current)?void 0:n.contains)&&r.call(n,s)||null!=(i=null==(o=a.afterPanelSentinel.current)?void 0:o.contains)&&i.call(o,s))&&s.focus({preventScroll:!0})))}:void 0,tabIndex:-1},_=A(),P=(0,p.z)(()=>{let e=m.current;e&&(0,L.E)(_.current,{[N.Forwards]:()=>{var t;(0,D.jA)(e,D.TO.First)===D.fE.Error&&(null==(t=a.afterPanelSentinel.current)||t.focus())},[N.Backwards]:()=>{var e;null==(e=a.button)||e.focus({preventScroll:!0})}})}),M=(0,p.z)(()=>{let e=m.current;e&&(0,L.E)(_.current,{[N.Forwards]:()=>{var e;if(!a.button)return;let t=(0,D.GO)(),n=t.indexOf(a.button),r=t.slice(0,n+1),o=[...t.slice(n+1),...r];for(let t of o.slice())if("true"===t.dataset.headlessuiFocusGuard||null!=(e=a.panel)&&e.contains(t)){let e=o.indexOf(t);-1!==e&&o.splice(e,1)}(0,D.jA)(o,D.TO.First,{sorted:!1})},[N.Backwards]:()=>{var t;(0,D.jA)(e,D.TO.Previous)===D.fE.Error&&(null==(t=a.button)||t.focus())}})});return d.createElement(X.Provider,{value:r},S&&c&&d.createElement(T._,{id:u,ref:a.beforePanelSentinel,features:T.A.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:P}),(0,w.sY)({mergeRefs:x,ourProps:C,theirProps:i,slot:O,defaultTag:"div",features:Q,visible:S,name:"Popover.Panel"}),S&&c&&d.createElement(T._,{id:f,ref:a.afterPanelSentinel,features:T.A.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:M}))}),Group:(0,w.yV)(function(e,t){let n;let r=(0,d.useRef)(null),o=(0,y.T)(r,t),[i,a]=(0,d.useState)([]),l={mainTreeNodeRef:n=(0,d.useRef)(null),MainTreeNode:(0,d.useMemo)(()=>function(){return d.createElement(T._,{features:T.A.Hidden,ref:n})},[n])},s=(0,p.z)(e=>{a(t=>{let n=t.indexOf(e);if(-1!==n){let e=t.slice();return e.splice(n,1),e}return t})}),c=(0,p.z)(e=>(a(t=>[...t,e]),()=>s(e))),u=(0,p.z)(()=>{var e;let t=(0,z.r)(r);if(!t)return!1;let n=t.activeElement;return!!(null!=(e=r.current)&&e.contains(n))||i.some(e=>{var r,o;return(null==(r=t.getElementById(e.buttonId.current))?void 0:r.contains(n))||(null==(o=t.getElementById(e.panelId.current))?void 0:o.contains(n))})}),f=(0,p.z)(e=>{for(let t of i)t.buttonId.current!==e&&t.close()}),h=(0,d.useMemo)(()=>({registerPopover:c,unregisterPopover:s,isFocusWithinPopoverGroup:u,closeOthers:f,mainTreeNodeRef:l.mainTreeNodeRef}),[c,s,u,f,l.mainTreeNodeRef]),m=(0,d.useMemo)(()=>({}),[]);return d.createElement(V.Provider,{value:h},(0,w.sY)({ourProps:{ref:o},theirProps:e,slot:m,defaultTag:"div",name:"Popover.Group"}),d.createElement(l.MainTreeNode,null))})});var ee=n(33044),et=n(9528);let en=e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"}),d.createElement("path",{fillRule:"evenodd",d:"M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z",clipRule:"evenodd"}))};var er=n(4537),eo=n(99735),ei=n(7656);function ea(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e);return t.setHours(0,0,0,0),t}function el(){return ea(Date.now())}function es(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e);return t.setDate(1),t.setHours(0,0,0,0),t}var ec=n(97324),eu=n(96398),ed=n(41154);function ef(e){var t,n;if((0,ei.Z)(1,arguments),e&&"function"==typeof e.forEach)t=e;else{if("object"!==(0,ed.Z)(e)||null===e)return new Date(NaN);t=Array.prototype.slice.call(e)}return t.forEach(function(e){var t=(0,eo.Z)(e);(void 0===n||nt||isNaN(t.getDate()))&&(n=t)}),n||new Date(NaN)}var eh=n(25721),em=n(47869);function eg(e,t){(0,ei.Z)(2,arguments);var n=(0,em.Z)(t);return(0,eh.Z)(e,-n)}var ev=n(55463);function ey(e,t){if((0,ei.Z)(2,arguments),!t||"object"!==(0,ed.Z)(t))return new Date(NaN);var n=t.years?(0,em.Z)(t.years):0,r=t.months?(0,em.Z)(t.months):0,o=t.weeks?(0,em.Z)(t.weeks):0,i=t.days?(0,em.Z)(t.days):0,a=t.hours?(0,em.Z)(t.hours):0,l=t.minutes?(0,em.Z)(t.minutes):0,s=t.seconds?(0,em.Z)(t.seconds):0;return new Date(eg(function(e,t){(0,ei.Z)(2,arguments);var n=(0,em.Z)(t);return(0,ev.Z)(e,-n)}(e,r+12*n),i+7*o).getTime()-1e3*(s+60*(l+60*a)))}function eb(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=new Date(0);return n.setFullYear(t.getFullYear(),0,1),n.setHours(0,0,0,0),n}function ex(e){return(0,ei.Z)(1,arguments),e instanceof Date||"object"===(0,ed.Z)(e)&&"[object Date]"===Object.prototype.toString.call(e)}function ew(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getUTCDay();return t.setUTCDate(t.getUTCDate()-((n<1?7:0)+n-1)),t.setUTCHours(0,0,0,0),t}function ek(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getUTCFullYear(),r=new Date(0);r.setUTCFullYear(n+1,0,4),r.setUTCHours(0,0,0,0);var o=ew(r),i=new Date(0);i.setUTCFullYear(n,0,4),i.setUTCHours(0,0,0,0);var a=ew(i);return t.getTime()>=o.getTime()?n+1:t.getTime()>=a.getTime()?n:n-1}var eS={};function eE(e,t){(0,ei.Z)(1,arguments);var n,r,o,i,a,l,s,c,u=(0,em.Z)(null!==(n=null!==(r=null!==(o=null!==(i=null==t?void 0:t.weekStartsOn)&&void 0!==i?i:null==t?void 0:null===(a=t.locale)||void 0===a?void 0:null===(l=a.options)||void 0===l?void 0:l.weekStartsOn)&&void 0!==o?o:eS.weekStartsOn)&&void 0!==r?r:null===(s=eS.locale)||void 0===s?void 0:null===(c=s.options)||void 0===c?void 0:c.weekStartsOn)&&void 0!==n?n:0);if(!(u>=0&&u<=6))throw RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=(0,eo.Z)(e),f=d.getUTCDay();return d.setUTCDate(d.getUTCDate()-((f=1&&f<=7))throw RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var p=new Date(0);p.setUTCFullYear(d+1,0,f),p.setUTCHours(0,0,0,0);var h=eE(p,t),m=new Date(0);m.setUTCFullYear(d,0,f),m.setUTCHours(0,0,0,0);var g=eE(m,t);return u.getTime()>=h.getTime()?d+1:u.getTime()>=g.getTime()?d:d-1}function eC(e,t){for(var n=Math.abs(e).toString();n.length0?n:1-n;return eC("yy"===t?r%100:r,t.length)},M:function(e,t){var n=e.getUTCMonth();return"M"===t?String(n+1):eC(n+1,2)},d:function(e,t){return eC(e.getUTCDate(),t.length)},h:function(e,t){return eC(e.getUTCHours()%12||12,t.length)},H:function(e,t){return eC(e.getUTCHours(),t.length)},m:function(e,t){return eC(e.getUTCMinutes(),t.length)},s:function(e,t){return eC(e.getUTCSeconds(),t.length)},S:function(e,t){var n=t.length;return eC(Math.floor(e.getUTCMilliseconds()*Math.pow(10,n-3)),t.length)}},e_={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"};function eP(e,t){var n=e>0?"-":"+",r=Math.abs(e),o=Math.floor(r/60),i=r%60;return 0===i?n+String(o):n+String(o)+(t||"")+eC(i,2)}function eT(e,t){return e%60==0?(e>0?"-":"+")+eC(Math.abs(e)/60,2):eM(e,t)}function eM(e,t){var n=Math.abs(e);return(e>0?"-":"+")+eC(Math.floor(n/60),2)+(t||"")+eC(n%60,2)}var eN={G:function(e,t,n){var r=e.getUTCFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){var r=e.getUTCFullYear();return n.ordinalNumber(r>0?r:1-r,{unit:"year"})}return ej.y(e,t)},Y:function(e,t,n,r){var o=eO(e,r),i=o>0?o:1-o;return"YY"===t?eC(i%100,2):"Yo"===t?n.ordinalNumber(i,{unit:"year"}):eC(i,t.length)},R:function(e,t){return eC(ek(e),t.length)},u:function(e,t){return eC(e.getUTCFullYear(),t.length)},Q:function(e,t,n){var r=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return eC(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){var r=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return eC(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){var r=e.getUTCMonth();switch(t){case"M":case"MM":return ej.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){var r=e.getUTCMonth();switch(t){case"L":return String(r+1);case"LL":return eC(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){var o=function(e,t){(0,ei.Z)(1,arguments);var n=(0,eo.Z)(e);return Math.round((eE(n,t).getTime()-(function(e,t){(0,ei.Z)(1,arguments);var n,r,o,i,a,l,s,c,u=(0,em.Z)(null!==(n=null!==(r=null!==(o=null!==(i=null==t?void 0:t.firstWeekContainsDate)&&void 0!==i?i:null==t?void 0:null===(a=t.locale)||void 0===a?void 0:null===(l=a.options)||void 0===l?void 0:l.firstWeekContainsDate)&&void 0!==o?o:eS.firstWeekContainsDate)&&void 0!==r?r:null===(s=eS.locale)||void 0===s?void 0:null===(c=s.options)||void 0===c?void 0:c.firstWeekContainsDate)&&void 0!==n?n:1),d=eO(e,t),f=new Date(0);return f.setUTCFullYear(d,0,u),f.setUTCHours(0,0,0,0),eE(f,t)})(n,t).getTime())/6048e5)+1}(e,r);return"wo"===t?n.ordinalNumber(o,{unit:"week"}):eC(o,t.length)},I:function(e,t,n){var r=function(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e);return Math.round((ew(t).getTime()-(function(e){(0,ei.Z)(1,arguments);var t=ek(e),n=new Date(0);return n.setUTCFullYear(t,0,4),n.setUTCHours(0,0,0,0),ew(n)})(t).getTime())/6048e5)+1}(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):eC(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getUTCDate(),{unit:"date"}):ej.d(e,t)},D:function(e,t,n){var r=function(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getTime();return t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0),Math.floor((n-t.getTime())/864e5)+1}(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):eC(r,t.length)},E:function(e,t,n){var r=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){var o=e.getUTCDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return eC(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){var o=e.getUTCDay(),i=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return eC(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){var r=e.getUTCDay(),o=0===r?7:r;switch(t){case"i":return String(o);case"ii":return eC(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){var r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){var r,o=e.getUTCHours();switch(r=12===o?e_.noon:0===o?e_.midnight:o/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(e,t,n){var r,o=e.getUTCHours();switch(r=o>=17?e_.evening:o>=12?e_.afternoon:o>=4?e_.morning:e_.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){var r=e.getUTCHours()%12;return 0===r&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return ej.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getUTCHours(),{unit:"hour"}):ej.H(e,t)},K:function(e,t,n){var r=e.getUTCHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):eC(r,t.length)},k:function(e,t,n){var r=e.getUTCHours();return(0===r&&(r=24),"ko"===t)?n.ordinalNumber(r,{unit:"hour"}):eC(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getUTCMinutes(),{unit:"minute"}):ej.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getUTCSeconds(),{unit:"second"}):ej.s(e,t)},S:function(e,t){return ej.S(e,t)},X:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();if(0===o)return"Z";switch(t){case"X":return eT(o);case"XXXX":case"XX":return eM(o);default:return eM(o,":")}},x:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();switch(t){case"x":return eT(o);case"xxxx":case"xx":return eM(o);default:return eM(o,":")}},O:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+eP(o,":");default:return"GMT"+eM(o,":")}},z:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+eP(o,":");default:return"GMT"+eM(o,":")}},t:function(e,t,n,r){return eC(Math.floor((r._originalDate||e).getTime()/1e3),t.length)},T:function(e,t,n,r){return eC((r._originalDate||e).getTime(),t.length)}},eA=function(e,t){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},eI=function(e,t){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},eR={p:eI,P:function(e,t){var n,r=e.match(/(P+)(p+)?/)||[],o=r[1],i=r[2];if(!i)return eA(e,t);switch(o){case"P":n=t.dateTime({width:"short"});break;case"PP":n=t.dateTime({width:"medium"});break;case"PPP":n=t.dateTime({width:"long"});break;default:n=t.dateTime({width:"full"})}return n.replace("{{date}}",eA(o,t)).replace("{{time}}",eI(i,t))}};function eD(e){var t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),e.getTime()-t.getTime()}var eL=["D","DD"],ez=["YY","YYYY"];function eZ(e,t,n){if("YYYY"===e)throw RangeError("Use `yyyy` instead of `YYYY` (in `".concat(t,"`) for formatting years to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("YY"===e)throw RangeError("Use `yy` instead of `YY` (in `".concat(t,"`) for formatting years to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("D"===e)throw RangeError("Use `d` instead of `D` (in `".concat(t,"`) for formatting days of the month to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));if("DD"===e)throw RangeError("Use `dd` instead of `DD` (in `".concat(t,"`) for formatting days of the month to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"))}var eB={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function eF(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}var eH={date:eF({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:eF({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:eF({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},eq={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function eU(e){return function(t,n){var r;if("formatting"===(null!=n&&n.context?String(n.context):"standalone")&&e.formattingValues){var o=e.defaultFormattingWidth||e.defaultWidth,i=null!=n&&n.width?String(n.width):o;r=e.formattingValues[i]||e.formattingValues[o]}else{var a=e.defaultWidth,l=null!=n&&n.width?String(n.width):e.defaultWidth;r=e.values[l]||e.values[a]}return r[e.argumentCallback?e.argumentCallback(t):t]}}function eW(e){return function(t){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=r.width,i=o&&e.matchPatterns[o]||e.matchPatterns[e.defaultMatchWidth],a=t.match(i);if(!a)return null;var l=a[0],s=o&&e.parsePatterns[o]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(s)?function(e,t){for(var n=0;n0?"in "+r:r+" ago":r},formatLong:eH,formatRelative:function(e,t,n,r){return eq[e]},localize:{ordinalNumber:function(e,t){var n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:eU({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:eU({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return e-1}}),month:eU({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:eU({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:eU({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(a={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}},function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.match(a.matchPattern);if(!n)return null;var r=n[0],o=e.match(a.parsePattern);if(!o)return null;var i=a.valueCallback?a.valueCallback(o[0]):o[0];return{value:i=t.valueCallback?t.valueCallback(i):i,rest:e.slice(r.length)}}),era:eW({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:eW({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:eW({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:eW({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:eW({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}},eV=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,e$=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,eX=/^'([^]*?)'?$/,eG=/''/g,eY=/[a-zA-Z]/;function eQ(e,t,n){(0,ei.Z)(2,arguments);var r,o,i,a,l,s,c,u,d,f,p,h,m,g,v,y,b,x,w=String(t),k=null!==(r=null!==(o=null==n?void 0:n.locale)&&void 0!==o?o:eS.locale)&&void 0!==r?r:eK,S=(0,em.Z)(null!==(i=null!==(a=null!==(l=null!==(s=null==n?void 0:n.firstWeekContainsDate)&&void 0!==s?s:null==n?void 0:null===(c=n.locale)||void 0===c?void 0:null===(u=c.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==l?l:eS.firstWeekContainsDate)&&void 0!==a?a:null===(d=eS.locale)||void 0===d?void 0:null===(f=d.options)||void 0===f?void 0:f.firstWeekContainsDate)&&void 0!==i?i:1);if(!(S>=1&&S<=7))throw RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var E=(0,em.Z)(null!==(p=null!==(h=null!==(m=null!==(g=null==n?void 0:n.weekStartsOn)&&void 0!==g?g:null==n?void 0:null===(v=n.locale)||void 0===v?void 0:null===(y=v.options)||void 0===y?void 0:y.weekStartsOn)&&void 0!==m?m:eS.weekStartsOn)&&void 0!==h?h:null===(b=eS.locale)||void 0===b?void 0:null===(x=b.options)||void 0===x?void 0:x.weekStartsOn)&&void 0!==p?p:0);if(!(E>=0&&E<=6))throw RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!k.localize)throw RangeError("locale must contain localize property");if(!k.formatLong)throw RangeError("locale must contain formatLong property");var O=(0,eo.Z)(e);if(!function(e){return(0,ei.Z)(1,arguments),(!!ex(e)||"number"==typeof e)&&!isNaN(Number((0,eo.Z)(e)))}(O))throw RangeError("Invalid time value");var C=eD(O),j=function(e,t){return(0,ei.Z)(2,arguments),function(e,t){return(0,ei.Z)(2,arguments),new Date((0,eo.Z)(e).getTime()+(0,em.Z)(t))}(e,-(0,em.Z)(t))}(O,C),_={firstWeekContainsDate:S,weekStartsOn:E,locale:k,_originalDate:O};return w.match(e$).map(function(e){var t=e[0];return"p"===t||"P"===t?(0,eR[t])(e,k.formatLong):e}).join("").match(eV).map(function(r){if("''"===r)return"'";var o,i=r[0];if("'"===i)return(o=r.match(eX))?o[1].replace(eG,"'"):r;var a=eN[i];if(a)return null!=n&&n.useAdditionalWeekYearTokens||-1===ez.indexOf(r)||eZ(r,t,String(e)),null!=n&&n.useAdditionalDayOfYearTokens||-1===eL.indexOf(r)||eZ(r,t,String(e)),a(j,r,k.localize,_);if(i.match(eY))throw RangeError("Format string contains an unescaped latin alphabet character `"+i+"`");return r}).join("")}var eJ=n(1153);let e0=(0,eJ.fn)("DateRangePicker"),e1=(e,t,n,r)=>{var o;if(n&&(e=null===(o=r.get(n))||void 0===o?void 0:o.from),e)return ea(e&&!t?e:ef([e,t]))},e2=(e,t,n,r)=>{var o,i;if(n&&(e=ea(null!==(i=null===(o=r.get(n))||void 0===o?void 0:o.to)&&void 0!==i?i:el())),e)return ea(e&&!t?e:ep([e,t]))},e4=[{value:"tdy",text:"Today",from:el()},{value:"w",text:"Last 7 days",from:ey(el(),{days:7})},{value:"t",text:"Last 30 days",from:ey(el(),{days:30})},{value:"m",text:"Month to Date",from:es(el())},{value:"y",text:"Year to Date",from:eb(el())}],e6=(e,t,n,r)=>{let o=(null==n?void 0:n.code)||"en-US";if(!e&&!t)return"";if(e&&!t)return r?eQ(e,r):e.toLocaleDateString(o,{year:"numeric",month:"short",day:"numeric"});if(e&&t){if(function(e,t){(0,ei.Z)(2,arguments);var n=(0,eo.Z)(e),r=(0,eo.Z)(t);return n.getTime()===r.getTime()}(e,t))return r?eQ(e,r):e.toLocaleDateString(o,{year:"numeric",month:"short",day:"numeric"});if(e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear())return r?"".concat(eQ(e,r)," - ").concat(eQ(t,r)):"".concat(e.toLocaleDateString(o,{month:"short",day:"numeric"})," - \n ").concat(t.getDate(),", ").concat(t.getFullYear());{if(r)return"".concat(eQ(e,r)," - ").concat(eQ(t,r));let n={year:"numeric",month:"short",day:"numeric"};return"".concat(e.toLocaleDateString(o,n)," - \n ").concat(t.toLocaleDateString(o,n))}}return""};function e3(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getMonth();return t.setFullYear(t.getFullYear(),n+1,0),t.setHours(23,59,59,999),t}function e8(e,t){(0,ei.Z)(2,arguments);var n=(0,eo.Z)(e),r=(0,em.Z)(t),o=n.getFullYear(),i=n.getDate(),a=new Date(0);a.setFullYear(o,r,15),a.setHours(0,0,0,0);var l=function(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getFullYear(),r=t.getMonth(),o=new Date(0);return o.setFullYear(n,r+1,0),o.setHours(0,0,0,0),o.getDate()}(a);return n.setMonth(r,Math.min(i,l)),n}function e5(e,t){(0,ei.Z)(2,arguments);var n=(0,eo.Z)(e),r=(0,em.Z)(t);return isNaN(n.getTime())?new Date(NaN):(n.setFullYear(r),n)}function e7(e,t){(0,ei.Z)(2,arguments);var n=(0,eo.Z)(e),r=(0,eo.Z)(t);return 12*(n.getFullYear()-r.getFullYear())+(n.getMonth()-r.getMonth())}function e9(e,t){(0,ei.Z)(2,arguments);var n=(0,eo.Z)(e),r=(0,eo.Z)(t);return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()}function te(e,t){(0,ei.Z)(2,arguments);var n=(0,eo.Z)(e),r=(0,eo.Z)(t);return n.getTime()=0&&u<=6))throw RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=(0,eo.Z)(e),f=d.getDay();return d.setDate(d.getDate()-((fr.getTime()}function ti(e,t){(0,ei.Z)(2,arguments);var n=ea(e),r=ea(t);return Math.round((n.getTime()-eD(n)-(r.getTime()-eD(r)))/864e5)}function ta(e,t){(0,ei.Z)(2,arguments);var n=(0,em.Z)(t);return(0,eh.Z)(e,7*n)}function tl(e,t){(0,ei.Z)(2,arguments);var n=(0,em.Z)(t);return(0,ev.Z)(e,12*n)}function ts(e,t){(0,ei.Z)(1,arguments);var n,r,o,i,a,l,s,c,u=(0,em.Z)(null!==(n=null!==(r=null!==(o=null!==(i=null==t?void 0:t.weekStartsOn)&&void 0!==i?i:null==t?void 0:null===(a=t.locale)||void 0===a?void 0:null===(l=a.options)||void 0===l?void 0:l.weekStartsOn)&&void 0!==o?o:eS.weekStartsOn)&&void 0!==r?r:null===(s=eS.locale)||void 0===s?void 0:null===(c=s.options)||void 0===c?void 0:c.weekStartsOn)&&void 0!==n?n:0);if(!(u>=0&&u<=6))throw RangeError("weekStartsOn must be between 0 and 6 inclusively");var d=(0,eo.Z)(e),f=d.getDay();return d.setDate(d.getDate()+((fe7(l,a)&&(a=(0,ev.Z)(l,-1*((void 0===c?1:c)-1))),s&&0>e7(a,s)&&(a=s),u=es(a),f=t.month,h=(p=(0,d.useState)(u))[0],m=[void 0===f?h:f,p[1]])[0],v=m[1],[g,function(e){if(!t.disableNavigation){var n,r=es(e);v(r),null===(n=t.onMonthChange)||void 0===n||n.call(t,r)}}]),x=b[0],w=b[1],k=function(e,t){for(var n=t.reverseMonths,r=t.numberOfMonths,o=es(e),i=e7(es((0,ev.Z)(o,r)),o),a=[],l=0;l=e7(i,n)))return(0,ev.Z)(i,-(r?void 0===o?1:o:1))}}(x,y),O=function(e){return k.some(function(t){return e9(e,t)})};return th.jsx(tP.Provider,{value:{currentMonth:x,displayMonths:k,goToMonth:w,goToDate:function(e,t){O(e)||(t&&te(e,t)?w((0,ev.Z)(e,1+-1*y.numberOfMonths)):w(e))},previousMonth:E,nextMonth:S,isDateDisplayed:O},children:e.children})}function tM(){var e=(0,d.useContext)(tP);if(!e)throw Error("useNavigation must be used within a NavigationProvider");return e}function tN(e){var t,n=tS(),r=n.classNames,o=n.styles,i=n.components,a=tM().goToMonth,l=function(t){a((0,ev.Z)(t,e.displayIndex?-e.displayIndex:0))},s=null!==(t=null==i?void 0:i.CaptionLabel)&&void 0!==t?t:tE,c=th.jsx(s,{id:e.id,displayMonth:e.displayMonth});return th.jsxs("div",{className:r.caption_dropdowns,style:o.caption_dropdowns,children:[th.jsx("div",{className:r.vhidden,children:c}),th.jsx(tj,{onChange:l,displayMonth:e.displayMonth}),th.jsx(t_,{onChange:l,displayMonth:e.displayMonth})]})}function tA(e){return th.jsx("svg",tu({width:"16px",height:"16px",viewBox:"0 0 120 120"},e,{children:th.jsx("path",{d:"M69.490332,3.34314575 C72.6145263,0.218951416 77.6798462,0.218951416 80.8040405,3.34314575 C83.8617626,6.40086786 83.9268205,11.3179931 80.9992143,14.4548388 L80.8040405,14.6568542 L35.461,60 L80.8040405,105.343146 C83.8617626,108.400868 83.9268205,113.317993 80.9992143,116.454839 L80.8040405,116.656854 C77.7463184,119.714576 72.8291931,119.779634 69.6923475,116.852028 L69.490332,116.656854 L18.490332,65.6568542 C15.4326099,62.5991321 15.367552,57.6820069 18.2951583,54.5451612 L18.490332,54.3431458 L69.490332,3.34314575 Z",fill:"currentColor",fillRule:"nonzero"})}))}function tI(e){return th.jsx("svg",tu({width:"16px",height:"16px",viewBox:"0 0 120 120"},e,{children:th.jsx("path",{d:"M49.8040405,3.34314575 C46.6798462,0.218951416 41.6145263,0.218951416 38.490332,3.34314575 C35.4326099,6.40086786 35.367552,11.3179931 38.2951583,14.4548388 L38.490332,14.6568542 L83.8333725,60 L38.490332,105.343146 C35.4326099,108.400868 35.367552,113.317993 38.2951583,116.454839 L38.490332,116.656854 C41.5480541,119.714576 46.4651794,119.779634 49.602025,116.852028 L49.8040405,116.656854 L100.804041,65.6568542 C103.861763,62.5991321 103.926821,57.6820069 100.999214,54.5451612 L100.804041,54.3431458 L49.8040405,3.34314575 Z",fill:"currentColor"})}))}var tR=(0,d.forwardRef)(function(e,t){var n=tS(),r=n.classNames,o=n.styles,i=[r.button_reset,r.button];e.className&&i.push(e.className);var a=i.join(" "),l=tu(tu({},o.button_reset),o.button);return e.style&&Object.assign(l,e.style),th.jsx("button",tu({},e,{ref:t,type:"button",className:a,style:l}))});function tD(e){var t,n,r=tS(),o=r.dir,i=r.locale,a=r.classNames,l=r.styles,s=r.labels,c=s.labelPrevious,u=s.labelNext,d=r.components;if(!e.nextMonth&&!e.previousMonth)return th.jsx(th.Fragment,{});var f=c(e.previousMonth,{locale:i}),p=[a.nav_button,a.nav_button_previous].join(" "),h=u(e.nextMonth,{locale:i}),m=[a.nav_button,a.nav_button_next].join(" "),g=null!==(t=null==d?void 0:d.IconRight)&&void 0!==t?t:tI,v=null!==(n=null==d?void 0:d.IconLeft)&&void 0!==n?n:tA;return th.jsxs("div",{className:a.nav,style:l.nav,children:[!e.hidePrevious&&th.jsx(tR,{name:"previous-month","aria-label":f,className:p,style:l.nav_button_previous,disabled:!e.previousMonth,onClick:e.onPreviousClick,children:"rtl"===o?th.jsx(g,{className:a.nav_icon,style:l.nav_icon}):th.jsx(v,{className:a.nav_icon,style:l.nav_icon})}),!e.hideNext&&th.jsx(tR,{name:"next-month","aria-label":h,className:m,style:l.nav_button_next,disabled:!e.nextMonth,onClick:e.onNextClick,children:"rtl"===o?th.jsx(v,{className:a.nav_icon,style:l.nav_icon}):th.jsx(g,{className:a.nav_icon,style:l.nav_icon})})]})}function tL(e){var t=tS().numberOfMonths,n=tM(),r=n.previousMonth,o=n.nextMonth,i=n.goToMonth,a=n.displayMonths,l=a.findIndex(function(t){return e9(e.displayMonth,t)}),s=0===l,c=l===a.length-1;return th.jsx(tD,{displayMonth:e.displayMonth,hideNext:t>1&&(s||!c),hidePrevious:t>1&&(c||!s),nextMonth:o,previousMonth:r,onPreviousClick:function(){r&&i(r)},onNextClick:function(){o&&i(o)}})}function tz(e){var t,n,r=tS(),o=r.classNames,i=r.disableNavigation,a=r.styles,l=r.captionLayout,s=r.components,c=null!==(t=null==s?void 0:s.CaptionLabel)&&void 0!==t?t:tE;return n=i?th.jsx(c,{id:e.id,displayMonth:e.displayMonth}):"dropdown"===l?th.jsx(tN,{displayMonth:e.displayMonth,id:e.id}):"dropdown-buttons"===l?th.jsxs(th.Fragment,{children:[th.jsx(tN,{displayMonth:e.displayMonth,displayIndex:e.displayIndex,id:e.id}),th.jsx(tL,{displayMonth:e.displayMonth,displayIndex:e.displayIndex,id:e.id})]}):th.jsxs(th.Fragment,{children:[th.jsx(c,{id:e.id,displayMonth:e.displayMonth,displayIndex:e.displayIndex}),th.jsx(tL,{displayMonth:e.displayMonth,id:e.id})]}),th.jsx("div",{className:o.caption,style:a.caption,children:n})}function tZ(e){var t=tS(),n=t.footer,r=t.styles,o=t.classNames.tfoot;return n?th.jsx("tfoot",{className:o,style:r.tfoot,children:th.jsx("tr",{children:th.jsx("td",{colSpan:8,children:n})})}):th.jsx(th.Fragment,{})}function tB(){var e=tS(),t=e.classNames,n=e.styles,r=e.showWeekNumber,o=e.locale,i=e.weekStartsOn,a=e.ISOWeek,l=e.formatters.formatWeekdayName,s=e.labels.labelWeekday,c=function(e,t,n){for(var r=n?tn(new Date):tt(new Date,{locale:e,weekStartsOn:t}),o=[],i=0;i<7;i++){var a=(0,eh.Z)(r,i);o.push(a)}return o}(o,i,a);return th.jsxs("tr",{style:n.head_row,className:t.head_row,children:[r&&th.jsx("td",{style:n.head_cell,className:t.head_cell}),c.map(function(e,r){return th.jsx("th",{scope:"col",className:t.head_cell,style:n.head_cell,"aria-label":s(e,{locale:o}),children:l(e,{locale:o})},r)})]})}function tF(){var e,t=tS(),n=t.classNames,r=t.styles,o=t.components,i=null!==(e=null==o?void 0:o.HeadRow)&&void 0!==e?e:tB;return th.jsx("thead",{style:r.head,className:n.head,children:th.jsx(i,{})})}function tH(e){var t=tS(),n=t.locale,r=t.formatters.formatDay;return th.jsx(th.Fragment,{children:r(e.date,{locale:n})})}var tq=(0,d.createContext)(void 0);function tU(e){return tm(e.initialProps)?th.jsx(tW,{initialProps:e.initialProps,children:e.children}):th.jsx(tq.Provider,{value:{selected:void 0,modifiers:{disabled:[]}},children:e.children})}function tW(e){var t=e.initialProps,n=e.children,r=t.selected,o=t.min,i=t.max,a={disabled:[]};return r&&a.disabled.push(function(e){var t=i&&r.length>i-1,n=r.some(function(t){return tr(t,e)});return!!(t&&!n)}),th.jsx(tq.Provider,{value:{selected:r,onDayClick:function(e,n,a){if(null===(l=t.onDayClick)||void 0===l||l.call(t,e,n,a),(!n.selected||!o||(null==r?void 0:r.length)!==o)&&(n.selected||!i||(null==r?void 0:r.length)!==i)){var l,s,c=r?td([],r,!0):[];if(n.selected){var u=c.findIndex(function(t){return tr(e,t)});c.splice(u,1)}else c.push(e);null===(s=t.onSelect)||void 0===s||s.call(t,c,e,n,a)}},modifiers:a},children:n})}function tK(){var e=(0,d.useContext)(tq);if(!e)throw Error("useSelectMultiple must be used within a SelectMultipleProvider");return e}var tV=(0,d.createContext)(void 0);function t$(e){return tg(e.initialProps)?th.jsx(tX,{initialProps:e.initialProps,children:e.children}):th.jsx(tV.Provider,{value:{selected:void 0,modifiers:{range_start:[],range_end:[],range_middle:[],disabled:[]}},children:e.children})}function tX(e){var t=e.initialProps,n=e.children,r=t.selected,o=r||{},i=o.from,a=o.to,l=t.min,s=t.max,c={range_start:[],range_end:[],range_middle:[],disabled:[]};if(i?(c.range_start=[i],a?(c.range_end=[a],tr(i,a)||(c.range_middle=[{after:i,before:a}])):c.range_end=[i]):a&&(c.range_start=[a],c.range_end=[a]),l&&(i&&!a&&c.disabled.push({after:eg(i,l-1),before:(0,eh.Z)(i,l-1)}),i&&a&&c.disabled.push({after:i,before:(0,eh.Z)(i,l-1)}),!i&&a&&c.disabled.push({after:eg(a,l-1),before:(0,eh.Z)(a,l-1)})),s){if(i&&!a&&(c.disabled.push({before:(0,eh.Z)(i,-s+1)}),c.disabled.push({after:(0,eh.Z)(i,s-1)})),i&&a){var u=s-(ti(a,i)+1);c.disabled.push({before:eg(i,u)}),c.disabled.push({after:(0,eh.Z)(a,u)})}!i&&a&&(c.disabled.push({before:(0,eh.Z)(a,-s+1)}),c.disabled.push({after:(0,eh.Z)(a,s-1)}))}return th.jsx(tV.Provider,{value:{selected:r,onDayClick:function(e,n,o){null===(s=t.onDayClick)||void 0===s||s.call(t,e,n,o);var i,a,l,s,c,u=(a=(i=r||{}).from,l=i.to,a&&l?tr(l,e)&&tr(a,e)?void 0:tr(l,e)?{from:l,to:void 0}:tr(a,e)?void 0:to(a,e)?{from:e,to:l}:{from:a,to:e}:l?to(e,l)?{from:l,to:e}:{from:e,to:l}:a?te(e,a)?{from:e,to:a}:{from:a,to:e}:{from:e,to:void 0});null===(c=t.onSelect)||void 0===c||c.call(t,u,e,n,o)},modifiers:c},children:n})}function tG(){var e=(0,d.useContext)(tV);if(!e)throw Error("useSelectRange must be used within a SelectRangeProvider");return e}function tY(e){return Array.isArray(e)?td([],e,!0):void 0!==e?[e]:[]}(l=c||(c={})).Outside="outside",l.Disabled="disabled",l.Selected="selected",l.Hidden="hidden",l.Today="today",l.RangeStart="range_start",l.RangeEnd="range_end",l.RangeMiddle="range_middle";var tQ=c.Selected,tJ=c.Disabled,t0=c.Hidden,t1=c.Today,t2=c.RangeEnd,t4=c.RangeMiddle,t6=c.RangeStart,t3=c.Outside,t8=(0,d.createContext)(void 0);function t5(e){var t,n,r,o=tS(),i=tK(),a=tG(),l=((t={})[tQ]=tY(o.selected),t[tJ]=tY(o.disabled),t[t0]=tY(o.hidden),t[t1]=[o.today],t[t2]=[],t[t4]=[],t[t6]=[],t[t3]=[],o.fromDate&&t[tJ].push({before:o.fromDate}),o.toDate&&t[tJ].push({after:o.toDate}),tm(o)?t[tJ]=t[tJ].concat(i.modifiers[tJ]):tg(o)&&(t[tJ]=t[tJ].concat(a.modifiers[tJ]),t[t6]=a.modifiers[t6],t[t4]=a.modifiers[t4],t[t2]=a.modifiers[t2]),t),s=(n=o.modifiers,r={},Object.entries(n).forEach(function(e){var t=e[0],n=e[1];r[t]=tY(n)}),r),c=tu(tu({},l),s);return th.jsx(t8.Provider,{value:c,children:e.children})}function t7(){var e=(0,d.useContext)(t8);if(!e)throw Error("useModifiers must be used within a ModifiersProvider");return e}function t9(e,t,n){var r=Object.keys(t).reduce(function(n,r){return t[r].some(function(t){if("boolean"==typeof t)return t;if(ex(t))return tr(e,t);if(Array.isArray(t)&&t.every(ex))return t.includes(e);if(t&&"object"==typeof t&&"from"in t)return r=t.from,o=t.to,r&&o?(0>ti(o,r)&&(r=(n=[o,r])[0],o=n[1]),ti(e,r)>=0&&ti(o,e)>=0):o?tr(o,e):!!r&&tr(r,e);if(t&&"object"==typeof t&&"dayOfWeek"in t)return t.dayOfWeek.includes(e.getDay());if(t&&"object"==typeof t&&"before"in t&&"after"in t){var n,r,o,i=ti(t.before,e),a=ti(t.after,e),l=i>0,s=a<0;return to(t.before,t.after)?s&&l:l||s}return t&&"object"==typeof t&&"after"in t?ti(e,t.after)>0:t&&"object"==typeof t&&"before"in t?ti(t.before,e)>0:"function"==typeof t&&t(e)})&&n.push(r),n},[]),o={};return r.forEach(function(e){return o[e]=!0}),n&&!e9(e,n)&&(o.outside=!0),o}var ne=(0,d.createContext)(void 0);function nt(e){var t=tM(),n=t7(),r=(0,d.useState)(),o=r[0],i=r[1],a=(0,d.useState)(),l=a[0],s=a[1],c=function(e,t){for(var n,r,o=es(e[0]),i=e3(e[e.length-1]),a=o;a<=i;){var l=t9(a,t);if(!(!l.disabled&&!l.hidden)){a=(0,eh.Z)(a,1);continue}if(l.selected)return a;l.today&&!r&&(r=a),n||(n=a),a=(0,eh.Z)(a,1)}return r||n}(t.displayMonths,n),u=(null!=o?o:l&&t.isDateDisplayed(l))?l:c,f=function(e){i(e)},p=tS(),h=function(e,r){if(o){var i=function e(t,n){var r=n.moveBy,o=n.direction,i=n.context,a=n.modifiers,l=n.retry,s=void 0===l?{count:0,lastFocused:t}:l,c=i.weekStartsOn,u=i.fromDate,d=i.toDate,f=i.locale,p=({day:eh.Z,week:ta,month:ev.Z,year:tl,startOfWeek:function(e){return i.ISOWeek?tn(e):tt(e,{locale:f,weekStartsOn:c})},endOfWeek:function(e){return i.ISOWeek?tc(e):ts(e,{locale:f,weekStartsOn:c})}})[r](t,"after"===o?1:-1);"before"===o&&u?p=ef([u,p]):"after"===o&&d&&(p=ep([d,p]));var h=!0;if(a){var m=t9(p,a);h=!m.disabled&&!m.hidden}return h?p:s.count>365?s.lastFocused:e(p,{moveBy:r,direction:o,context:i,modifiers:a,retry:tu(tu({},s),{count:s.count+1})})}(o,{moveBy:e,direction:r,context:p,modifiers:n});tr(o,i)||(t.goToDate(i,o),f(i))}};return th.jsx(ne.Provider,{value:{focusedDay:o,focusTarget:u,blur:function(){s(o),i(void 0)},focus:f,focusDayAfter:function(){return h("day","after")},focusDayBefore:function(){return h("day","before")},focusWeekAfter:function(){return h("week","after")},focusWeekBefore:function(){return h("week","before")},focusMonthBefore:function(){return h("month","before")},focusMonthAfter:function(){return h("month","after")},focusYearBefore:function(){return h("year","before")},focusYearAfter:function(){return h("year","after")},focusStartOfWeek:function(){return h("startOfWeek","before")},focusEndOfWeek:function(){return h("endOfWeek","after")}},children:e.children})}function nn(){var e=(0,d.useContext)(ne);if(!e)throw Error("useFocusContext must be used within a FocusProvider");return e}var nr=(0,d.createContext)(void 0);function no(e){return tv(e.initialProps)?th.jsx(ni,{initialProps:e.initialProps,children:e.children}):th.jsx(nr.Provider,{value:{selected:void 0},children:e.children})}function ni(e){var t=e.initialProps,n=e.children,r={selected:t.selected,onDayClick:function(e,n,r){var o,i,a;if(null===(o=t.onDayClick)||void 0===o||o.call(t,e,n,r),n.selected&&!t.required){null===(i=t.onSelect)||void 0===i||i.call(t,void 0,e,n,r);return}null===(a=t.onSelect)||void 0===a||a.call(t,e,e,n,r)}};return th.jsx(nr.Provider,{value:r,children:n})}function na(){var e=(0,d.useContext)(nr);if(!e)throw Error("useSelectSingle must be used within a SelectSingleProvider");return e}function nl(e){var t,n,r,o,i,a,l,s,u,f,p,h,m,g,v,y,b,x,w,k,S,E,O,C,j,_,P,T,M,N,A,I,R,D,L,z,Z,B,F,H,q,U,W=(0,d.useRef)(null),K=(t=e.date,n=e.displayMonth,a=tS(),l=nn(),s=t9(t,t7(),n),u=tS(),f=na(),p=tK(),h=tG(),g=(m=nn()).focusDayAfter,v=m.focusDayBefore,y=m.focusWeekAfter,b=m.focusWeekBefore,x=m.blur,w=m.focus,k=m.focusMonthBefore,S=m.focusMonthAfter,E=m.focusYearBefore,O=m.focusYearAfter,C=m.focusStartOfWeek,j=m.focusEndOfWeek,_={onClick:function(e){var n,r,o,i;tv(u)?null===(n=f.onDayClick)||void 0===n||n.call(f,t,s,e):tm(u)?null===(r=p.onDayClick)||void 0===r||r.call(p,t,s,e):tg(u)?null===(o=h.onDayClick)||void 0===o||o.call(h,t,s,e):null===(i=u.onDayClick)||void 0===i||i.call(u,t,s,e)},onFocus:function(e){var n;w(t),null===(n=u.onDayFocus)||void 0===n||n.call(u,t,s,e)},onBlur:function(e){var n;x(),null===(n=u.onDayBlur)||void 0===n||n.call(u,t,s,e)},onKeyDown:function(e){var n;switch(e.key){case"ArrowLeft":e.preventDefault(),e.stopPropagation(),"rtl"===u.dir?g():v();break;case"ArrowRight":e.preventDefault(),e.stopPropagation(),"rtl"===u.dir?v():g();break;case"ArrowDown":e.preventDefault(),e.stopPropagation(),y();break;case"ArrowUp":e.preventDefault(),e.stopPropagation(),b();break;case"PageUp":e.preventDefault(),e.stopPropagation(),e.shiftKey?E():k();break;case"PageDown":e.preventDefault(),e.stopPropagation(),e.shiftKey?O():S();break;case"Home":e.preventDefault(),e.stopPropagation(),C();break;case"End":e.preventDefault(),e.stopPropagation(),j()}null===(n=u.onDayKeyDown)||void 0===n||n.call(u,t,s,e)},onKeyUp:function(e){var n;null===(n=u.onDayKeyUp)||void 0===n||n.call(u,t,s,e)},onMouseEnter:function(e){var n;null===(n=u.onDayMouseEnter)||void 0===n||n.call(u,t,s,e)},onMouseLeave:function(e){var n;null===(n=u.onDayMouseLeave)||void 0===n||n.call(u,t,s,e)},onPointerEnter:function(e){var n;null===(n=u.onDayPointerEnter)||void 0===n||n.call(u,t,s,e)},onPointerLeave:function(e){var n;null===(n=u.onDayPointerLeave)||void 0===n||n.call(u,t,s,e)},onTouchCancel:function(e){var n;null===(n=u.onDayTouchCancel)||void 0===n||n.call(u,t,s,e)},onTouchEnd:function(e){var n;null===(n=u.onDayTouchEnd)||void 0===n||n.call(u,t,s,e)},onTouchMove:function(e){var n;null===(n=u.onDayTouchMove)||void 0===n||n.call(u,t,s,e)},onTouchStart:function(e){var n;null===(n=u.onDayTouchStart)||void 0===n||n.call(u,t,s,e)}},P=tS(),T=na(),M=tK(),N=tG(),A=tv(P)?T.selected:tm(P)?M.selected:tg(P)?N.selected:void 0,I=!!(a.onDayClick||"default"!==a.mode),(0,d.useEffect)(function(){var e;!s.outside&&l.focusedDay&&I&&tr(l.focusedDay,t)&&(null===(e=W.current)||void 0===e||e.focus())},[l.focusedDay,t,W,I,s.outside]),D=(R=[a.classNames.day],Object.keys(s).forEach(function(e){var t=a.modifiersClassNames[e];if(t)R.push(t);else if(Object.values(c).includes(e)){var n=a.classNames["day_".concat(e)];n&&R.push(n)}}),R).join(" "),L=tu({},a.styles.day),Object.keys(s).forEach(function(e){var t;L=tu(tu({},L),null===(t=a.modifiersStyles)||void 0===t?void 0:t[e])}),z=L,Z=!!(s.outside&&!a.showOutsideDays||s.hidden),B=null!==(i=null===(o=a.components)||void 0===o?void 0:o.DayContent)&&void 0!==i?i:tH,F={style:z,className:D,children:th.jsx(B,{date:t,displayMonth:n,activeModifiers:s}),role:"gridcell"},H=l.focusTarget&&tr(l.focusTarget,t)&&!s.outside,q=l.focusedDay&&tr(l.focusedDay,t),U=tu(tu(tu({},F),((r={disabled:s.disabled,role:"gridcell"})["aria-selected"]=s.selected,r.tabIndex=q||H?0:-1,r)),_),{isButton:I,isHidden:Z,activeModifiers:s,selectedDays:A,buttonProps:U,divProps:F});return K.isHidden?th.jsx("div",{role:"gridcell"}):K.isButton?th.jsx(tR,tu({name:"day",ref:W},K.buttonProps)):th.jsx("div",tu({},K.divProps))}function ns(e){var t=e.number,n=e.dates,r=tS(),o=r.onWeekNumberClick,i=r.styles,a=r.classNames,l=r.locale,s=r.labels.labelWeekNumber,c=(0,r.formatters.formatWeekNumber)(Number(t),{locale:l});if(!o)return th.jsx("span",{className:a.weeknumber,style:i.weeknumber,children:c});var u=s(Number(t),{locale:l});return th.jsx(tR,{name:"week-number","aria-label":u,className:a.weeknumber,style:i.weeknumber,onClick:function(e){o(t,n,e)},children:c})}function nc(e){var t,n,r,o=tS(),i=o.styles,a=o.classNames,l=o.showWeekNumber,s=o.components,c=null!==(t=null==s?void 0:s.Day)&&void 0!==t?t:nl,u=null!==(n=null==s?void 0:s.WeekNumber)&&void 0!==n?n:ns;return l&&(r=th.jsx("td",{className:a.cell,style:i.cell,children:th.jsx(u,{number:e.weekNumber,dates:e.dates})})),th.jsxs("tr",{className:a.row,style:i.row,children:[r,e.dates.map(function(t){return th.jsx("td",{className:a.cell,style:i.cell,role:"presentation",children:th.jsx(c,{displayMonth:e.displayMonth,date:t})},function(e){return(0,ei.Z)(1,arguments),Math.floor(function(e){return(0,ei.Z)(1,arguments),(0,eo.Z)(e).getTime()}(e)/1e3)}(t))})]})}function nu(e,t,n){for(var r=(null==n?void 0:n.ISOWeek)?tc(t):ts(t,n),o=(null==n?void 0:n.ISOWeek)?tn(e):tt(e,n),i=ti(r,o),a=[],l=0;l<=i;l++)a.push((0,eh.Z)(o,l));return a.reduce(function(e,t){var r=(null==n?void 0:n.ISOWeek)?function(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e);return Math.round((tn(t).getTime()-(function(e){(0,ei.Z)(1,arguments);var t=function(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getFullYear(),r=new Date(0);r.setFullYear(n+1,0,4),r.setHours(0,0,0,0);var o=tn(r),i=new Date(0);i.setFullYear(n,0,4),i.setHours(0,0,0,0);var a=tn(i);return t.getTime()>=o.getTime()?n+1:t.getTime()>=a.getTime()?n:n-1}(e),n=new Date(0);return n.setFullYear(t,0,4),n.setHours(0,0,0,0),tn(n)})(t).getTime())/6048e5)+1}(t):function(e,t){(0,ei.Z)(1,arguments);var n=(0,eo.Z)(e);return Math.round((tt(n,t).getTime()-(function(e,t){(0,ei.Z)(1,arguments);var n,r,o,i,a,l,s,c,u=(0,em.Z)(null!==(n=null!==(r=null!==(o=null!==(i=null==t?void 0:t.firstWeekContainsDate)&&void 0!==i?i:null==t?void 0:null===(a=t.locale)||void 0===a?void 0:null===(l=a.options)||void 0===l?void 0:l.firstWeekContainsDate)&&void 0!==o?o:eS.firstWeekContainsDate)&&void 0!==r?r:null===(s=eS.locale)||void 0===s?void 0:null===(c=s.options)||void 0===c?void 0:c.firstWeekContainsDate)&&void 0!==n?n:1),d=function(e,t){(0,ei.Z)(1,arguments);var n,r,o,i,a,l,s,c,u=(0,eo.Z)(e),d=u.getFullYear(),f=(0,em.Z)(null!==(n=null!==(r=null!==(o=null!==(i=null==t?void 0:t.firstWeekContainsDate)&&void 0!==i?i:null==t?void 0:null===(a=t.locale)||void 0===a?void 0:null===(l=a.options)||void 0===l?void 0:l.firstWeekContainsDate)&&void 0!==o?o:eS.firstWeekContainsDate)&&void 0!==r?r:null===(s=eS.locale)||void 0===s?void 0:null===(c=s.options)||void 0===c?void 0:c.firstWeekContainsDate)&&void 0!==n?n:1);if(!(f>=1&&f<=7))throw RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var p=new Date(0);p.setFullYear(d+1,0,f),p.setHours(0,0,0,0);var h=tt(p,t),m=new Date(0);m.setFullYear(d,0,f),m.setHours(0,0,0,0);var g=tt(m,t);return u.getTime()>=h.getTime()?d+1:u.getTime()>=g.getTime()?d:d-1}(e,t),f=new Date(0);return f.setFullYear(d,0,u),f.setHours(0,0,0,0),tt(f,t)})(n,t).getTime())/6048e5)+1}(t,n),o=e.find(function(e){return e.weekNumber===r});return o?o.dates.push(t):e.push({weekNumber:r,dates:[t]}),e},[])}function nd(e){var t,n,r,o=tS(),i=o.locale,a=o.classNames,l=o.styles,s=o.hideHead,c=o.fixedWeeks,u=o.components,d=o.weekStartsOn,f=o.firstWeekContainsDate,p=o.ISOWeek,h=function(e,t){var n=nu(es(e),e3(e),t);if(null==t?void 0:t.useFixedWeeks){var r=function(e,t){return(0,ei.Z)(1,arguments),function(e,t,n){(0,ei.Z)(2,arguments);var r=tt(e,n),o=tt(t,n);return Math.round((r.getTime()-eD(r)-(o.getTime()-eD(o)))/6048e5)}(function(e){(0,ei.Z)(1,arguments);var t=(0,eo.Z)(e),n=t.getMonth();return t.setFullYear(t.getFullYear(),n+1,0),t.setHours(0,0,0,0),t}(e),es(e),t)+1}(e,t);if(r<6){var o=n[n.length-1],i=o.dates[o.dates.length-1],a=ta(i,6-r),l=nu(ta(i,1),a,t);n.push.apply(n,l)}}return n}(e.displayMonth,{useFixedWeeks:!!c,ISOWeek:p,locale:i,weekStartsOn:d,firstWeekContainsDate:f}),m=null!==(t=null==u?void 0:u.Head)&&void 0!==t?t:tF,g=null!==(n=null==u?void 0:u.Row)&&void 0!==n?n:nc,v=null!==(r=null==u?void 0:u.Footer)&&void 0!==r?r:tZ;return th.jsxs("table",{id:e.id,className:a.table,style:l.table,role:"grid","aria-labelledby":e["aria-labelledby"],children:[!s&&th.jsx(m,{}),th.jsx("tbody",{className:a.tbody,style:l.tbody,children:h.map(function(t){return th.jsx(g,{displayMonth:e.displayMonth,dates:t.dates,weekNumber:t.weekNumber},t.weekNumber)})}),th.jsx(v,{displayMonth:e.displayMonth})]})}var nf="undefined"!=typeof window&&window.document&&window.document.createElement?d.useLayoutEffect:d.useEffect,np=!1,nh=0;function nm(){return"react-day-picker-".concat(++nh)}function ng(e){var t,n,r,o,i,a,l,s,c=tS(),u=c.dir,f=c.classNames,p=c.styles,h=c.components,m=tM().displayMonths,g=(r=null!=(t=c.id?"".concat(c.id,"-").concat(e.displayIndex):void 0)?t:np?nm():null,i=(o=(0,d.useState)(r))[0],a=o[1],nf(function(){null===i&&a(nm())},[]),(0,d.useEffect)(function(){!1===np&&(np=!0)},[]),null!==(n=null!=t?t:i)&&void 0!==n?n:void 0),v=c.id?"".concat(c.id,"-grid-").concat(e.displayIndex):void 0,y=[f.month],b=p.month,x=0===e.displayIndex,w=e.displayIndex===m.length-1,k=!x&&!w;"rtl"===u&&(w=(l=[x,w])[0],x=l[1]),x&&(y.push(f.caption_start),b=tu(tu({},b),p.caption_start)),w&&(y.push(f.caption_end),b=tu(tu({},b),p.caption_end)),k&&(y.push(f.caption_between),b=tu(tu({},b),p.caption_between));var S=null!==(s=null==h?void 0:h.Caption)&&void 0!==s?s:tz;return th.jsxs("div",{className:y.join(" "),style:b,children:[th.jsx(S,{id:g,displayMonth:e.displayMonth,displayIndex:e.displayIndex}),th.jsx(nd,{id:v,"aria-labelledby":g,displayMonth:e.displayMonth})]},e.displayIndex)}function nv(e){var t=tS(),n=t.classNames,r=t.styles;return th.jsx("div",{className:n.months,style:r.months,children:e.children})}function ny(e){var t,n,r=e.initialProps,o=tS(),i=nn(),a=tM(),l=(0,d.useState)(!1),s=l[0],c=l[1];(0,d.useEffect)(function(){o.initialFocus&&i.focusTarget&&(s||(i.focus(i.focusTarget),c(!0)))},[o.initialFocus,s,i.focus,i.focusTarget,i]);var u=[o.classNames.root,o.className];o.numberOfMonths>1&&u.push(o.classNames.multiple_months),o.showWeekNumber&&u.push(o.classNames.with_weeknumber);var f=tu(tu({},o.styles.root),o.style),p=Object.keys(r).filter(function(e){return e.startsWith("data-")}).reduce(function(e,t){var n;return tu(tu({},e),((n={})[t]=r[t],n))},{}),h=null!==(n=null===(t=r.components)||void 0===t?void 0:t.Months)&&void 0!==n?n:nv;return th.jsx("div",tu({className:u.join(" "),style:f,dir:o.dir,id:o.id,nonce:r.nonce,title:r.title,lang:r.lang},p,{children:th.jsx(h,{children:a.displayMonths.map(function(e,t){return th.jsx(ng,{displayIndex:t,displayMonth:e},t)})})}))}function nb(e){var t=e.children,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}(e,["children"]);return th.jsx(tk,{initialProps:n,children:th.jsx(tT,{children:th.jsx(no,{initialProps:n,children:th.jsx(tU,{initialProps:n,children:th.jsx(t$,{initialProps:n,children:th.jsx(t5,{children:th.jsx(nt,{children:t})})})})})})})}function nx(e){return th.jsx(nb,tu({},e,{children:th.jsx(ny,{initialProps:e})}))}let nw=e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M10.8284 12.0007L15.7782 16.9504L14.364 18.3646L8 12.0007L14.364 5.63672L15.7782 7.05093L10.8284 12.0007Z"}))},nk=e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M13.1717 12.0007L8.22192 7.05093L9.63614 5.63672L16.0001 12.0007L9.63614 18.3646L8.22192 16.9504L13.1717 12.0007Z"}))},nS=e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M4.83582 12L11.0429 18.2071L12.4571 16.7929L7.66424 12L12.4571 7.20712L11.0429 5.79291L4.83582 12ZM10.4857 12L16.6928 18.2071L18.107 16.7929L13.3141 12L18.107 7.20712L16.6928 5.79291L10.4857 12Z"}))},nE=e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M19.1642 12L12.9571 5.79291L11.5429 7.20712L16.3358 12L11.5429 16.7929L12.9571 18.2071L19.1642 12ZM13.5143 12L7.30722 5.79291L5.89301 7.20712L10.6859 12L5.89301 16.7929L7.30722 18.2071L13.5143 12Z"}))};var nO=n(84264);n(41649);var nC=n(1526),nj=n(7084),n_=n(26898);let nP={xs:{paddingX:"px-2",paddingY:"py-0.5",fontSize:"text-xs"},sm:{paddingX:"px-2.5",paddingY:"py-1",fontSize:"text-sm"},md:{paddingX:"px-3",paddingY:"py-1.5",fontSize:"text-md"},lg:{paddingX:"px-3.5",paddingY:"py-1.5",fontSize:"text-lg"},xl:{paddingX:"px-3.5",paddingY:"py-1.5",fontSize:"text-xl"}},nT={xs:{paddingX:"px-2",paddingY:"py-0.5",fontSize:"text-xs"},sm:{paddingX:"px-2.5",paddingY:"py-0.5",fontSize:"text-sm"},md:{paddingX:"px-3",paddingY:"py-0.5",fontSize:"text-md"},lg:{paddingX:"px-3.5",paddingY:"py-0.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-1",fontSize:"text-xl"}},nM={xs:{height:"h-4",width:"w-4"},sm:{height:"h-4",width:"w-4"},md:{height:"h-4",width:"w-4"},lg:{height:"h-5",width:"w-5"},xl:{height:"h-6",width:"w-6"}},nN={[nj.wu.Increase]:{bgColor:(0,eJ.bM)(nj.fr.Emerald,n_.K.background).bgColor,textColor:(0,eJ.bM)(nj.fr.Emerald,n_.K.text).textColor},[nj.wu.ModerateIncrease]:{bgColor:(0,eJ.bM)(nj.fr.Emerald,n_.K.background).bgColor,textColor:(0,eJ.bM)(nj.fr.Emerald,n_.K.text).textColor},[nj.wu.Decrease]:{bgColor:(0,eJ.bM)(nj.fr.Rose,n_.K.background).bgColor,textColor:(0,eJ.bM)(nj.fr.Rose,n_.K.text).textColor},[nj.wu.ModerateDecrease]:{bgColor:(0,eJ.bM)(nj.fr.Rose,n_.K.background).bgColor,textColor:(0,eJ.bM)(nj.fr.Rose,n_.K.text).textColor},[nj.wu.Unchanged]:{bgColor:(0,eJ.bM)(nj.fr.Orange,n_.K.background).bgColor,textColor:(0,eJ.bM)(nj.fr.Orange,n_.K.text).textColor}},nA={[nj.wu.Increase]:e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M13.0001 7.82843V20H11.0001V7.82843L5.63614 13.1924L4.22192 11.7782L12.0001 4L19.7783 11.7782L18.3641 13.1924L13.0001 7.82843Z"}))},[nj.wu.ModerateIncrease]:e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M16.0037 9.41421L7.39712 18.0208L5.98291 16.6066L14.5895 8H7.00373V6H18.0037V17H16.0037V9.41421Z"}))},[nj.wu.Decrease]:e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M13.0001 16.1716L18.3641 10.8076L19.7783 12.2218L12.0001 20L4.22192 12.2218L5.63614 10.8076L11.0001 16.1716V4H13.0001V16.1716Z"}))},[nj.wu.ModerateDecrease]:e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M14.5895 16.0032L5.98291 7.39664L7.39712 5.98242L16.0037 14.589V7.00324H18.0037V18.0032H7.00373V16.0032H14.5895Z"}))},[nj.wu.Unchanged]:e=>{var t=(0,u._T)(e,[]);return d.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),d.createElement("path",{d:"M16.1716 10.9999L10.8076 5.63589L12.2218 4.22168L20 11.9999L12.2218 19.778L10.8076 18.3638L16.1716 12.9999H4V10.9999H16.1716Z"}))}},nI=(0,eJ.fn)("BadgeDelta");d.forwardRef((e,t)=>{let{deltaType:n=nj.wu.Increase,isIncreasePositive:r=!0,size:o=nj.u8.SM,tooltip:i,children:a,className:l}=e,s=(0,u._T)(e,["deltaType","isIncreasePositive","size","tooltip","children","className"]),c=nA[n],f=(0,eJ.Fo)(n,r),p=a?nT:nP,{tooltipProps:h,getReferenceProps:m}=(0,nC.l)();return d.createElement("span",Object.assign({ref:(0,eJ.lq)([t,h.refs.setReference]),className:(0,ec.q)(nI("root"),"w-max flex-shrink-0 inline-flex justify-center items-center cursor-default rounded-tremor-full bg-opacity-20 dark:bg-opacity-25",nN[f].bgColor,nN[f].textColor,p[o].paddingX,p[o].paddingY,p[o].fontSize,l)},m,s),d.createElement(nC.Z,Object.assign({text:i},h)),d.createElement(c,{className:(0,ec.q)(nI("icon"),"shrink-0",a?(0,ec.q)("-ml-1 mr-1.5"):nM[o].height,nM[o].width)}),a?d.createElement("p",{className:(0,ec.q)(nI("text"),"text-sm whitespace-nowrap")},a):null)}).displayName="BadgeDelta";var nR=n(47323);let nD=e=>{var{onClick:t,icon:n}=e,r=(0,u._T)(e,["onClick","icon"]);return d.createElement("button",Object.assign({type:"button",className:(0,ec.q)("flex items-center justify-center p-1 h-7 w-7 outline-none focus:ring-2 transition duration-100 border border-tremor-border dark:border-dark-tremor-border hover:bg-tremor-background-muted dark:hover:bg-dark-tremor-background-muted rounded-tremor-small focus:border-tremor-brand-subtle select-none dark:focus:border-dark-tremor-brand-subtle focus:ring-tremor-brand-muted dark:focus:ring-dark-tremor-brand-muted text-tremor-content-subtle dark:text-dark-tremor-content-subtle hover:text-tremor-content dark:hover:text-dark-tremor-content")},r),d.createElement(nR.Z,{onClick:t,icon:n,variant:"simple",color:"slate",size:"sm"}))};function nL(e){var{mode:t,defaultMonth:n,selected:r,onSelect:o,locale:i,disabled:a,enableYearNavigation:l,classNames:s,weekStartsOn:c=0}=e,f=(0,u._T)(e,["mode","defaultMonth","selected","onSelect","locale","disabled","enableYearNavigation","classNames","weekStartsOn"]);return d.createElement(nx,Object.assign({showOutsideDays:!0,mode:t,defaultMonth:n,selected:r,onSelect:o,locale:i,disabled:a,weekStartsOn:c,classNames:Object.assign({months:"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",month:"space-y-4",caption:"flex justify-center pt-2 relative items-center",caption_label:"text-tremor-default text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis font-medium",nav:"space-x-1 flex items-center",nav_button:"flex items-center justify-center p-1 h-7 w-7 outline-none focus:ring-2 transition duration-100 border border-tremor-border dark:border-dark-tremor-border hover:bg-tremor-background-muted dark:hover:bg-dark-tremor-background-muted rounded-tremor-small focus:border-tremor-brand-subtle dark:focus:border-dark-tremor-brand-subtle focus:ring-tremor-brand-muted dark:focus:ring-dark-tremor-brand-muted text-tremor-content-subtle dark:text-dark-tremor-content-subtle hover:text-tremor-content dark:hover:text-dark-tremor-content",nav_button_previous:"absolute left-1",nav_button_next:"absolute right-1",table:"w-full border-collapse space-y-1",head_row:"flex",head_cell:"w-9 font-normal text-center text-tremor-content-subtle dark:text-dark-tremor-content-subtle",row:"flex w-full mt-0.5",cell:"text-center p-0 relative focus-within:relative text-tremor-default text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis",day:"h-9 w-9 p-0 hover:bg-tremor-background-subtle dark:hover:bg-dark-tremor-background-subtle outline-tremor-brand dark:outline-dark-tremor-brand rounded-tremor-default",day_today:"font-bold",day_selected:"aria-selected:bg-tremor-background-emphasis aria-selected:text-tremor-content-inverted dark:aria-selected:bg-dark-tremor-background-emphasis dark:aria-selected:text-dark-tremor-content-inverted ",day_disabled:"text-tremor-content-subtle dark:text-dark-tremor-content-subtle disabled:hover:bg-transparent",day_outside:"text-tremor-content-subtle dark:text-dark-tremor-content-subtle"},s),components:{IconLeft:e=>{var t=(0,u._T)(e,[]);return d.createElement(nw,Object.assign({className:"h-4 w-4"},t))},IconRight:e=>{var t=(0,u._T)(e,[]);return d.createElement(nk,Object.assign({className:"h-4 w-4"},t))},Caption:e=>{var t=(0,u._T)(e,[]);let{goToMonth:n,nextMonth:r,previousMonth:o,currentMonth:a}=tM();return d.createElement("div",{className:"flex justify-between items-center"},d.createElement("div",{className:"flex items-center space-x-1"},l&&d.createElement(nD,{onClick:()=>a&&n(tl(a,-1)),icon:nS}),d.createElement(nD,{onClick:()=>o&&n(o),icon:nw})),d.createElement(nO.Z,{className:"text-tremor-default tabular-nums capitalize text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis font-medium"},eQ(t.displayMonth,"LLLL yyy",{locale:i})),d.createElement("div",{className:"flex items-center space-x-1"},d.createElement(nD,{onClick:()=>r&&n(r),icon:nk}),l&&d.createElement(nD,{onClick:()=>a&&n(tl(a,1)),icon:nE})))}}},f))}nL.displayName="DateRangePicker",n(27281);var nz=n(57365),nZ=n(44140);let nB=el(),nF=d.forwardRef((e,t)=>{var n,r;let{value:o,defaultValue:i,onValueChange:a,enableSelect:l=!0,minDate:s,maxDate:c,placeholder:f="Select range",selectPlaceholder:p="Select range",disabled:h=!1,locale:m=eK,enableClear:g=!0,displayFormat:v,children:y,className:b,enableYearNavigation:x=!1,weekStartsOn:w=0,disabledDates:k}=e,S=(0,u._T)(e,["value","defaultValue","onValueChange","enableSelect","minDate","maxDate","placeholder","selectPlaceholder","disabled","locale","enableClear","displayFormat","children","className","enableYearNavigation","weekStartsOn","disabledDates"]),[E,O]=(0,nZ.Z)(i,o),[C,j]=(0,d.useState)(!1),[_,P]=(0,d.useState)(!1),T=(0,d.useMemo)(()=>{let e=[];return s&&e.push({before:s}),c&&e.push({after:c}),[...e,...null!=k?k:[]]},[s,c,k]),M=(0,d.useMemo)(()=>{let e=new Map;return y?d.Children.forEach(y,t=>{var n;e.set(t.props.value,{text:null!==(n=(0,eu.qg)(t))&&void 0!==n?n:t.props.value,from:t.props.from,to:t.props.to})}):e4.forEach(t=>{e.set(t.value,{text:t.text,from:t.from,to:nB})}),e},[y]),N=(0,d.useMemo)(()=>{if(y)return(0,eu.sl)(y);let e=new Map;return e4.forEach(t=>e.set(t.value,t.text)),e},[y]),A=(null==E?void 0:E.selectValue)||"",I=e1(null==E?void 0:E.from,s,A,M),R=e2(null==E?void 0:E.to,c,A,M),D=I||R?e6(I,R,m,v):f,L=es(null!==(r=null!==(n=null!=R?R:I)&&void 0!==n?n:c)&&void 0!==r?r:nB),z=g&&!h;return d.createElement("div",Object.assign({ref:t,className:(0,ec.q)("w-full min-w-[10rem] relative flex justify-between text-tremor-default max-w-sm shadow-tremor-input dark:shadow-dark-tremor-input rounded-tremor-default",b)},S),d.createElement(J,{as:"div",className:(0,ec.q)("w-full",l?"rounded-l-tremor-default":"rounded-tremor-default",C&&"ring-2 ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted z-10")},d.createElement("div",{className:"relative w-full"},d.createElement(J.Button,{onFocus:()=>j(!0),onBlur:()=>j(!1),disabled:h,className:(0,ec.q)("w-full outline-none text-left whitespace-nowrap truncate focus:ring-2 transition duration-100 rounded-l-tremor-default flex flex-nowrap border pl-3 py-2","rounded-l-tremor-default border-tremor-border text-tremor-content-emphasis focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:text-dark-tremor-content-emphasis dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",l?"rounded-l-tremor-default":"rounded-tremor-default",z?"pr-8":"pr-4",(0,eu.um)((0,eu.Uh)(I||R),h))},d.createElement(en,{className:(0,ec.q)(e0("calendarIcon"),"flex-none shrink-0 h-5 w-5 -ml-0.5 mr-2","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle"),"aria-hidden":"true"}),d.createElement("p",{className:"truncate"},D)),z&&I?d.createElement("button",{type:"button",className:(0,ec.q)("absolute outline-none inset-y-0 right-0 flex items-center transition duration-100 mr-4"),onClick:e=>{e.preventDefault(),null==a||a({}),O({})}},d.createElement(er.Z,{className:(0,ec.q)(e0("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null),d.createElement(ee.u,{className:"absolute z-10 min-w-min left-0",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},d.createElement(J.Panel,{focus:!0,className:(0,ec.q)("divide-y overflow-y-auto outline-none rounded-tremor-default p-3 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},d.createElement(nL,Object.assign({mode:"range",showOutsideDays:!0,defaultMonth:L,selected:{from:I,to:R},onSelect:e=>{null==a||a({from:null==e?void 0:e.from,to:null==e?void 0:e.to}),O({from:null==e?void 0:e.from,to:null==e?void 0:e.to})},locale:m,disabled:T,enableYearNavigation:x,classNames:{day_range_middle:(0,ec.q)("!rounded-none aria-selected:!bg-tremor-background-subtle aria-selected:dark:!bg-dark-tremor-background-subtle aria-selected:!text-tremor-content aria-selected:dark:!bg-dark-tremor-background-subtle"),day_range_start:"rounded-r-none rounded-l-tremor-small aria-selected:text-tremor-brand-inverted dark:aria-selected:text-dark-tremor-brand-inverted",day_range_end:"rounded-l-none rounded-r-tremor-small aria-selected:text-tremor-brand-inverted dark:aria-selected:text-dark-tremor-brand-inverted"},weekStartsOn:w},e))))),l&&d.createElement(et.R,{as:"div",className:(0,ec.q)("w-48 -ml-px rounded-r-tremor-default",_&&"ring-2 ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted z-10"),value:A,onChange:e=>{let{from:t,to:n}=M.get(e),r=null!=n?n:nB;null==a||a({from:t,to:r,selectValue:e}),O({from:t,to:r,selectValue:e})},disabled:h},e=>{var t;let{value:n}=e;return d.createElement(d.Fragment,null,d.createElement(et.R.Button,{onFocus:()=>P(!0),onBlur:()=>P(!1),className:(0,ec.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-r-tremor-default transition duration-100 border px-4 py-2","border-tremor-border shadow-tremor-input text-tremor-content-emphasis focus:border-tremor-brand-subtle","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:text-dark-tremor-content-emphasis dark:focus:border-dark-tremor-brand-subtle",(0,eu.um)((0,eu.Uh)(n),h))},n&&null!==(t=N.get(n))&&void 0!==t?t:p),d.createElement(ee.u,{className:"absolute z-10 w-full inset-x-0 right-0",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},d.createElement(et.R.Options,{className:(0,ec.q)("divide-y overflow-y-auto outline-none border my-1","shadow-tremor-dropdown bg-tremor-background border-tremor-border divide-tremor-border rounded-tremor-default","dark:shadow-dark-tremor-dropdown dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border")},null!=y?y:e4.map(e=>d.createElement(nz.Z,{key:e.value,value:e.value},e.text)))))}))});nF.displayName="DateRangePicker"},92414:function(e,t,n){"use strict";n.d(t,{Z:function(){return v}});var r=n(5853),o=n(2265);n(42698),n(64016),n(8710);var i=n(33232),a=n(44140),l=n(58747);let s=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),o.createElement("path",{d:"M18.031 16.6168L22.3137 20.8995L20.8995 22.3137L16.6168 18.031C15.0769 19.263 13.124 20 11 20C6.032 20 2 15.968 2 11C2 6.032 6.032 2 11 2C15.968 2 20 6.032 20 11C20 13.124 19.263 15.0769 18.031 16.6168ZM16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 7.1325 14.8675 4 11 4C7.1325 4 4 7.1325 4 11C4 14.8675 7.1325 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748Z"}))};var c=n(4537),u=n(9528),d=n(33044);let f=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},t),o.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),o.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))};var p=n(97324),h=n(1153),m=n(96398);let g=(0,h.fn)("MultiSelect"),v=o.forwardRef((e,t)=>{let{defaultValue:n,value:h,onValueChange:v,placeholder:y="Select...",placeholderSearch:b="Search",disabled:x=!1,icon:w,children:k,className:S}=e,E=(0,r._T)(e,["defaultValue","value","onValueChange","placeholder","placeholderSearch","disabled","icon","children","className"]),[O,C]=(0,a.Z)(n,h),{reactElementChildren:j,optionsAvailable:_}=(0,o.useMemo)(()=>{let e=o.Children.toArray(k).filter(o.isValidElement);return{reactElementChildren:e,optionsAvailable:(0,m.n0)("",e)}},[k]),[P,T]=(0,o.useState)(""),M=(null!=O?O:[]).length>0,N=(0,o.useMemo)(()=>P?(0,m.n0)(P,j):_,[P,j,_]),A=()=>{T("")};return o.createElement(u.R,Object.assign({as:"div",ref:t,defaultValue:O,value:O,onChange:e=>{null==v||v(e),C(e)},disabled:x,className:(0,p.q)("w-full min-w-[10rem] relative text-tremor-default",S)},E,{multiple:!0}),e=>{let{value:t}=e;return o.createElement(o.Fragment,null,o.createElement(u.R.Button,{className:(0,p.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 border pr-8 py-1.5","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",w?"pl-11 -ml-0.5":"pl-3",(0,m.um)(t.length>0,x))},w&&o.createElement("span",{className:(0,p.q)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},o.createElement(w,{className:(0,p.q)(g("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement("div",{className:"h-6 flex items-center"},t.length>0?o.createElement("div",{className:"flex flex-nowrap overflow-x-scroll [&::-webkit-scrollbar]:hidden [scrollbar-width:none] gap-x-1 mr-5 -ml-1.5 relative"},_.filter(e=>t.includes(e.props.value)).map((e,n)=>{var r;return o.createElement("div",{key:n,className:(0,p.q)("max-w-[100px] lg:max-w-[200px] flex justify-center items-center pl-2 pr-1.5 py-1 font-medium","rounded-tremor-small","bg-tremor-background-muted dark:bg-dark-tremor-background-muted","bg-tremor-background-subtle dark:bg-dark-tremor-background-subtle","text-tremor-content-default dark:text-dark-tremor-content-default","text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis")},o.createElement("div",{className:"text-xs truncate "},null!==(r=e.props.children)&&void 0!==r?r:e.props.value),o.createElement("div",{onClick:n=>{n.preventDefault();let r=t.filter(t=>t!==e.props.value);null==v||v(r),C(r)}},o.createElement(f,{className:(0,p.q)(g("clearIconItem"),"cursor-pointer rounded-tremor-full w-3.5 h-3.5 ml-2","text-tremor-content-subtle hover:text-tremor-content","dark:text-dark-tremor-content-subtle dark:hover:text-tremor-content")})))})):o.createElement("span",null,y)),o.createElement("span",{className:(0,p.q)("absolute inset-y-0 right-0 flex items-center mr-2.5")},o.createElement(l.Z,{className:(0,p.q)(g("arrowDownIcon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),M&&!x?o.createElement("button",{type:"button",className:(0,p.q)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),C([]),null==v||v([])}},o.createElement(c.Z,{className:(0,p.q)(g("clearIconAllItems"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,o.createElement(d.u,{className:"absolute z-10 w-full",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},o.createElement(u.R.Options,{className:(0,p.q)("divide-y overflow-y-auto outline-none rounded-tremor-default max-h-[228px] left-0 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},o.createElement("div",{className:(0,p.q)("flex items-center w-full px-2.5","bg-tremor-background-muted","dark:bg-dark-tremor-background-muted")},o.createElement("span",null,o.createElement(s,{className:(0,p.q)("flex-none w-4 h-4 mr-2","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement("input",{name:"search",type:"input",autoComplete:"off",placeholder:b,className:(0,p.q)("w-full focus:outline-none focus:ring-none bg-transparent text-tremor-default py-2","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis"),onKeyDown:e=>{"Space"===e.code&&""!==e.target.value&&e.stopPropagation()},onChange:e=>T(e.target.value),value:P})),o.createElement(i.Z.Provider,Object.assign({},{onBlur:{handleResetSearch:A}},{value:{selectedValue:t}}),N))))})});v.displayName="MultiSelect"},46030:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(5853);n(42698),n(64016),n(8710);var o=n(33232),i=n(2265),a=n(97324),l=n(1153),s=n(9528);let c=(0,l.fn)("MultiSelectItem"),u=i.forwardRef((e,t)=>{let{value:n,className:u,children:d}=e,f=(0,r._T)(e,["value","className","children"]),{selectedValue:p}=(0,i.useContext)(o.Z),h=(0,l.NZ)(n,p);return i.createElement(s.R.Option,Object.assign({className:(0,a.q)(c("root"),"flex justify-start items-center cursor-default text-tremor-default p-2.5","ui-active:bg-tremor-background-muted ui-active:text-tremor-content-strong ui-selected:text-tremor-content-strong text-tremor-content-emphasis","dark:ui-active:bg-dark-tremor-background-muted dark:ui-active:text-dark-tremor-content-strong dark:ui-selected:text-dark-tremor-content-strong dark:ui-selected:bg-dark-tremor-background-muted dark:text-dark-tremor-content-emphasis",u),ref:t,key:n,value:n},f),i.createElement("input",{type:"checkbox",className:(0,a.q)(c("checkbox"),"flex-none focus:ring-none focus:outline-none cursor-pointer mr-2.5","accent-tremor-brand","dark:accent-dark-tremor-brand"),checked:h,readOnly:!0}),i.createElement("span",{className:"whitespace-nowrap truncate"},null!=d?d:n))});u.displayName="MultiSelectItem"},30150:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r=n(5853),o=n(2265);let i=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"}),o.createElement("path",{d:"M12 4v16m8-8H4"}))},a=e=>{var t=(0,r._T)(e,[]);return o.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2.5"}),o.createElement("path",{d:"M20 12H4"}))};var l=n(97324),s=n(1153),c=n(69262);let u="flex mx-auto text-tremor-content-subtle dark:text-dark-tremor-content-subtle",d="cursor-pointer hover:text-tremor-content dark:hover:text-dark-tremor-content",f=o.forwardRef((e,t)=>{let{onSubmit:n,enableStepper:f=!0,disabled:p,onValueChange:h,onChange:m}=e,g=(0,r._T)(e,["onSubmit","enableStepper","disabled","onValueChange","onChange"]),v=(0,o.useRef)(null),[y,b]=o.useState(!1),x=o.useCallback(()=>{b(!0)},[]),w=o.useCallback(()=>{b(!1)},[]),[k,S]=o.useState(!1),E=o.useCallback(()=>{S(!0)},[]),O=o.useCallback(()=>{S(!1)},[]);return o.createElement(c.Z,Object.assign({type:"number",ref:(0,s.lq)([v,t]),disabled:p,makeInputClassName:(0,s.fn)("NumberInput"),onKeyDown:e=>{var t;if("Enter"===e.key&&!e.ctrlKey&&!e.altKey&&!e.shiftKey){let e=null===(t=v.current)||void 0===t?void 0:t.value;null==n||n(parseFloat(null!=e?e:""))}"ArrowDown"===e.key&&x(),"ArrowUp"===e.key&&E()},onKeyUp:e=>{"ArrowDown"===e.key&&w(),"ArrowUp"===e.key&&O()},onChange:e=>{p||(null==h||h(parseFloat(e.target.value)),null==m||m(e))},stepper:f?o.createElement("div",{className:(0,l.q)("flex justify-center align-middle")},o.createElement("div",{tabIndex:-1,onClick:e=>e.preventDefault(),onMouseDown:e=>e.preventDefault(),onTouchStart:e=>{e.cancelable&&e.preventDefault()},onMouseUp:()=>{var e,t;p||(null===(e=v.current)||void 0===e||e.stepDown(),null===(t=v.current)||void 0===t||t.dispatchEvent(new Event("input",{bubbles:!0})))},className:(0,l.q)(!p&&d,u,"group py-[10px] px-2.5 border-l border-tremor-border dark:border-dark-tremor-border")},o.createElement(a,{"data-testid":"step-down",className:(y?"scale-95":"")+" h-4 w-4 duration-75 transition group-active:scale-95"})),o.createElement("div",{tabIndex:-1,onClick:e=>e.preventDefault(),onMouseDown:e=>e.preventDefault(),onTouchStart:e=>{e.cancelable&&e.preventDefault()},onMouseUp:()=>{var e,t;p||(null===(e=v.current)||void 0===e||e.stepUp(),null===(t=v.current)||void 0===t||t.dispatchEvent(new Event("input",{bubbles:!0})))},className:(0,l.q)(!p&&d,u,"group py-[10px] px-2.5 border-l border-tremor-border dark:border-dark-tremor-border")},o.createElement(i,{"data-testid":"step-up",className:(k?"scale-95":"")+" h-4 w-4 duration-75 transition group-active:scale-95"}))):null},g))});f.displayName="NumberInput"},54250:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(5853),o=n(2265),i=n(44140),a=n(34237),l=n(33044),s=n(58747),c=n(4537),u=n(97324),d=n(1153),f=n(96398);let p=(0,d.fn)("SearchSelect"),h=(0,d.fn)("SearchSelect"),m=o.forwardRef((e,t)=>{let{defaultValue:n,value:d,onValueChange:m,placeholder:g="Select...",disabled:v=!1,icon:y,enableClear:b=!0,children:x,className:w}=e,k=(0,r._T)(e,["defaultValue","value","onValueChange","placeholder","disabled","icon","enableClear","children","className"]),[S,E]=(0,o.useState)(""),[O,C]=(0,i.Z)(n,d),{reactElementChildren:j,valueToNameMapping:_}=(0,o.useMemo)(()=>{let e=o.Children.toArray(x).filter(o.isValidElement);return{reactElementChildren:e,valueToNameMapping:(0,f.sl)(e)}},[x]),P=(0,o.useMemo)(()=>(0,f.n0)(S,j),[S,j]);return o.createElement(a.h,Object.assign({as:"div",ref:t,defaultValue:O,value:O,onChange:e=>{null==m||m(e),C(e)},disabled:v,className:(0,u.q)("w-full min-w-[10rem] relative text-tremor-default",w)},k),e=>{let{value:t}=e;return o.createElement(o.Fragment,null,o.createElement(a.h.Button,{className:"w-full"},y&&o.createElement("span",{className:(0,u.q)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},o.createElement(y,{className:(0,u.q)(p("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement(a.h.Input,{className:(0,u.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 text-tremor-default pr-14 border py-2","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",y?"pl-10":"pl-3",v?"placeholder:text-tremor-content-subtle dark:placeholder:text-tremor-content-subtle":"placeholder:text-tremor-content dark:placeholder:text-tremor-content",(0,f.um)((0,f.Uh)(t),v)),placeholder:g,onChange:e=>E(e.target.value),displayValue:e=>{var t;return null!==(t=_.get(e))&&void 0!==t?t:""}}),o.createElement("div",{className:(0,u.q)("absolute inset-y-0 right-0 flex items-center pr-2.5")},o.createElement(s.Z,{className:(0,u.q)(p("arrowDownIcon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),b&&O?o.createElement("button",{type:"button",className:(0,u.q)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),C(""),E(""),null==m||m("")}},o.createElement(c.Z,{className:(0,u.q)(h("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,P.length>0&&o.createElement(l.u,{className:"absolute z-10 w-full",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},o.createElement(a.h.Options,{className:(0,u.q)("divide-y overflow-y-auto outline-none rounded-tremor-default text-tremor-default max-h-[228px] left-0 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},P)))})});m.displayName="SearchSelect"},70450:function(e,t,n){"use strict";n.d(t,{Z:function(){return c}});var r=n(5853),o=n(2265),i=n(97324),a=n(1153),l=n(34237);let s=(0,a.fn)("SearchSelectItem"),c=o.forwardRef((e,t)=>{let{value:n,icon:a,className:c,children:u}=e,d=(0,r._T)(e,["value","icon","className","children"]);return o.createElement(l.h.Option,Object.assign({className:(0,i.q)(s("root"),"flex justify-start items-center cursor-default text-tremor-default p-2.5","ui-active:bg-tremor-background-muted ui-active:text-tremor-content-strong ui-selected:text-tremor-content-strong ui-selected:bg-tremor-background-muted text-tremor-content-emphasis","dark:ui-active:bg-dark-tremor-background-muted dark:ui-active:text-dark-tremor-content-strong dark:ui-selected:text-dark-tremor-content-strong dark:ui-selected:bg-dark-tremor-background-muted dark:text-dark-tremor-content-emphasis",c),ref:t,key:n,value:n},d),a&&o.createElement(a,{className:(0,i.q)(s("icon"),"flex-none h-5 w-5 mr-3","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}),o.createElement("span",{className:"whitespace-nowrap truncate"},null!=u?u:n))});c.displayName="SearchSelectItem"},27281:function(e,t,n){"use strict";n.d(t,{Z:function(){return h}});var r=n(5853),o=n(2265),i=n(58747),a=n(4537),l=n(97324),s=n(1153),c=n(96398),u=n(9528),d=n(33044),f=n(44140);let p=(0,s.fn)("Select"),h=o.forwardRef((e,t)=>{let{defaultValue:n,value:s,onValueChange:h,placeholder:m="Select...",disabled:g=!1,icon:v,enableClear:y=!0,children:b,className:x}=e,w=(0,r._T)(e,["defaultValue","value","onValueChange","placeholder","disabled","icon","enableClear","children","className"]),[k,S]=(0,f.Z)(n,s),E=(0,o.useMemo)(()=>{let e=o.Children.toArray(b).filter(o.isValidElement);return(0,c.sl)(e)},[b]);return o.createElement(u.R,Object.assign({as:"div",ref:t,defaultValue:k,value:k,onChange:e=>{null==h||h(e),S(e)},disabled:g,className:(0,l.q)("w-full min-w-[10rem] relative text-tremor-default",x)},w),e=>{var t;let{value:n}=e;return o.createElement(o.Fragment,null,o.createElement(u.R.Button,{className:(0,l.q)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 border pr-8 py-2","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",v?"pl-10":"pl-3",(0,c.um)((0,c.Uh)(n),g))},v&&o.createElement("span",{className:(0,l.q)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},o.createElement(v,{className:(0,l.q)(p("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),o.createElement("span",{className:"w-[90%] block truncate"},n&&null!==(t=E.get(n))&&void 0!==t?t:m),o.createElement("span",{className:(0,l.q)("absolute inset-y-0 right-0 flex items-center mr-3")},o.createElement(i.Z,{className:(0,l.q)(p("arrowDownIcon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),y&&k?o.createElement("button",{type:"button",className:(0,l.q)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),S(""),null==h||h("")}},o.createElement(a.Z,{className:(0,l.q)(p("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,o.createElement(d.u,{className:"absolute z-10 w-full",enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},o.createElement(u.R.Options,{className:(0,l.q)("divide-y overflow-y-auto outline-none rounded-tremor-default max-h-[228px] left-0 border my-1","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},b)))})});h.displayName="Select"},57365:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(5853),o=n(2265),i=n(9528),a=n(97324);let l=(0,n(1153).fn)("SelectItem"),s=o.forwardRef((e,t)=>{let{value:n,icon:s,className:c,children:u}=e,d=(0,r._T)(e,["value","icon","className","children"]);return o.createElement(i.R.Option,Object.assign({className:(0,a.q)(l("root"),"flex justify-start items-center cursor-default text-tremor-default px-2.5 py-2.5","ui-active:bg-tremor-background-muted ui-active:text-tremor-content-strong ui-selected:text-tremor-content-strong ui-selected:bg-tremor-background-muted text-tremor-content-emphasis","dark:ui-active:bg-dark-tremor-background-muted dark:ui-active:text-dark-tremor-content-strong dark:ui-selected:text-dark-tremor-content-strong dark:ui-selected:bg-dark-tremor-background-muted dark:text-dark-tremor-content-emphasis",c),ref:t,key:n,value:n},d),s&&o.createElement(s,{className:(0,a.q)(l("icon"),"flex-none w-5 h-5 mr-1.5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}),o.createElement("span",{className:"whitespace-nowrap truncate"},null!=u?u:n))});s.displayName="SelectItem"},92858:function(e,t,n){"use strict";n.d(t,{Z:function(){return T}});var r=n(5853),o=n(2265),i=n(62963),a=n(90945),l=n(13323),s=n(17684),c=n(80004),u=n(93689),d=n(38198),f=n(47634),p=n(56314),h=n(27847),m=n(64518);let g=(0,o.createContext)(null),v=Object.assign((0,h.yV)(function(e,t){let n=(0,s.M)(),{id:r="headlessui-description-".concat(n),...i}=e,a=function e(){let t=(0,o.useContext)(g);if(null===t){let t=Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,e),t}return t}(),l=(0,u.T)(t);(0,m.e)(()=>a.register(r),[r,a.register]);let c={ref:l,...a.props,id:r};return(0,h.sY)({ourProps:c,theirProps:i,slot:a.slot||{},defaultTag:"p",name:a.name||"Description"})}),{});var y=n(37388);let b=(0,o.createContext)(null),x=Object.assign((0,h.yV)(function(e,t){let n=(0,s.M)(),{id:r="headlessui-label-".concat(n),passive:i=!1,...a}=e,l=function e(){let t=(0,o.useContext)(b);if(null===t){let t=Error("You used a