mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-11-08 14:12:22 +01:00
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:
co-authored by
Alexandre Teixeira
parent
ae03bb8363
commit
37454f9d34
@@ -418,6 +418,7 @@ _HOST_TO_CURATED = (
|
|||||||
("nvidia.com", "nvidia"),
|
("nvidia.com", "nvidia"),
|
||||||
("openrouter.ai", "openrouter"),
|
("openrouter.ai", "openrouter"),
|
||||||
("ollama.com", "ollama"),
|
("ollama.com", "ollama"),
|
||||||
|
("conifer.build", "openrouter"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ const _ENDPOINT_LABELS = [
|
|||||||
[/(^|\.)perplexity\.ai$/i, "Perplexity"],
|
[/(^|\.)perplexity\.ai$/i, "Perplexity"],
|
||||||
[/(^|\.)nvidia\.com$/i, "NVIDIA"],
|
[/(^|\.)nvidia\.com$/i, "NVIDIA"],
|
||||||
[/(^|\.)x\.ai$/i, "xAI"],
|
[/(^|\.)x\.ai$/i, "xAI"],
|
||||||
|
[/(^|\.)conifer\.build$/i, "Conifer"],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -232,6 +232,13 @@ class TestMatchProviderCurated:
|
|||||||
def test_kimi_code_url(self):
|
def test_kimi_code_url(self):
|
||||||
assert _match_provider_curated("https://api.kimi.com/coding/v1", "openai") == "kimi-code"
|
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):
|
def test_no_url_match_returns_provider(self):
|
||||||
assert _match_provider_curated("https://localhost:1234", "openai") == "openai"
|
assert _match_provider_curated("https://localhost:1234", "openai") == "openai"
|
||||||
|
|
||||||
@@ -339,6 +346,19 @@ class TestCurateModels:
|
|||||||
assert curated == models
|
assert curated == models
|
||||||
assert extra == []
|
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):
|
def test_kimi_code_partitions(self):
|
||||||
models = ["kimi-for-coding", "other-model"]
|
models = ["kimi-for-coding", "other-model"]
|
||||||
curated, extra = _curate_models(models, "kimi-code")
|
curated, extra = _curate_models(models, "kimi-code")
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ class TestDetectProvider:
|
|||||||
("https://api.openai.com/v1", "openai"),
|
("https://api.openai.com/v1", "openai"),
|
||||||
("https://api.x.ai/v1", "openai"),
|
("https://api.x.ai/v1", "openai"),
|
||||||
("https://api.deepseek.com", "openai"),
|
("https://api.deepseek.com", "openai"),
|
||||||
|
("https://api.conifer.build/v1", "openai"),
|
||||||
("https://generativelanguage.googleapis.com/v1beta/openai", "openai"),
|
("https://generativelanguage.googleapis.com/v1beta/openai", "openai"),
|
||||||
# Ollama's OpenAI-compatible /v1 surface is generic, not native ollama.
|
# Ollama's OpenAI-compatible /v1 surface is generic, not native ollama.
|
||||||
("http://localhost:11434/v1", "openai"),
|
("http://localhost:11434/v1", "openai"),
|
||||||
|
|||||||
@@ -52,3 +52,14 @@ def _provider_label(url: str) -> str | None:
|
|||||||
])
|
])
|
||||||
def test_provider_label_neutral_for_loopback(url, expected):
|
def test_provider_label_neutral_for_loopback(url, expected):
|
||||||
assert _provider_label(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
|
||||||
|
|||||||
Reference in New Issue
Block a user