fix: recognize Conifer as a known provider endpoint (#6429)

* fix: recognize Conifer as a known provider endpoint

Recognize Conifer (api.conifer.build) in providers.js endpoint labels and map conifer.build to the openrouter curation sentinel in routes/model_routes.py so server-returned models are displayed as curated while preserving OpenAI wire compatibility.

Fixes #6205

* test(providers): remove trailing blank line

---------

Co-authored-by: Alexandre Teixeira <general@alexandreteixeira.dev>
This commit is contained in:
Prince
2026-11-08 02:27:35 +00:00
committed by GitHub
co-authored by Alexandre Teixeira
parent ae03bb8363
commit 37454f9d34
5 changed files with 34 additions and 0 deletions
+20
View File
@@ -232,6 +232,13 @@ class TestMatchProviderCurated:
def test_kimi_code_url(self):
assert _match_provider_curated("https://api.kimi.com/coding/v1", "openai") == "kimi-code"
def test_conifer_url(self):
assert _match_provider_curated("https://api.conifer.build/v1", "openai") == "openrouter"
assert _match_provider_curated("https://conifer.build/v1", "openai") == "openrouter"
def test_conifer_lookalike_url_not_matched(self):
assert _match_provider_curated("https://conifer.build.attacker.example/v1", "openai") == "openai"
def test_no_url_match_returns_provider(self):
assert _match_provider_curated("https://localhost:1234", "openai") == "openai"
@@ -339,6 +346,19 @@ class TestCurateModels:
assert curated == models
assert extra == []
def test_openrouter_sentinel_returns_all_as_curated(self):
models = ["model-a", "model-b", "any-custom-model"]
curated, extra = _curate_models(models, "openrouter")
assert curated == models
assert extra == []
def test_conifer_curate_models_via_match(self):
models = ["conifer-model-1", "conifer-model-2"]
curated_key = _match_provider_curated("https://api.conifer.build/v1", "openai")
curated, extra = _curate_models(models, curated_key)
assert curated == models
assert extra == []
def test_kimi_code_partitions(self):
models = ["kimi-for-coding", "other-model"]
curated, extra = _curate_models(models, "kimi-code")
+1
View File
@@ -45,6 +45,7 @@ class TestDetectProvider:
("https://api.openai.com/v1", "openai"),
("https://api.x.ai/v1", "openai"),
("https://api.deepseek.com", "openai"),
("https://api.conifer.build/v1", "openai"),
("https://generativelanguage.googleapis.com/v1beta/openai", "openai"),
# Ollama's OpenAI-compatible /v1 surface is generic, not native ollama.
("http://localhost:11434/v1", "openai"),
+11
View File
@@ -52,3 +52,14 @@ def _provider_label(url: str) -> str | None:
])
def test_provider_label_neutral_for_loopback(url, expected):
assert _provider_label(url) == expected
@pytest.mark.skipif(not _HAS_NODE, reason="node binary not on PATH")
@pytest.mark.parametrize("url,expected", [
("https://api.conifer.build/v1", "Conifer"),
("https://conifer.build/v1", "Conifer"),
("https://API.CONIFER.BUILD/v1", "Conifer"),
("https://conifer.build.attacker.example/v1", "conifer.build.attacker.example"),
])
def test_provider_label_conifer(url, expected):
assert _provider_label(url) == expected