refactor(core): remove redundant runtime scaffolding (#5127)

This commit is contained in:
chengyongru
2026-07-28 11:07:58 +08:00
committed by GitHub
parent 4c77126b3d
commit ef9e687f19
19 changed files with 89 additions and 312 deletions
+9 -13
View File
@@ -43,15 +43,13 @@ def _provider_extra_headers(
def _make_provider_core(
config: Config,
*,
preset_name: str | None = None,
preset: ModelPresetConfig | None = None,
preset: ModelPresetConfig,
model: str | None = None,
) -> LLMProvider:
"""Create a plain LLM provider without failover wrapping."""
resolved = _resolve_model_preset(config, preset_name=preset_name, preset=preset)
model = model or resolved.model
provider_name = config.get_provider_name(model, preset=resolved)
p = config.get_provider(model, preset=resolved)
model = model or preset.model
provider_name = config.get_provider_name(model, preset=preset)
p = config.get_provider(model, preset=preset)
spec = find_by_name(provider_name) if provider_name else None
if provider_name and not spec and p:
if not p.api_base:
@@ -120,7 +118,7 @@ def _make_provider_core(
provider = AnthropicProvider(
api_key=p.api_key if p else None,
api_base=config.get_api_base(model, preset=resolved),
api_base=config.get_api_base(model, preset=preset),
default_model=model,
extra_headers=_provider_extra_headers(spec, p),
)
@@ -140,7 +138,7 @@ def _make_provider_core(
provider = OpenAICompatProvider(
api_key=p.api_key if p else None,
api_base=config.get_api_base(model, preset=resolved),
api_base=config.get_api_base(model, preset=preset),
default_model=model,
extra_headers=_provider_extra_headers(spec, p),
spec=spec,
@@ -150,7 +148,7 @@ def _make_provider_core(
proxy=p.proxy if p else None,
)
provider.generation = resolved.to_generation_settings()
provider.generation = preset.to_generation_settings()
return provider
@@ -197,16 +195,14 @@ def make_provider(
the failover path to create providers for fallback models.
"""
resolved = _resolve_model_preset(config, preset_name=preset_name, preset=preset)
provider = _make_provider_core(config, preset_name=preset_name, preset=preset, model=model)
provider = _make_provider_core(config, preset=resolved, model=model)
fallback_presets = _resolve_fallback_presets(config, resolved)
if fallback_presets:
provider = FallbackProvider(
primary=provider,
fallback_presets=fallback_presets,
provider_factory=lambda fb: _make_provider_core(
config, preset_name=preset_name, preset=fb
),
provider_factory=lambda fb: _make_provider_core(config, preset=fb),
)
return provider
+8 -17
View File
@@ -13,7 +13,6 @@ from nanobot.providers.base import LLMProvider, LLMResponse
# Circuit breaker tuned to match OpenAICompatProvider's Responses API breaker.
_PRIMARY_FAILURE_THRESHOLD = 3
_PRIMARY_COOLDOWN_S = 60
_MISSING = object()
_FALLBACK_ERROR_KINDS = frozenset({
"timeout",
"connection",
@@ -279,25 +278,17 @@ class FallbackProvider(LLMProvider):
await self._notify_fallback_model(fallback_model)
original_values = {
name: kwargs.get(name, _MISSING)
for name in ("model", "max_tokens", "temperature", "reasoning_effort")
fallback_kwargs = {
**kwargs,
"model": fallback_model,
"max_tokens": fallback.max_tokens,
"temperature": fallback.temperature,
}
kwargs["model"] = fallback_model
kwargs["max_tokens"] = fallback.max_tokens
kwargs["temperature"] = fallback.temperature
if fallback.reasoning_effort is None:
kwargs.pop("reasoning_effort", None)
fallback_kwargs.pop("reasoning_effort", None)
else:
kwargs["reasoning_effort"] = fallback.reasoning_effort
try:
fallback_response = await call(fallback_provider, kwargs)
finally:
for name, value in original_values.items():
if value is _MISSING:
kwargs.pop(name, None)
else:
kwargs[name] = value
fallback_kwargs["reasoning_effort"] = fallback.reasoning_effort
fallback_response = await call(fallback_provider, fallback_kwargs)
if fallback_response.finish_reason != "error":
logger.info(