Files
unsupportedpastels a212421dbd fix(context): keep the fallback source on the compressor, and through MoA presets
The per-route record held only the latest lookup, so a second session that
detected the same window on a route cleared the label of an agent still
running on its earlier default. The compressor now keeps the source of its
own lookup (last_defaulted_context_length, read right after it resolves) and
the agent label reads that.

A nested lookup that defaults (a MoA preset's aggregator) now marks the outer
resolution too, so the preset's window keeps "fallback".

Addresses Greptile review on #148801 (f6e7d756).
2026-11-04 12:56:04 -05:00

125 lines
6.2 KiB
Python

"""``model.context_length`` is an explicit pin: it wins over provider metadata (#66168).
Two helpers make that visible without changing the numeric value used: a label for every
surface that renders the context window, and a one-time startup warning when the pin
disagrees with what the provider is known to advertise for the model. The same label marks a
window the resolver only defaulted to (``fallback``), so it is not read as a detected limit.
"""
from __future__ import annotations
import logging
from typing import Optional
logger = logging.getLogger(__name__)
_warned_pins: set = set()
_MARKER_SUFFIX = {"pinned": " (pinned)", "fallback": " (fallback)"}
def is_context_pinned(context_length, config_context_length) -> bool:
"""True when the displayed ``context_length`` is the ``model.context_length`` pin."""
return (
isinstance(config_context_length, int)
and not isinstance(config_context_length, bool)
and config_context_length > 0
and context_length == config_context_length
)
def context_pin_suffix(context_length, config_context_length) -> str:
"""`` (pinned)`` when the shown value comes from ``model.context_length``, else ``""``."""
return " (pinned)" if is_context_pinned(context_length, config_context_length) else ""
def is_fallback_context_length(context_length, *, model: str, provider: str = "", base_url: str = "") -> bool:
"""True when ``context_length`` is a default the resolver fell back to for ``model`` on this route (Bedrock's
static 128K, or the generic 256K), not a known or detected limit. The resolver records that itself
(agent.context_default_record), so this agrees with every source it consults; ``provider`` is accepted for
call-site symmetry. Fail-open: False on any error."""
if type(context_length) is not int or context_length <= 0 or not isinstance(model, str) or not model:
return False
try:
from agent.context_default_record import was_context_defaulted
return was_context_defaulted(context_length, model, base_url)
except Exception:
logger.debug("context fallback check failed for %s", model, exc_info=True)
return False
def context_window_marker(context_length, config_context_length, *, model: str, provider: str = "",
base_url: str = "") -> str:
"""``"pinned"`` (the ``model.context_length`` pin), ``"fallback"`` (a default, not a known limit) or ``""``."""
if is_context_pinned(context_length, config_context_length):
return "pinned"
fallback = is_fallback_context_length(context_length, model=model, provider=provider, base_url=base_url)
return "fallback" if fallback else ""
def context_window_suffix(context_length, config_context_length, **route) -> str:
"""`` (pinned)`` / `` (fallback)`` / ``""`` for a rendered window; ``route`` is model, provider, base_url."""
return _MARKER_SUFFIX.get(context_window_marker(context_length, config_context_length, **route), "")
def agent_context_marker(agent) -> str:
""":func:`context_window_marker` for an agent's live compressor window."""
compressor = getattr(agent, "context_compressor", None)
pin = getattr(compressor, "_config_context_length", getattr(agent, "_config_context_length", None))
# The compressor's route is what resolved the window; the agent's is the fallback for doubles without one.
route = {name: getattr(compressor, name, None) or getattr(agent, name, "") or "" for name in ("model", "provider", "base_url")}
window = getattr(compressor, "context_length", None) # first: reading it resolves the window
own = getattr(compressor, "_context_default", None) # (model, base_url, defaulted window | None) from that lookup
if isinstance(own, tuple) and len(own) == 3 and own[:2] == (getattr(compressor, "model", None), getattr(compressor, "base_url", None)):
if is_context_pinned(window, pin):
return "pinned"
return "fallback" if type(own[2]) is int and own[2] == window else ""
return context_window_marker(window, pin, **route)
def agent_context_suffix(agent) -> str:
"""`` (pinned)`` / `` (fallback)`` / ``""`` for an agent's live compressor window."""
return _MARKER_SUFFIX.get(agent_context_marker(agent), "")
def advertised_context_length(model: str, base_url: str = "") -> Optional[int]:
"""Provider-advertised window from LOCAL sources only (persistent cache learned on this
endpoint, models.dev disk cache, hardcoded catalog). Never a network probe: users pin
precisely when the endpoint cannot report its window, so the check must not add startup
latency or a failing request."""
from agent.model_metadata import (
DEFAULT_CONTEXT_LENGTHS, _load_model_metadata_disk_cache, _longest_key_match,
_strip_provider_prefix, get_cached_context_length,
)
model = _strip_provider_prefix(str(model or ""))
if not model:
return None
if base_url:
cached = get_cached_context_length(model, base_url)
if cached:
return int(cached)
entry = _load_model_metadata_disk_cache().get(model) or {}
ctx = entry.get("context_length") if isinstance(entry, dict) else None
if isinstance(ctx, int) and ctx > 0:
return ctx
hit = _longest_key_match(DEFAULT_CONTEXT_LENGTHS, model.lower())
return hit[1] if hit else None
def warn_once_on_pin_disagreement(model: str, base_url: str, config_context_length) -> bool:
"""Log ONE warning per (model, pin) when ``model.context_length`` disagrees with the
advertised window. Returns True when the warning fired (the pin still wins)."""
if not is_context_pinned(config_context_length, config_context_length):
return False
advertised = advertised_context_length(model, base_url)
if not advertised or advertised == config_context_length:
return False
key = (str(model), int(config_context_length))
if key in _warned_pins:
return False
_warned_pins.add(key)
logger.warning(
"model.context_length pins %s at %s tokens but the provider advertises %s; the pin wins. "
"Remove model.context_length from config.yaml to use the advertised window.",
model, f"{config_context_length:,}", f"{advertised:,}",
)
return True