fix(#3895): carry target model through credential self-heal

This commit is contained in:
Rod Boev 2026-06-11 21:08:24 -04:00
parent e62a31e463
commit 6e133a4f44
2 changed files with 25 additions and 4 deletions

View file

@ -4614,7 +4614,7 @@ def _replace_session_db_in_kwargs(agent_kwargs, state_db_path):
def _attempt_credential_self_heal(
provider_id, session_id, _agent_lock_ref,
provider_id, session_id, _agent_lock_ref, *, target_model=None,
):
"""Try to silently refresh credentials after a 401/auth error (#1401).
@ -4662,6 +4662,7 @@ def _attempt_credential_self_heal(
_new_rt = resolve_runtime_provider_with_anthropic_env_lock(
resolve_runtime_provider,
requested=provider_id,
target_model=target_model,
)
logger.info(
@ -6789,6 +6790,7 @@ def _run_agent_streaming(
_heal_result = None
_heal_rt = _attempt_credential_self_heal(
resolved_provider or '', session_id, _agent_lock,
target_model=resolved_model,
)
if _heal_rt is not None:
logger.info('[webui] self-heal: retrying stream after credential refresh')
@ -7742,6 +7744,7 @@ def _run_agent_streaming(
# ── Credential self-heal on 401 (#1401) ──
_heal_rt = _attempt_credential_self_heal(
resolved_provider or '', session_id, _agent_lock,
target_model=resolved_model,
)
if _heal_rt is not None:
logger.info('[webui] self-heal (except path): retrying stream after credential refresh')

View file

@ -2,6 +2,7 @@
import pathlib
import queue
import re
import sys
import types
from unittest import mock
@ -191,6 +192,23 @@ def test_streaming_reuses_runtime_base_url_helper_in_self_heal_paths():
source = (pathlib.Path(__file__).parent.parent / "api" / "streaming.py").read_text(
encoding="utf-8"
)
assert "resolved_base_url = _runtime_preferred_base_url(\n _rt, resolved_provider, configured_base_url\n )" in source
assert "resolved_base_url = _runtime_preferred_base_url(\n _heal_rt, resolved_provider, configured_base_url\n )" in source
assert "resolved_base_url = _runtime_preferred_base_url(\n _heal_rt, resolved_provider, configured_base_url\n )" in source
assert re.search(
r"resolved_base_url\s*=\s*_runtime_preferred_base_url\(\s*_rt,\s*resolved_provider,\s*configured_base_url\s*\)",
source,
)
assert len(
re.findall(
r"resolved_base_url\s*=\s*_runtime_preferred_base_url\(\s*_heal_rt,\s*resolved_provider,\s*configured_base_url\s*\)",
source,
)
) == 2
assert len(
re.findall(
r"_attempt_credential_self_heal\(\s*resolved_provider\s+or\s+['\"]{2},\s*session_id,\s*_agent_lock,\s*target_model=resolved_model,\s*\)",
source,
)
) == 2
assert re.search(
r"resolve_runtime_provider_with_anthropic_env_lock\(\s*resolve_runtime_provider,\s*requested=provider_id,\s*target_model=target_model,\s*\)",
source,
)