import copy from content_agent.integrations import query_variant from content_agent.integrations.query_prompt_config import DEFAULT_PROFILE from content_agent.integrations.query_variant import ( MissingQueryVariantClient, OpenRouterQueryVariantClient, _messages, _render_messages, query_variant_client_from_env, ) def test_query_variant_client_empty_env_does_not_read_process_env(monkeypatch): monkeypatch.setenv("OPENROUTER_API_KEY", "process-secret") monkeypatch.setenv("CONTENT_AGENT_QUERY_LLM_MODEL", "process-model") client = query_variant_client_from_env({}) assert isinstance(client, MissingQueryVariantClient) def test_query_variant_client_uses_model_fallback_without_exposing_key(): client = query_variant_client_from_env( { "OPEN_ROUTER_API_KEY": "test-secret", "MODEL": "test-model", "OPENROUTER_BASE_URL": "https://example.invalid/api/v1", "CONTENT_AGENT_QUERY_LLM_TIMEOUT_SECONDS": "12", "CONTENT_AGENT_QUERY_LLM_PROMPT_VERSION": "prompt-test", } ) assert isinstance(client, OpenRouterQueryVariantClient) assert client.model == "test-model" assert client.timeout_seconds == 12 assert client.prompt_version == "query_variant.v1" def test_default_render_messages_matches_legacy_messages(): evidence = {"seed_term": "中医养生", "support": 0.2} rendered = _render_messages(DEFAULT_PROFILE, "中医养生", evidence) assert rendered == _messages("中医养生", evidence) assert str(evidence) in rendered[1]["content"] assert '"seed_term"' not in rendered[1]["content"] def test_openrouter_client_uses_custom_profile(monkeypatch): profile = copy.deepcopy(DEFAULT_PROFILE) profile.update( { "prompt_version": "custom-query-v2", "system": "custom system", "user": "Seed={seed_term}; Evidence={evidence_context}", "temperature": 0.9, "max_tokens": 23, } ) captured = {} class FakeResponse: def raise_for_status(self): return None def json(self): return {"choices": [{"message": {"content": " 气血食疗 "}}]} def fake_post(url, *, headers, json, timeout): captured.update({"url": url, "headers": headers, "json": json, "timeout": timeout}) return FakeResponse() monkeypatch.setattr(query_variant.httpx, "post", fake_post) client = OpenRouterQueryVariantClient( api_key="secret", model="model-x", base_url="https://example.invalid/api/v1", timeout_seconds=7, prompt_version="ignored-env-version", profile=profile, ) result = client.generate_variant(seed_term="中医养生", evidence_context={"support": 0.2}) assert result.query == "气血食疗" assert result.prompt_version == "custom-query-v2" assert captured["timeout"] == 7 assert captured["json"]["temperature"] == 0.9 assert captured["json"]["max_tokens"] == 23 assert captured["json"]["messages"] == [ {"role": "system", "content": "custom system"}, {"role": "user", "content": "Seed=中医养生; Evidence={'support': 0.2}"}, ]