diff --git a/src/row_bot/providers/catalog.py b/src/row_bot/providers/catalog.py index 10d269b7..7d3a4719 100644 --- a/src/row_bot/providers/catalog.py +++ b/src/row_bot/providers/catalog.py @@ -59,6 +59,15 @@ risk_label="third_party_router", icon="🌐", ), + "litellm": ProviderDefinition( + id="litellm", + display_name="LiteLLM", + auth_methods=(AuthMethod.API_KEY,), + default_transport=TransportMode.OPENAI_CHAT, + base_url="http://localhost:4000/v1", + risk_label="third_party_router", + icon="🔀", + ), "opencode_zen": ProviderDefinition( id="opencode_zen", display_name="OpenCode Zen", diff --git a/src/row_bot/providers/runtime.py b/src/row_bot/providers/runtime.py index cc9676bd..5d1b1f72 100644 --- a/src/row_bot/providers/runtime.py +++ b/src/row_bot/providers/runtime.py @@ -19,6 +19,7 @@ def list_configured_provider_ids() -> list[str]: "openai", "ollama_cloud", "openrouter", + "litellm", "opencode_zen", "opencode_go", "atlascloud", diff --git a/tests/test_litellm_provider.py b/tests/test_litellm_provider.py new file mode 100644 index 00000000..6faa6132 --- /dev/null +++ b/tests/test_litellm_provider.py @@ -0,0 +1,22 @@ +import unittest + +from row_bot.providers.catalog import PROVIDER_DEFINITIONS, get_provider_definition +from row_bot.providers.models import AuthMethod, TransportMode + + +class TestLiteLLMProvider(unittest.TestCase): + def test_provider_registered(self): + self.assertIn("litellm", PROVIDER_DEFINITIONS) + + def test_provider_definition(self): + defn = get_provider_definition("litellm") + self.assertIsNotNone(defn) + self.assertEqual(defn.id, "litellm") + self.assertEqual(defn.display_name, "LiteLLM") + self.assertEqual(defn.default_transport, TransportMode.OPENAI_CHAT) + self.assertEqual(defn.base_url, "http://localhost:4000/v1") + self.assertIn(AuthMethod.API_KEY, defn.auth_methods) + + def test_provider_uses_openai_compatible_transport(self): + defn = get_provider_definition("litellm") + self.assertEqual(defn.default_transport, TransportMode.OPENAI_CHAT)