From 34d94ff49d1f5893d5c9c5322374feeb9bf99237 Mon Sep 17 00:00:00 2001 From: Hidoikoto Date: Mon, 7 Sep 2026 18:58:53 +0800 Subject: [PATCH 1/2] feat: add Jalapeno Cloud as an OpenAI-compatible provider Register jalapeno with chat/completions, responses, and messages support, including model pricing from the public marketplace catalog. Co-authored-by: Cursor --- litellm/constants.py | 2 + litellm/llms/openai_like/providers.json | 13 + ...odel_prices_and_context_window_backup.json | 385 ++++++++++++++++++ .../provider_endpoints_support_backup.json | 17 + litellm/types/utils.py | 1 + model_prices_and_context_window.json | 385 ++++++++++++++++++ provider_endpoints_support.json | 17 + .../openai_like/test_jalapeno_provider.py | 183 +++++++++ 8 files changed, 1003 insertions(+) create mode 100644 tests/test_litellm/llms/openai_like/test_jalapeno_provider.py diff --git a/litellm/constants.py b/litellm/constants.py index ce744e9c58a..208112e76bb 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -874,6 +874,7 @@ openai_compatible_endpoints: Final[list] = [ "https://api.meta.ai/v1", "https://api.cognition.ai/v1", "https://api.scx.ai/v1", + "https://api.jalapeno-cloud.ai/v1", "https://gigachat.devices.sberbank.ru/api/v1", ] @@ -946,6 +947,7 @@ openai_compatible_providers: Final[list] = [ "meta", # Meta Model API (Muse Spark) - JSON-configured provider "cognition", "scx-ai", + "jalapeno", # Jalapeno Cloud - JSON-configured provider ] openai_text_completion_compatible_providers: Final[list] = [ # providers that support `/v1/completions` "together_ai", diff --git a/litellm/llms/openai_like/providers.json b/litellm/llms/openai_like/providers.json index a458a209ea9..4c635428fcb 100644 --- a/litellm/llms/openai_like/providers.json +++ b/litellm/llms/openai_like/providers.json @@ -200,5 +200,18 @@ "temperature_max": 1.99 }, "supported_endpoints": ["/v1/chat/completions"] + }, + "jalapeno": { + "base_url": "https://api.jalapeno-cloud.ai/v1", + "api_key_env": "JALAPENO_API_KEY", + "api_base_env": "JALAPENO_API_BASE", + "param_mappings": { + "max_completion_tokens": "max_tokens" + }, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ] } } diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 6c6e65927f9..6df09f985d8 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -63784,5 +63784,390 @@ "supports_tool_choice": false, "supports_response_schema": true, "supports_vision": false + }, + "jalapeno/DeepSeek-V4-Flash": { + "input_cost_per_token": 1.4e-07, + "output_cost_per_token": 2.8e-07, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "max_tokens": 393216, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/DeepSeek-V4-Flash-0731": { + "input_cost_per_token": 4.4e-07, + "output_cost_per_token": 1.32e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "max_tokens": 393216, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_vision": true + }, + "jalapeno/DeepSeek-V4-Pro": { + "input_cost_per_token": 1.6e-06, + "output_cost_per_token": 3.38e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "max_tokens": 393216, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.1": { + "input_cost_per_token": 1.38e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 202752, + "max_output_tokens": 202752, + "max_tokens": 202752, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.2": { + "input_cost_per_token": 1.4e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.3": { + "input_cost_per_token": 1.4e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.3-Flash": { + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 5e-07, + "litellm_provider": "jalapeno", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Hy4": { + "input_cost_per_token": 8.34e-07, + "output_cost_per_token": 2.501e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 202752, + "max_output_tokens": 202752, + "max_tokens": 202752, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Kimi-K2.5": { + "input_cost_per_token": 6e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 180224, + "max_tokens": 180224, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_vision": true + }, + "jalapeno/Kimi-K2.7-Code": { + "input_cost_per_token": 9.5e-07, + "output_cost_per_token": 4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 271360, + "max_output_tokens": 271360, + "max_tokens": 271360, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Kimi-K3": { + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "max_tokens": 1048576, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/MiniMax-M3": { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 524288, + "max_output_tokens": 524288, + "max_tokens": 524288, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_response_schema": true + }, + "jalapeno/Qwen3.5-27B": { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3.5-35B-A3B": { + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 2e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3.5-122B-A10B": { + "input_cost_per_token": 4e-07, + "output_cost_per_token": 3.2e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3.5-397B-A17B": { + "input_cost_per_token": 6e-07, + "output_cost_per_token": 3.6e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3-Next-80B-A3B-Instruct": { + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 129024, + "max_output_tokens": 129024, + "max_tokens": 129024, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_response_schema": true + }, + "jalapeno/Qwen3-Next-80B-A3B-Thinking": { + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_response_schema": true + }, + "jalapeno/Qwen3-VL-235B-A22B-Instruct": { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 129024, + "max_output_tokens": 129024, + "max_tokens": 129024, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "jalapeno/Qwen3-VL-235B-A22B-Thinking": { + "input_cost_per_token": 9.8e-07, + "output_cost_per_token": 3.95e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_vision": true } } diff --git a/litellm/provider_endpoints_support_backup.json b/litellm/provider_endpoints_support_backup.json index dbeaccdda2d..4d91cea4fb5 100644 --- a/litellm/provider_endpoints_support_backup.json +++ b/litellm/provider_endpoints_support_backup.json @@ -1291,6 +1291,23 @@ "rerank": false } }, + "jalapeno": { + "display_name": "Jalapeno Cloud (`jalapeno`)", + "url": "https://docs.litellm.ai/docs/providers/jalapeno", + "endpoints": { + "chat_completions": true, + "messages": true, + "responses": true, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false + } + }, "jina_ai": { "display_name": "Jina AI (`jina_ai`)", "url": "https://docs.litellm.ai/docs/providers/jina_ai", diff --git a/litellm/types/utils.py b/litellm/types/utils.py index 78ef6edfb19..eea6c757c2d 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -3979,6 +3979,7 @@ class LlmProviders(str, Enum): SCX_AI = "scx-ai" DARKBLOOM = "darkbloom" META = "meta" + JALAPENO = "jalapeno" LITELLM_AGENT = "litellm_agent" CURSOR = "cursor" BEDROCK_MANTLE = "bedrock_mantle" diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 6c6e65927f9..6df09f985d8 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -63784,5 +63784,390 @@ "supports_tool_choice": false, "supports_response_schema": true, "supports_vision": false + }, + "jalapeno/DeepSeek-V4-Flash": { + "input_cost_per_token": 1.4e-07, + "output_cost_per_token": 2.8e-07, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "max_tokens": 393216, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/DeepSeek-V4-Flash-0731": { + "input_cost_per_token": 4.4e-07, + "output_cost_per_token": 1.32e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "max_tokens": 393216, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_vision": true + }, + "jalapeno/DeepSeek-V4-Pro": { + "input_cost_per_token": 1.6e-06, + "output_cost_per_token": 3.38e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "max_tokens": 393216, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.1": { + "input_cost_per_token": 1.38e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 202752, + "max_output_tokens": 202752, + "max_tokens": 202752, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.2": { + "input_cost_per_token": 1.4e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.3": { + "input_cost_per_token": 1.4e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/GLM-5.3-Flash": { + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 5e-07, + "litellm_provider": "jalapeno", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Hy4": { + "input_cost_per_token": 8.34e-07, + "output_cost_per_token": 2.501e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 202752, + "max_output_tokens": 202752, + "max_tokens": 202752, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Kimi-K2.5": { + "input_cost_per_token": 6e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 180224, + "max_tokens": 180224, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_vision": true + }, + "jalapeno/Kimi-K2.7-Code": { + "input_cost_per_token": 9.5e-07, + "output_cost_per_token": 4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 271360, + "max_output_tokens": 271360, + "max_tokens": 271360, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Kimi-K3": { + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "jalapeno", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "max_tokens": 1048576, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/MiniMax-M3": { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 524288, + "max_output_tokens": 524288, + "max_tokens": 524288, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_response_schema": true + }, + "jalapeno/Qwen3.5-27B": { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3.5-35B-A3B": { + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 2e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3.5-122B-A10B": { + "input_cost_per_token": 4e-07, + "output_cost_per_token": 3.2e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3.5-397B-A17B": { + "input_cost_per_token": 6e-07, + "output_cost_per_token": 3.6e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true + }, + "jalapeno/Qwen3-Next-80B-A3B-Instruct": { + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 129024, + "max_output_tokens": 129024, + "max_tokens": 129024, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_response_schema": true + }, + "jalapeno/Qwen3-Next-80B-A3B-Thinking": { + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_response_schema": true + }, + "jalapeno/Qwen3-VL-235B-A22B-Instruct": { + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 129024, + "max_output_tokens": 129024, + "max_tokens": 129024, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": true + }, + "jalapeno/Qwen3-VL-235B-A22B-Thinking": { + "input_cost_per_token": 9.8e-07, + "output_cost_per_token": 3.95e-06, + "litellm_provider": "jalapeno", + "max_input_tokens": 131072, + "max_output_tokens": 131072, + "max_tokens": 131072, + "mode": "chat", + "source": "https://www.jalapeno-cloud.ai/models", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages" + ], + "supports_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_reasoning": true, + "supports_vision": true } } diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index c71f4a82a4a..157415024e3 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -3034,6 +3034,23 @@ "rerank": false, "a2a": false } + }, + "jalapeno": { + "display_name": "Jalapeno Cloud (`jalapeno`)", + "url": "https://docs.litellm.ai/docs/providers/jalapeno", + "endpoints": { + "chat_completions": true, + "messages": true, + "responses": true, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false + } } }, "endpoints": { diff --git a/tests/test_litellm/llms/openai_like/test_jalapeno_provider.py b/tests/test_litellm/llms/openai_like/test_jalapeno_provider.py new file mode 100644 index 00000000000..d8f80fd2c8a --- /dev/null +++ b/tests/test_litellm/llms/openai_like/test_jalapeno_provider.py @@ -0,0 +1,183 @@ +import litellm + + +JALAPENO_BASE_URL = "https://api.jalapeno-cloud.ai/v1" + + +class TestJalapenoProviderConfig: + def test_jalapeno_in_provider_list(self): + from litellm import LlmProviders + + assert hasattr(LlmProviders, "JALAPENO") + assert LlmProviders.JALAPENO.value == "jalapeno" + assert "jalapeno" in litellm.provider_list + + def test_jalapeno_json_config_exists(self): + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + assert JSONProviderRegistry.exists("jalapeno") + provider = JSONProviderRegistry.get("jalapeno") + assert provider is not None + assert provider.base_url == JALAPENO_BASE_URL + assert provider.api_key_env == "JALAPENO_API_KEY" + assert provider.api_base_env == "JALAPENO_API_BASE" + assert provider.param_mappings.get("max_completion_tokens") == "max_tokens" + assert provider.supported_endpoints == [ + "/v1/chat/completions", + "/v1/responses", + "/v1/messages", + ] + + def test_jalapeno_in_openai_compatible_lists(self): + from litellm.constants import ( + openai_compatible_endpoints, + openai_compatible_providers, + ) + + assert "jalapeno" in openai_compatible_providers + assert JALAPENO_BASE_URL in openai_compatible_endpoints + + def test_jalapeno_provider_resolution(self): + from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider + + model, provider, api_key, api_base = get_llm_provider( + model="jalapeno/DeepSeek-V4-Flash", + custom_llm_provider=None, + api_base=None, + api_key=None, + ) + assert model == "DeepSeek-V4-Flash" + assert provider == "jalapeno" + assert api_base == JALAPENO_BASE_URL + + def test_jalapeno_api_base_inference(self): + from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider + + model, provider, api_key, api_base = get_llm_provider( + model="DeepSeek-V4-Flash", + custom_llm_provider=None, + api_base=JALAPENO_BASE_URL, + api_key="sk-test", + ) + assert model == "DeepSeek-V4-Flash" + assert provider == "jalapeno" + assert api_base == JALAPENO_BASE_URL + assert api_key == "sk-test" + + def test_jalapeno_maps_max_completion_tokens(self): + from litellm.llms.openai_like.dynamic_config import create_config_class + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + provider = JSONProviderRegistry.get("jalapeno") + assert provider is not None + config = create_config_class(provider)() + params = config.map_openai_params( + non_default_params={"max_completion_tokens": 256}, + optional_params={}, + model="jalapeno/DeepSeek-V4-Flash", + drop_params=False, + ) + assert params.get("max_tokens") == 256 + assert "max_completion_tokens" not in params + + def test_jalapeno_chat_complete_url(self): + from litellm.llms.openai_like.dynamic_config import create_config_class + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + provider = JSONProviderRegistry.get("jalapeno") + assert provider is not None + config = create_config_class(provider)() + url = config.get_complete_url( + api_base=JALAPENO_BASE_URL, + api_key="sk-test", + model="jalapeno/DeepSeek-V4-Flash", + optional_params={}, + litellm_params={}, + stream=False, + ) + assert url == f"{JALAPENO_BASE_URL}/chat/completions" + + def test_jalapeno_model_cost_map(self): + info = litellm.model_cost["jalapeno/DeepSeek-V4-Flash"] + assert info["litellm_provider"] == "jalapeno" + assert info["mode"] == "chat" + assert info["input_cost_per_token"] == 1.4e-07 + assert info["output_cost_per_token"] == 2.8e-07 + assert info["max_input_tokens"] == 1048576 + assert info["supports_function_calling"] is True + assert info["supports_reasoning"] is True + assert "/v1/chat/completions" in info["supported_endpoints"] + assert "/v1/responses" in info["supported_endpoints"] + assert "/v1/messages" in info["supported_endpoints"] + + def test_jalapeno_supported_endpoints_matrix(self): + import json + from pathlib import Path + + backup_path = ( + Path(litellm.__file__).parent / "provider_endpoints_support_backup.json" + ) + matrix = json.loads(backup_path.read_text()) + assert "jalapeno" in matrix["providers"] + endpoints = matrix["providers"]["jalapeno"]["endpoints"] + assert endpoints["chat_completions"] is True + assert endpoints["messages"] is True + assert endpoints["responses"] is True + + +class TestJalapenoResponsesAndMessages: + def test_jalapeno_responses_config_url_and_auth(self, monkeypatch): + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + from litellm.utils import ProviderConfigManager + + assert JSONProviderRegistry.supports_responses_api("jalapeno") is True + config = ProviderConfigManager.get_provider_responses_api_config( + provider="jalapeno", + model="jalapeno/DeepSeek-V4-Flash", + ) + assert config is not None + assert config.custom_llm_provider == "jalapeno" + assert ( + config.get_complete_url(api_base=None, litellm_params={}) + == f"{JALAPENO_BASE_URL}/responses" + ) + + monkeypatch.setenv("JALAPENO_API_KEY", "sk-env-key") + headers = config.validate_environment( + headers={}, model="DeepSeek-V4-Flash", litellm_params=None + ) + assert headers["Authorization"] == "Bearer sk-env-key" + + def test_jalapeno_messages_config_url_and_auth(self, monkeypatch): + from litellm.llms.openai_like.messages.transformation import ( + JSONProviderAnthropicMessagesConfig, + ) + + cfg = litellm.ProviderConfigManager.get_provider_anthropic_messages_config( + model="DeepSeek-V4-Flash", + provider=litellm.LlmProviders.JALAPENO, + ) + assert isinstance(cfg, JSONProviderAnthropicMessagesConfig) + assert ( + cfg.get_complete_url( + api_base=None, + api_key="sk-test", + model="DeepSeek-V4-Flash", + optional_params={}, + litellm_params={}, + ) + == f"{JALAPENO_BASE_URL}/messages" + ) + + monkeypatch.setenv("JALAPENO_API_KEY", "sk-env-key") + headers, _ = cfg.validate_anthropic_messages_environment( + headers={}, + model="DeepSeek-V4-Flash", + messages=[{"role": "user", "content": "hi"}], + optional_params={}, + litellm_params={}, + api_key=None, + api_base=None, + ) + assert headers["authorization"] == "Bearer sk-env-key" + assert headers["anthropic-version"] == "2023-06-01" From 053c87508bb5775924e55a065d5d6714e4a6d6a8 Mon Sep 17 00:00:00 2001 From: Jianyu Chen <68607830+Hidoikoto@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:32:43 +0800 Subject: [PATCH 2/2] Update litellm/constants.py Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- litellm/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litellm/constants.py b/litellm/constants.py index 208112e76bb..b28d0bf6b07 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -947,7 +947,7 @@ openai_compatible_providers: Final[list] = [ "meta", # Meta Model API (Muse Spark) - JSON-configured provider "cognition", "scx-ai", - "jalapeno", # Jalapeno Cloud - JSON-configured provider + "jalapeno", ] openai_text_completion_compatible_providers: Final[list] = [ # providers that support `/v1/completions` "together_ai",