fix(gateway): preserve native compaction capability on resume

This commit is contained in:
Stephen Chin
2026-08-28 09:36:09 -07:00
committed by Teknium
parent 48a4201f40
commit c9b9b5e6c7
10 changed files with 115 additions and 3 deletions
+32
View File
@@ -707,6 +707,29 @@ def _try_resolve_from_custom_pool(
return None
def _lift_model_capabilities(
entry: Dict[str, Any], model: Optional[str], result: Dict[str, Any]
) -> None:
"""Copy explicit boolean per-model capabilities into the runtime."""
capabilities = {
key: value
for key, value in (entry.get("capabilities") or {}).items()
if isinstance(key, str) and isinstance(value, bool)
}
models = entry.get("models")
model_config = models.get(model) if isinstance(models, dict) and model else None
if isinstance(model_config, dict):
capabilities.update(
{
key: value
for key, value in model_config.items()
if isinstance(key, str) and isinstance(value, bool)
}
)
if capabilities:
result["capabilities"] = capabilities
def _lift_max_output_tokens(entry: Dict[str, Any], result: Dict[str, Any]) -> None:
"""Propagate a per-provider output cap onto the resolved runtime dict.
@@ -832,6 +855,8 @@ def _get_named_custom_provider(requested_provider: str) -> Optional[Dict[str, An
if api_mode:
result["api_mode"] = api_mode
_lift_max_output_tokens(entry, result)
if isinstance(entry.get("capabilities"), dict):
result["capabilities"] = dict(entry["capabilities"])
return result
# Fall back to custom_providers: list (legacy format)
@@ -879,6 +904,8 @@ def _get_named_custom_provider(requested_provider: str) -> Optional[Dict[str, An
if model_name:
result["model"] = model_name
_lift_max_output_tokens(entry, result)
if isinstance(entry.get("capabilities"), dict):
result["capabilities"] = dict(entry["capabilities"])
return result
return None
@@ -1239,6 +1266,7 @@ def _resolve_named_custom_runtime(
model_name = target_model or custom_provider.get("model")
if model_name:
pool_result["model"] = model_name
_lift_model_capabilities(custom_provider, model_name, pool_result)
if isinstance(custom_provider.get("max_output_tokens"), int):
pool_result["max_output_tokens"] = custom_provider["max_output_tokens"]
request_overrides = _custom_provider_request_overrides(custom_provider)
@@ -1294,6 +1322,7 @@ def _resolve_named_custom_runtime(
"base_url": base_url,
"api_key": api_key or "no-key-required",
"source": f"custom_provider:{custom_provider.get('name', requested_provider)}",
"requested_provider": requested_provider,
}
# Propagate the model name so callers can override self.model when the
# provider name differs from the actual model string the API expects.
@@ -1305,6 +1334,9 @@ def _resolve_named_custom_runtime(
result["model"] = target_model
elif custom_provider.get("model"):
result["model"] = custom_provider["model"]
_lift_model_capabilities(
custom_provider, result.get("model"), result
)
if isinstance(custom_provider.get("max_output_tokens"), int):
result["max_output_tokens"] = custom_provider["max_output_tokens"]
# Per-provider extra HTTP headers (proxies, gateways, custom auth).