From 576b2d56e6b01aec1dfe98bfb3048b8dd3cc967b Mon Sep 17 00:00:00 2001 From: amdmsz <69088549+amdmsz@users.noreply.github.com> Date: Sun, 12 Jul 2026 17:19:26 +0800 Subject: [PATCH 1/5] Register byesu in openai_like providers.json --- litellm/llms/openai_like/providers.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/litellm/llms/openai_like/providers.json b/litellm/llms/openai_like/providers.json index 164100d4194..ebc54c9a4ad 100644 --- a/litellm/llms/openai_like/providers.json +++ b/litellm/llms/openai_like/providers.json @@ -58,6 +58,16 @@ "max_completion_tokens": "max_tokens" } }, + "byesu": { + "base_url": "https://byesu.com/v1", + "api_key_env": "BYESU_API_KEY", + "api_base_env": "BYESU_API_BASE", + "base_class": "openai_gpt", + "param_mappings": { + "max_completion_tokens": "max_tokens" + }, + "supported_endpoints": ["/v1/chat/completions", "/v1/responses"] + }, "chutes": { "base_url": "https://llm.chutes.ai/v1/", "api_key_env": "CHUTES_API_KEY", From d55f447b0d6fe2fb1924b02fe579c744c2ba5ccd Mon Sep 17 00:00:00 2001 From: amdmsz <69088549+amdmsz@users.noreply.github.com> Date: Sun, 12 Jul 2026 17:19:30 +0800 Subject: [PATCH 2/5] Add byesu to openai_compatible_providers --- litellm/constants.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/constants.py b/litellm/constants.py index 715d57e594d..3c8d9f47c8d 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -759,6 +759,7 @@ openai_compatible_providers: List = [ "nano-gpt", # Nano-GPT - JSON-configured provider "poe", # Poe - JSON-configured provider "chutes", # Chutes - JSON-configured provider + "byesu", # Byesu - JSON-configured provider "parasail", # Parasail - JSON-configured provider "libertai", # LibertAI - JSON-configured provider "featherless_ai", From 54ffa786f18a6d094c553d36ae4dff18fc82e342 Mon Sep 17 00:00:00 2001 From: amdmsz <69088549+amdmsz@users.noreply.github.com> Date: Sun, 12 Jul 2026 17:19:35 +0800 Subject: [PATCH 3/5] Add BYESU to LlmProviders enum --- litellm/types/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/litellm/types/utils.py b/litellm/types/utils.py index e33e2335525..22b48899835 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -3392,6 +3392,7 @@ class LlmProviders(str, Enum): NANOGPT = "nano-gpt" POE = "poe" CHUTES = "chutes" + BYESU = "byesu" NEOSANTARA = "neosantara" PARASAIL = "parasail" XIAOMI_MIMO = "xiaomi_mimo" From 9518ccbc787785efa4b577e8a1571fb8cf172dec Mon Sep 17 00:00:00 2001 From: amdmsz <69088549+amdmsz@users.noreply.github.com> Date: Sun, 12 Jul 2026 17:19:42 +0800 Subject: [PATCH 4/5] Add byesu provider tests --- .../llms/openai_like/test_byesu_provider.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 tests/test_litellm/llms/openai_like/test_byesu_provider.py diff --git a/tests/test_litellm/llms/openai_like/test_byesu_provider.py b/tests/test_litellm/llms/openai_like/test_byesu_provider.py new file mode 100644 index 00000000000..3c75e8f9d1f --- /dev/null +++ b/tests/test_litellm/llms/openai_like/test_byesu_provider.py @@ -0,0 +1,97 @@ +""" +Tests for the `byesu` JSON-configured OpenAI-compatible provider. + +byesu is registered purely via litellm/llms/openai_like/providers.json, so these +tests exercise the JSON registry, provider routing, and the dynamically generated +config class. No network calls are made. +""" + +import os +import sys + +try: + import pytest # noqa: F401 +except ImportError: + pytest = None # allow standalone execution + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../.."))) + +import litellm # noqa: E402 +from litellm import get_llm_provider # noqa: E402 + + +class TestByesuProvider: + def test_byesu_loaded_from_json(self): + """byesu is discovered by the JSON provider registry.""" + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + assert JSONProviderRegistry.exists("byesu") + + cfg = JSONProviderRegistry.get("byesu") + assert cfg is not None + assert cfg.base_url == "https://byesu.com/v1" + assert cfg.api_key_env == "BYESU_API_KEY" + assert cfg.api_base_env == "BYESU_API_BASE" + + def test_byesu_in_openai_compatible_providers(self): + """byesu is registered as an OpenAI-compatible provider.""" + from litellm.constants import openai_compatible_providers + + assert "byesu" in openai_compatible_providers + + def test_byesu_get_llm_provider_routing(self): + """`byesu/` resolves to custom_llm_provider == 'byesu'.""" + model, custom_llm_provider, _, _ = get_llm_provider(model="byesu/gpt-4o-mini") + assert custom_llm_provider == "byesu" + assert model == "gpt-4o-mini" + + def test_byesu_api_base_and_key_resolution(self): + """The dynamic config resolves the byesu base URL and honors overrides.""" + from litellm.llms.openai_like.dynamic_config import create_config_class + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + config_class = create_config_class(JSONProviderRegistry.get("byesu")) + config = config_class() + + # Defaults to the byesu base URL + api_base, _ = config._get_openai_compatible_provider_info(None, "test-key") + assert api_base == "https://byesu.com/v1" + + # Explicit overrides win + api_base, api_key = config._get_openai_compatible_provider_info( + "https://custom.example.com/v1", "override-key" + ) + assert api_base == "https://custom.example.com/v1" + assert api_key == "override-key" + + def test_byesu_param_mapping(self): + """max_completion_tokens is mapped to max_tokens per providers.json.""" + from litellm.llms.openai_like.dynamic_config import create_config_class + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + config_class = create_config_class(JSONProviderRegistry.get("byesu")) + config = config_class() + + result = config.map_openai_params( + {"max_completion_tokens": 128}, + {}, + "gpt-4o-mini", + False, + ) + assert result.get("max_tokens") == 128 + assert "max_completion_tokens" not in result + + def test_byesu_declares_responses_api(self): + """byesu declares /v1/responses support.""" + from litellm.llms.openai_like.json_loader import JSONProviderRegistry + + assert JSONProviderRegistry.supports_responses_api("byesu") + + +if __name__ == "__main__": + t = TestByesuProvider() + for name in dir(t): + if name.startswith("test_"): + getattr(t, name)() + print(f"PASS {name}") + print("All byesu provider tests passed.") From 6facd4e2298e5b88dfc759677d55981e4f256a40 Mon Sep 17 00:00:00 2001 From: amdmsz <69088549+amdmsz@users.noreply.github.com> Date: Tue, 14 Jul 2026 15:19:48 +0800 Subject: [PATCH 5/5] docs: document byesu provider in provider_endpoints_support.json Fixes the check_provider_folders_documented code-quality check which requires every provider in openai_like/providers.json to be documented here. Byesu supports /chat/completions and /responses. --- provider_endpoints_support.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index 65db63dc045..36f9cbfcdfa 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -2941,6 +2941,22 @@ "rerank": false, "a2a": false } + }, + "byesu": { + "display_name": "Byesu (`byesu`)", + "endpoints": { + "chat_completions": true, + "messages": false, + "responses": true, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false + } } }, "endpoints": {