diff --git a/src/llm_core.py b/src/llm_core.py index 7af9c2725..e8331279f 100644 --- a/src/llm_core.py +++ b/src/llm_core.py @@ -677,6 +677,8 @@ def _detect_provider(url: str) -> str: from src.copilot import is_copilot_base if is_copilot_base(url): return "copilot" + if _host_match(url, "cerebras.ai"): + return "cerebras" if _host_match(url, "mistral.ai"): return "mistral" return "openai" @@ -763,6 +765,8 @@ def _provider_label(url: str) -> str: if is_chatgpt_subscription_base(url): return "ChatGPT Subscription" from src.copilot import is_copilot_base if is_copilot_base(url): return "GitHub Copilot" + if _host_match(url, "cerebras.ai"): + return "cerebras" if _host_match(url, "mistral.ai"): return "Mistral" if _host_match(url, "deepseek.com"): return "DeepSeek" if _host_match(url, "nvidia.com"): return "NVIDIA" diff --git a/tests/test_cerebras_cache_affinity.py b/tests/test_cerebras_cache_affinity.py new file mode 100644 index 000000000..a5144feda --- /dev/null +++ b/tests/test_cerebras_cache_affinity.py @@ -0,0 +1,27 @@ +"""Regression test for issue #4640. + +Cerebras endpoints must not receive llama.cpp-specific fields +(session_id, cache_prompt) even when endpoint_kind is misconfigured as 'local'. +""" +import importlib + + +def test_detect_provider_recognizes_cerebras(): + """_detect_provider should return 'cerebras' for api.cerebras.ai URLs.""" + llm_core = importlib.import_module("src.llm_core") + assert llm_core._detect_provider("https://api.cerebras.ai/v1") == "cerebras" + + +def test_cerebras_not_self_hosted(): + """_is_self_hosted_openai_compatible should be False for Cerebras.""" + llm_core = importlib.import_module("src.llm_core") + assert llm_core._is_self_hosted_openai_compatible("https://api.cerebras.ai/v1") is False + + +def test_apply_local_cache_affinity_skips_cerebras(): + """_apply_local_cache_affinity must not add session_id/cache_prompt for Cerebras.""" + llm_core = importlib.import_module("src.llm_core") + payload = {"messages": []} + llm_core._apply_local_cache_affinity(payload, "https://api.cerebras.ai/v1", "test-session-123") + assert "session_id" not in payload, "session_id leaked into Cerebras payload" + assert "cache_prompt" not in payload, "cache_prompt leaked into Cerebras payload"