mirror of
https://github.com/BerriAI/litellm.git
synced 2026-11-14 09:03:16 +00:00
Merge de817fb1c5 into e9b1c11098
This commit is contained in:
commit
673f32191d
7 changed files with 141 additions and 0 deletions
|
|
@ -1073,6 +1073,7 @@ openai_compatible_endpoints: Final[list[str]] = [
|
|||
"https://api.stima.tech/v1",
|
||||
"https://nano-gpt.com/api/v1",
|
||||
"https://api.poe.com/v1",
|
||||
"https://api.llm-broker.net/api/v1",
|
||||
"https://llm.chutes.ai/v1/",
|
||||
"https://api.v0.dev/v1",
|
||||
"https://api.morphllm.com/v1",
|
||||
|
|
@ -1143,6 +1144,7 @@ openai_compatible_providers: Final[list[str]] = [
|
|||
"apertis", # Apertis - JSON-configured provider
|
||||
"nano-gpt", # Nano-GPT - JSON-configured provider
|
||||
"poe", # Poe - JSON-configured provider
|
||||
"llm_broker",
|
||||
"chutes", # Chutes - JSON-configured provider
|
||||
"parasail", # Parasail - JSON-configured provider
|
||||
"libertai", # LibertAI - JSON-configured provider
|
||||
|
|
@ -1206,6 +1208,7 @@ openai_text_completion_compatible_providers: Final[list] = [ # providers that s
|
|||
"apertis",
|
||||
"nano-gpt",
|
||||
"poe",
|
||||
"llm_broker",
|
||||
"chutes",
|
||||
"v0",
|
||||
"lambda_ai",
|
||||
|
|
|
|||
|
|
@ -51,6 +51,11 @@
|
|||
"max_completion_tokens": "max_tokens"
|
||||
}
|
||||
},
|
||||
"llm_broker": {
|
||||
"base_url": "https://api.llm-broker.net/api/v1",
|
||||
"api_key_env": "LLM_BROKER_API_KEY",
|
||||
"api_base_env": "LLM_BROKER_API_BASE"
|
||||
},
|
||||
"poe": {
|
||||
"base_url": "https://api.poe.com/v1",
|
||||
"api_key_env": "POE_API_KEY",
|
||||
|
|
|
|||
|
|
@ -3344,6 +3344,23 @@
|
|||
"generateContent": false
|
||||
}
|
||||
},
|
||||
"llm_broker": {
|
||||
"display_name": "LLM Broker (`llm_broker`)",
|
||||
"url": "https://llm-broker.net/quickstart",
|
||||
"endpoints": {
|
||||
"chat_completions": true,
|
||||
"messages": false,
|
||||
"responses": false,
|
||||
"embeddings": false,
|
||||
"image_generations": false,
|
||||
"audio_transcriptions": false,
|
||||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false,
|
||||
"a2a": false
|
||||
}
|
||||
},
|
||||
"publicai": {
|
||||
"display_name": "PublicAI (`publicai`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/publicai",
|
||||
|
|
|
|||
|
|
@ -2321,6 +2321,24 @@
|
|||
],
|
||||
"default_model_placeholder": "gpt-3.5-turbo"
|
||||
},
|
||||
{
|
||||
"provider": "LLM_BROKER",
|
||||
"provider_display_name": "LLM Broker",
|
||||
"litellm_provider": "llm_broker",
|
||||
"credential_fields": [
|
||||
{
|
||||
"key": "api_key",
|
||||
"label": "API Key",
|
||||
"placeholder": null,
|
||||
"tooltip": null,
|
||||
"required": true,
|
||||
"field_type": "password",
|
||||
"options": null,
|
||||
"default_value": null
|
||||
}
|
||||
],
|
||||
"default_model_placeholder": "llm_broker/taylor"
|
||||
},
|
||||
{
|
||||
"provider": "LM_STUDIO",
|
||||
"provider_display_name": "Lm Studio",
|
||||
|
|
|
|||
|
|
@ -4777,6 +4777,7 @@ class LlmProviders(str, Enum):
|
|||
APERTIS = "apertis"
|
||||
NANOGPT = "nano-gpt"
|
||||
POE = "poe"
|
||||
LLM_BROKER = "llm_broker"
|
||||
CHUTES = "chutes"
|
||||
NEOSANTARA = "neosantara"
|
||||
AIAND = "aiand"
|
||||
|
|
|
|||
|
|
@ -3344,6 +3344,23 @@
|
|||
"generateContent": false
|
||||
}
|
||||
},
|
||||
"llm_broker": {
|
||||
"display_name": "LLM Broker (`llm_broker`)",
|
||||
"url": "https://llm-broker.net/quickstart",
|
||||
"endpoints": {
|
||||
"chat_completions": true,
|
||||
"messages": false,
|
||||
"responses": false,
|
||||
"embeddings": false,
|
||||
"image_generations": false,
|
||||
"audio_transcriptions": false,
|
||||
"audio_speech": false,
|
||||
"moderations": false,
|
||||
"batches": false,
|
||||
"rerank": false,
|
||||
"a2a": false
|
||||
}
|
||||
},
|
||||
"publicai": {
|
||||
"display_name": "PublicAI (`publicai`)",
|
||||
"url": "https://docs.litellm.ai/docs/providers/publicai",
|
||||
|
|
|
|||
80
tests/unit/llms/openai_like/test_llm_broker_provider.py
Normal file
80
tests/unit/llms/openai_like/test_llm_broker_provider.py
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
"""
|
||||
Tests for the LLM Broker provider configuration.
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
|
||||
import litellm
|
||||
|
||||
|
||||
class TestLLMBrokerProviderConfig:
|
||||
def test_in_provider_list(self):
|
||||
from litellm import LlmProviders
|
||||
|
||||
assert LlmProviders.LLM_BROKER.value == "llm_broker"
|
||||
assert "llm_broker" in litellm.provider_list
|
||||
|
||||
def test_json_config(self):
|
||||
from litellm.llms.openai_like.json_loader import JSONProviderRegistry
|
||||
|
||||
cfg = JSONProviderRegistry.get("llm_broker")
|
||||
assert cfg is not None
|
||||
assert cfg.base_url == "https://api.llm-broker.net/api/v1"
|
||||
assert cfg.api_key_env == "LLM_BROKER_API_KEY"
|
||||
assert cfg.api_base_env == "LLM_BROKER_API_BASE"
|
||||
|
||||
def test_prefix_resolution(self, monkeypatch):
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
monkeypatch.setenv("LLM_BROKER_API_KEY", "env-key")
|
||||
monkeypatch.delenv("LLM_BROKER_API_BASE", raising=False)
|
||||
model, provider, api_key, api_base = get_llm_provider(model="llm_broker/taylor")
|
||||
|
||||
assert (model, provider) == ("taylor", "llm_broker")
|
||||
assert api_base == "https://api.llm-broker.net/api/v1"
|
||||
assert api_key == "env-key"
|
||||
|
||||
def test_explicit_key_and_base_win_over_env(self, monkeypatch):
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
monkeypatch.setenv("LLM_BROKER_API_KEY", "env-key")
|
||||
_, provider, api_key, api_base = get_llm_provider(
|
||||
model="llm_broker/taylor",
|
||||
api_base="https://custom.example.com/v1",
|
||||
api_key="caller-key",
|
||||
)
|
||||
|
||||
assert provider == "llm_broker"
|
||||
assert api_key == "caller-key"
|
||||
assert api_base == "https://custom.example.com/v1"
|
||||
|
||||
def test_api_base_env_override(self, monkeypatch):
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
monkeypatch.setenv("LLM_BROKER_API_BASE", "https://eu.example.com/v1")
|
||||
_, _, _, api_base = get_llm_provider(model="llm_broker/taylor")
|
||||
|
||||
assert api_base == "https://eu.example.com/v1"
|
||||
|
||||
def test_api_base_autodetection_keeps_caller_key(self, monkeypatch):
|
||||
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
|
||||
|
||||
monkeypatch.setenv("LLM_BROKER_API_KEY", "env-key")
|
||||
_, provider, api_key, _ = get_llm_provider(
|
||||
model="taylor",
|
||||
api_base="https://api.llm-broker.net/api/v1",
|
||||
api_key="caller-key",
|
||||
)
|
||||
|
||||
assert provider == "llm_broker"
|
||||
assert api_key == "caller-key"
|
||||
|
||||
def test_support_matrix_lists_chat_only(self):
|
||||
root = os.path.dirname(os.path.dirname(litellm.__file__))
|
||||
with open(os.path.join(root, "provider_endpoints_support.json")) as f:
|
||||
providers = json.load(f)["providers"]
|
||||
|
||||
endpoints = providers["llm_broker"]["endpoints"]
|
||||
assert endpoints["chat_completions"] is True
|
||||
assert not any(v for k, v in endpoints.items() if k != "chat_completions")
|
||||
Loading…
Add table
Reference in a new issue