fix(chat): simplify header cards and llm fallback

This commit is contained in:
2026-06-04 22:42:39 +08:00
parent fecaee0b03
commit 5a6e7698e4
4 changed files with 87 additions and 50 deletions

View File

@@ -5,6 +5,8 @@ from agent_core.llm_provider import (
create_llm_provider,
get_runtime_llm_config,
)
from urllib.error import HTTPError
from io import BytesIO
def test_create_llm_provider_requires_api_key_for_openai_compatible():
@@ -72,6 +74,53 @@ def test_openai_compatible_provider_posts_chat_completion(monkeypatch):
assert captured["headers"]["Authorization"] == "Bearer sk-test"
def test_openai_compatible_provider_falls_back_when_response_format_is_rejected(monkeypatch):
captured_bodies = []
class FakeResponse:
def __enter__(self):
return self
def __exit__(self, exc_type, exc, traceback):
return False
def read(self):
return b'{"choices":[{"message":{"content":"fallback ok"}}],"model":"demo-model"}'
def fake_urlopen(request, timeout):
body = request.data.decode("utf-8")
captured_bodies.append(body)
if len(captured_bodies) == 1:
raise HTTPError(
request.full_url,
400,
"Bad Request",
hdrs=None,
fp=BytesIO(b'{"error":{"message":"response_format is not supported"}}'),
)
return FakeResponse()
monkeypatch.setattr("agent_core.llm_provider.urlopen", fake_urlopen)
provider = create_llm_provider(
{
"LLM_PROVIDER": "openai_compatible",
"LLM_API_KEY": "sk-test",
"LLM_BASE_URL": "https://api.siliconflow.cn/v1",
"LLM_MODEL": "demo-model",
}
)
response = provider.generate(
[{"role": "user", "content": "hello"}],
response_format={"type": "json_object"},
)
assert response.success is True
assert response.content == "fallback ok"
assert '"response_format"' in captured_bodies[0]
assert '"response_format"' not in captured_bodies[1]
def test_embedding_provider_uses_openai_compatible_embeddings(monkeypatch):
class FakeResponse:
def __enter__(self):