Revert "fix(backend/copilot): drive baseline perplexity supplement from PerplexityModel enum"

This reverts commit 54d6d4a3e6.
This commit is contained in:
majdyz
2026-04-21 23:23:09 +07:00
parent e48144b356
commit c9a86e8339
2 changed files with 7 additions and 59 deletions

View File

@@ -436,25 +436,11 @@ def get_baseline_web_search_supplement() -> str:
* SendWebRequest (fetch an arbitrary URL) —
``SEND_WEB_REQUEST_BLOCK_ID``.
The Perplexity model list is pulled from ``PerplexityModel`` at
render time — if a sonar SKU is added / dropped upstream the
supplement follows automatically and the registry test catches
block-ID drift.
The supplement is static — no per-user / per-session content — so it
stays on the cacheable prefix. Append to the baseline system prompt
only; SDK callers would just confuse their native ``WebSearch`` with
a competing block recipe.
"""
from backend.blocks.perplexity import PerplexityModel # noqa: PLC0415
default_model = PerplexityModel.SONAR.value
# Enumerate in declaration order so the default sonar SKU stays
# first. ``.value`` gives the provider-prefixed form Kimi must pass
# verbatim (``perplexity/sonar``, not bare ``sonar``) — the block's
# input validator coerces unknown values back to SONAR, so the
# previous prompt silently degraded every call.
model_lines = "\n".join(f" - ``{m.value}``" for m in PerplexityModel)
return f"""
## Web Search & URL Fetch (fast mode)
@@ -464,13 +450,10 @@ copilot blocks via ``run_block`` when you need live web content.
### Web search with citations — Perplexity
- Block ID: ``{PERPLEXITY_BLOCK_ID}``
- Input: ``{{"prompt": "<query>", "model": "{default_model}"}}``.
- ``model`` MUST be one of the provider-prefixed values below (pass the
full string verbatim — unknown values silently fall back to
``{default_model}``):
{model_lines}
- Default to ``{default_model}`` unless the user asks for deeper
research, in which case pass ``perplexity/sonar-deep-research``.
- Input: ``{{"prompt": "<query>", "model": "sonar"}}``
(``model`` defaults to ``sonar``; other options: ``sonar-pro``,
``sonar-reasoning``, ``sonar-reasoning-pro``, ``sonar-deep-research``
— use ``sonar`` unless the user asks for deeper research.)
- Output: ``response`` (string), ``annotations`` (list of URL citations).
- Requires Perplexity credentials connected to the user's account. If
the block errors with a missing-credentials message, call

View File

@@ -87,44 +87,9 @@ class TestBaselineWebSearchSupplement:
assert '"prompt"' in text
# SendWebRequest required input.
assert '"url"' in text
def test_supplement_uses_perplexitymodel_enum_values_verbatim(self):
"""Regression: the earlier supplement invented bare sonar IDs
(``"sonar"``, ``"sonar-reasoning"``, ``"sonar-reasoning-pro"``)
that don't match ``PerplexityModel`` values — every call logged
an ``Invalid PerplexityModel`` warning and silently fell back to
plain ``sonar``. The supplement must now list exactly the enum
values, in full provider-prefixed form, and the default must
equal ``PerplexityModel.SONAR.value``."""
from backend.blocks.perplexity import PerplexityModel
text = prompting.get_baseline_web_search_supplement()
# Every enum value surfaces verbatim.
for model in PerplexityModel:
assert (
model.value in text
), f"Supplement missing {model.value!r} (known PerplexityModel value)"
# The default example carries the provider prefix so Kimi can
# pass it through without the fallback warning firing.
assert f'"model": "{PerplexityModel.SONAR.value}"' in text
def test_supplement_does_not_mention_invented_sonar_variants(self):
"""Regression: these bare strings were listed as valid Perplexity
models before the enum-driven rewrite — none match a real
``PerplexityModel`` value, so the block silently fell back to
``SONAR`` on every call. Guard against the next reader
accidentally reintroducing them."""
text = prompting.get_baseline_web_search_supplement()
# ``sonar-reasoning`` / ``sonar-reasoning-pro`` are not enum
# members today — if upstream adds them, re-enable this check
# alongside an ``assert PerplexityModel.SONAR_REASONING ...``.
assert "sonar-reasoning" not in text
# Bare ``"sonar"`` without the ``perplexity/`` prefix is rejected
# by the block's model validator; the enum-driven supplement
# should emit only the provider-prefixed form. Check the
# quote-wrapped bare form to avoid matching ``perplexity/sonar``.
assert '"sonar"' not in text
assert '"sonar-pro"' not in text
# Default Perplexity model is named explicitly so Kimi doesn't
# guess (``sonar-xl`` etc. 404 on the Perplexity API).
assert '"sonar"' in text
def test_supplement_flags_credentials_dependency(self):
text = prompting.get_baseline_web_search_supplement()