From c94ec31decc80fe51fe5c47ddc4c7f4827d9fb74 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Mon, 4 May 2026 17:08:23 -0700 Subject: [PATCH] feat: show LLM Gateway routing metadata --- ROADMAP.md | 2 +- api/models.py | 6 + api/streaming.py | 161 ++++++++++++++++++ docs/pr-media/732/gateway-routing-before.png | Bin 0 -> 52904 bytes .../pr-media/732/gateway-routing-metadata.png | Bin 0 -> 61474 bytes static/messages.js | 6 + static/sessions.js | 12 +- static/style.css | 14 +- static/ui.js | 75 +++++++- tests/test_732_gateway_routing_metadata.py | 105 ++++++++++++ tests/test_issue673.py | 3 +- .../test_pr1341_context_window_persistence.py | 2 +- 12 files changed, 376 insertions(+), 10 deletions(-) create mode 100644 docs/pr-media/732/gateway-routing-before.png create mode 100644 docs/pr-media/732/gateway-routing-metadata.png create mode 100644 tests/test_732_gateway_routing_metadata.py diff --git a/ROADMAP.md b/ROADMAP.md index 0d79f036..6b799225 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -238,6 +238,7 @@ Remaining gaps and forward work live in [Forward Work](#forward-work) below. - [x] Transcript-summary card at 10+ rounds - [x] Sidebar dedup keying on per-conversation identity (distinct chats from same platform stay separate) - [x] Gateway session sync skips dup / delete options for external sessions +- [x] LLM Gateway routing metadata display — assistant turns and session metadata show the served model/provider, failover path, and model-switch warnings when response metadata includes `used_provider`, `used_model`, or `routing` (#732) ### MCP integration - [x] MCP server management UI (System Settings → MCP Servers) @@ -284,7 +285,6 @@ Remaining gaps and forward work live in [Forward Work](#forward-work) below. - **Insights / monitoring suite** — agent heartbeat + alerts (#716), quota / rate-limit display (#706), data tabs (#722), monitor dashboard concepts (#766, #721) - **Native MCP server expose** — Hermes WebUI as an MCP server for direct agent integration (#733) -- **Provider failover status** — show active provider per model + LLM Gateway failover state (#732) - **Teams / agents management panel** — editable names, roles, assignments (#719) - **Web UI profile model alignment with Hermes runtime** — design parity (#749) - **DOM windowing / message virtualization** — for sessions with hundreds of messages (#734) diff --git a/api/models.py b/api/models.py index 6a939b4f..85e8bd82 100644 --- a/api/models.py +++ b/api/models.py @@ -331,6 +331,7 @@ class Session: compression_anchor_message_key=None, context_length=None, threshold_tokens=None, last_prompt_tokens=None, + gateway_routing=None, gateway_routing_history=None, parent_session_id: str=None, enabled_toolsets=None, **kwargs): @@ -361,6 +362,8 @@ class Session: self.context_length = context_length self.threshold_tokens = threshold_tokens self.last_prompt_tokens = last_prompt_tokens + self.gateway_routing = gateway_routing if isinstance(gateway_routing, dict) else None + self.gateway_routing_history = gateway_routing_history if isinstance(gateway_routing_history, list) else [] self.parent_session_id = parent_session_id self.is_cli_session = bool(kwargs.get('is_cli_session', False)) self.source_tag = kwargs.get('source_tag') @@ -405,6 +408,7 @@ class Session: 'pending_user_message', 'pending_attachments', 'pending_started_at', 'compression_anchor_visible_idx', 'compression_anchor_message_key', 'context_length', 'threshold_tokens', 'last_prompt_tokens', + 'gateway_routing', 'gateway_routing_history', 'parent_session_id', 'is_cli_session', 'source_tag', 'raw_source', 'session_source', 'source_label', 'enabled_toolsets', @@ -567,6 +571,8 @@ class Session: 'context_length': self.context_length, 'threshold_tokens': self.threshold_tokens, 'last_prompt_tokens': self.last_prompt_tokens, + 'gateway_routing': self.gateway_routing, + 'gateway_routing_history': self.gateway_routing_history, # Only emit 'parent_session_id' when set (the /branch fork link, #1342). # Sessions without a fork must not leak None — see test_session_lineage_metadata_api. **({'parent_session_id': self.parent_session_id} if self.parent_session_id else {}), diff --git a/api/streaming.py b/api/streaming.py index 97d79afc..679f03af 100644 --- a/api/streaming.py +++ b/api/streaming.py @@ -69,6 +69,152 @@ _API_SAFE_MSG_KEYS = {'role', 'content', 'tool_calls', 'tool_call_id', 'name', ' _NATIVE_IMAGE_MAX_BYTES = 20 * 1024 * 1024 +_GATEWAY_ROUTING_TOP_LEVEL_KEYS = { + 'used_provider', + 'used_model', + 'requested_provider', + 'requested_model', +} +_GATEWAY_ROUTING_CONTAINER_KEYS = ( + 'llm_gateway', + 'gateway', + 'metadata', + 'response_metadata', + 'routing_metadata', + 'usage', +) +_GATEWAY_ROUTING_ATTEMPT_KEYS = { + 'provider', 'model', 'status', 'reason', 'selection_reason', 'score', + 'latency_ms', 'error', 'timestamp', 'selected', 'attempt', 'attempt_index', +} + + +def _clean_gateway_routing_scalar(value): + if value is None: + return None + if isinstance(value, (str, int, float, bool)): + text = str(value).strip() + if not text: + return None + return value if isinstance(value, (int, float, bool)) else text[:240] + return None + + +def _find_gateway_metadata_payload(payload): + if not isinstance(payload, dict): + return None + if any(k in payload for k in _GATEWAY_ROUTING_TOP_LEVEL_KEYS) or isinstance(payload.get('routing'), list): + return payload + for key in _GATEWAY_ROUTING_CONTAINER_KEYS: + nested = payload.get(key) + found = _find_gateway_metadata_payload(nested) + if found: + return found + return None + + +def _normalize_gateway_routing_metadata(payload, requested_model=None, requested_provider=None): + """Return safe LLM Gateway routing metadata, or None when absent. + + LLM Gateway response metadata can contain provider/model routing details, + but WebUI must only persist display-safe scalars and a bounded routing list. + Secrets or provider-specific request objects are deliberately ignored. + """ + src = _find_gateway_metadata_payload(payload) + if not src: + return None + + normalized = {} + for key in _GATEWAY_ROUTING_TOP_LEVEL_KEYS: + value = _clean_gateway_routing_scalar(src.get(key)) + if value is not None: + normalized[key] = value + + if 'requested_model' not in normalized: + fallback_model = _clean_gateway_routing_scalar(requested_model) + if fallback_model is not None: + normalized['requested_model'] = fallback_model + if 'requested_provider' not in normalized: + fallback_provider = _clean_gateway_routing_scalar(requested_provider) + if fallback_provider is not None: + normalized['requested_provider'] = fallback_provider + + routing = [] + raw_routing = src.get('routing') + if isinstance(raw_routing, list): + for attempt in raw_routing[:12]: + if not isinstance(attempt, dict): + continue + clean_attempt = {} + for key in _GATEWAY_ROUTING_ATTEMPT_KEYS: + value = _clean_gateway_routing_scalar(attempt.get(key)) + if value is not None: + clean_attempt[key] = value + if clean_attempt: + routing.append(clean_attempt) + if routing: + normalized['routing'] = routing + + used_provider = str(normalized.get('used_provider') or '').strip().lower() + requested_provider_norm = str(normalized.get('requested_provider') or '').strip().lower() + used_model = str(normalized.get('used_model') or '').strip().lower() + requested_model_norm = str(normalized.get('requested_model') or '').strip().lower() + provider_changed = bool(used_provider and requested_provider_norm and used_provider != requested_provider_norm) + model_changed = bool(used_model and requested_model_norm and used_model != requested_model_norm) + attempted_providers = [ + str(a.get('provider') or '').strip().lower() + for a in routing + if a.get('provider') + ] + distinct_attempted_providers = {p for p in attempted_providers if p} + failed_before_selection = any( + str(a.get('status') or '').strip().lower() in {'failed', 'error', 'timeout', 'rejected'} + for a in routing + ) + has_failover = bool(provider_changed or len(distinct_attempted_providers) > 1 or failed_before_selection) + + if not ( + normalized.get('used_provider') or normalized.get('used_model') or routing or provider_changed or model_changed + ): + return None + normalized['provider_changed'] = provider_changed + normalized['model_changed'] = model_changed + normalized['has_failover'] = has_failover + return normalized + + +def _extract_gateway_routing_metadata(agent, result, requested_model=None, requested_provider=None): + candidates = [] + if isinstance(result, dict): + candidates.extend([ + result.get('llm_gateway'), + result.get('gateway'), + result.get('metadata'), + result.get('response_metadata'), + result.get('routing_metadata'), + result.get('usage'), + result, + ]) + for attr in ( + 'llm_gateway_metadata', + 'gateway_metadata', + 'last_response_metadata', + 'response_metadata', + 'routing_metadata', + 'last_usage', + ): + if agent is not None: + candidates.append(getattr(agent, attr, None)) + for candidate in candidates: + normalized = _normalize_gateway_routing_metadata( + candidate, + requested_model=requested_model, + requested_provider=requested_provider, + ) + if normalized: + return normalized + return None + def _build_agent_thread_env(profile_runtime_env: dict | None, workspace: str, session_id: str, profile_home: str) -> dict: """Build thread-local agent env with per-run values overriding profile defaults. @@ -2497,12 +2643,25 @@ def _run_agent_streaming( _turn_tps = None if output_tokens and _turn_duration_seconds > 0: _turn_tps = round(float(output_tokens) / _turn_duration_seconds, 1) + _gateway_routing = _extract_gateway_routing_metadata( + agent, + result, + requested_model=resolved_model or model, + requested_provider=resolved_provider, + ) + if _gateway_routing: + s.gateway_routing = _gateway_routing + _history = list(getattr(s, 'gateway_routing_history', None) or []) + _history.append(_gateway_routing) + s.gateway_routing_history = _history[-50:] if s.messages: for _dm in reversed(s.messages): if isinstance(_dm, dict) and _dm.get('role') == 'assistant': _dm['_turnDuration'] = round(_turn_duration_seconds, 3) if _turn_tps is not None: _dm['_turnTps'] = _turn_tps + if _gateway_routing: + _dm['_gatewayRouting'] = _gateway_routing break # Persist context window data on the session so the context-ring # indicator survives a page reload (#1318). Must run BEFORE @@ -2559,6 +2718,8 @@ def _run_agent_streaming( } if _turn_tps is not None: usage['tps'] = _turn_tps + if _gateway_routing: + usage['gateway_routing'] = _gateway_routing # Include context window data from the agent's compressor for the UI indicator. # The session-level persistence happens above (before s.save()) so the values # survive a page reload; this block only populates the live SSE usage payload. diff --git a/docs/pr-media/732/gateway-routing-before.png b/docs/pr-media/732/gateway-routing-before.png new file mode 100644 index 0000000000000000000000000000000000000000..a431e9724225481b6d53ee6966f2b20e82387a49 GIT binary patch literal 52904 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%0DcijSHHgJ?-9%a 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ΜDDOVt5o@-% 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 Og{Y9EU@`yqU;hiEm~FHG literal 0 HcmV?d00001 diff --git a/docs/pr-media/732/gateway-routing-metadata.png b/docs/pr-media/732/gateway-routing-metadata.png new file mode 100644 index 0000000000000000000000000000000000000000..155cf4893c634aa42119d84571ded187f1b3a366 GIT binary patch literal 61474 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 lastAsst._turnTps=d.usage.tps; } + if(d.usage.gateway_routing){ + lastAsst._gatewayRouting=d.usage.gateway_routing; + if(S.session)S.session.gateway_routing=d.usage.gateway_routing; + if(S.session&&Array.isArray(S.session.gateway_routing_history))S.session.gateway_routing_history.push(d.usage.gateway_routing); + else if(S.session)S.session.gateway_routing_history=[d.usage.gateway_routing]; + } } } if(d.session.tool_calls&&d.session.tool_calls.length){ diff --git a/static/sessions.js b/static/sessions.js index 1fdf6ff2..713098c1 100644 --- a/static/sessions.js +++ b/static/sessions.js @@ -25,6 +25,15 @@ let _sessionObservedStreaming = null; const _sessionStreamingById = new Map(); const _sessionListSnapshotById = new Map(); +function _formatSessionModelWithGateway(s){ + if(!s||!s.model)return''; + const routing=(typeof _latestGatewayRoutingForSession==='function')?_latestGatewayRoutingForSession(s):(s.gateway_routing||null); + if(typeof _formatGatewayModelLabel==='function'){ + return _formatGatewayModelLabel(s.model,s.model,routing)||s.model; + } + return s.model; +} + function _getSessionViewedCounts() { if (_sessionViewedCounts !== null) return _sessionViewedCounts; try { @@ -2338,7 +2347,8 @@ function renderSessionListFromCache(){ : `${msgCount} msg${msgCount===1?'':'s'}`; metaBits.push(msgLabel); if(childCount>0) metaBits.push(t('session_meta_children', childCount)); - if(s.model) metaBits.push(s.model); + const modelMeta=_formatSessionModelWithGateway(s); + if(modelMeta) metaBits.push(modelMeta); const sourceLabel=_getChannelLabel(s); if(s.is_cli_session&&sourceLabel) metaBits.push(sourceLabel); if(readOnly) metaBits.push('read-only'); diff --git a/static/style.css b/static/style.css index 3022b147..4fc9caf8 100644 --- a/static/style.css +++ b/static/style.css @@ -2794,13 +2794,25 @@ main.main.showing-logs > #mainLogs{display:flex;} gap: 8px; } .msg-usage-inline, -.msg-duration-inline { +.msg-duration-inline, +.msg-gateway-inline, +.gateway-failover-inline, +.msg-model-warning-inline { font-size: 11px; color: var(--muted); opacity: .7; flex: 0 0 auto; font-variant-numeric: tabular-nums; } +.gateway-failover-inline { + color: var(--accent); + opacity: .9; +} +.msg-model-warning-inline { + color: var(--error); + opacity: .95; + font-weight: 600; +} .msg-foot-with-usage .msg-time, .msg-foot-with-usage .msg-actions { opacity: 0; diff --git a/static/ui.js b/static/ui.js index 3d7a7fcd..199e5eba 100644 --- a/static/ui.js +++ b/static/ui.js @@ -739,9 +739,11 @@ function syncModelChip(){ } const opt=_selectedModelOption(); const text=opt?opt.textContent:getModelLabel(sel.value||''); - label.textContent=text; - if(mobileLabel) mobileLabel.textContent=text; - chip.title=sel.value||'Conversation model'; + const gatewayRouting=_latestGatewayRoutingForSession(S.session); + const displayText=_formatGatewayModelLabel(sel.value||'',text,gatewayRouting)||text; + label.textContent=displayText; + if(mobileLabel) mobileLabel.textContent=displayText; + chip.title=gatewayRouting?`${sel.value||'Conversation model'} ${_gatewayRoutingLabel(gatewayRouting)}`:(sel.value||'Conversation model'); chip.classList.toggle('active',!!(dd&&dd.classList.contains('open'))); if(mobileAction) mobileAction.classList.toggle('active',!!(dd&&dd.classList.contains('open'))); } @@ -1647,6 +1649,47 @@ function getModelLabel(modelId){ return _last || 'Unknown'; } +function _gatewayProviderName(provider){ + const text=String(provider||'').trim(); + if(!text)return''; + return text.replace(/^custom:/,'').replace(/[-_]/g,' ').replace(/\b\w/g,c=>c.toUpperCase()); +} +function _gatewayRoutingLabel(routing){ + if(!routing)return''; + const provider=_gatewayProviderName(routing.used_provider||routing.provider); + return provider?`via ${provider}`:''; +} +function _formatGatewayModelLabel(modelId,labelText,routing){ + if(!routing)return''; + const usedModel=String(routing.used_model||'').trim(); + const base=usedModel?getModelLabel(usedModel):(labelText||getModelLabel(modelId)); + const via=_gatewayRoutingLabel(routing); + return via?`${base} ${via}`:base; +} +function _gatewayRoutingFailoverText(routing){ + if(!routing||!routing.has_failover)return''; + const attempts=Array.isArray(routing.routing)?routing.routing:[]; + const providers=attempts.map(a=>_gatewayProviderName(a&&a.provider)).filter(Boolean); + const unique=[];providers.forEach(p=>{if(!unique.includes(p))unique.push(p);}); + if(unique.length>=2)return`Failover: ${unique[0]} → ${unique[unique.length-1]}`; + const from=_gatewayProviderName(routing.requested_provider); + const to=_gatewayProviderName(routing.used_provider); + if(from&&to&&from!==to)return`Failover: ${from} → ${to}`; + return'Gateway failover detected'; +} +function _gatewayModelWarningText(routing){ + if(!routing||!routing.model_changed)return''; + const requested=getModelLabel(routing.requested_model||'requested model'); + const used=getModelLabel(routing.used_model||'served model'); + return`Model switched: ${requested} → ${used}`; +} +function _latestGatewayRoutingForSession(session){ + if(!session)return null; + if(session.gateway_routing)return session.gateway_routing; + const history=Array.isArray(session.gateway_routing_history)?session.gateway_routing_history:[]; + return history.length?history[history.length-1]:null; +} + function _stripXmlToolCallsDisplay(s){ // Strip ... blocks emitted by DeepSeek and // similar models in their raw response text. These are processed separately @@ -4345,19 +4388,41 @@ function renderMessages(){ for(const mi of renderedAssistantIdxs){ const msg=S.messages[mi]||{}; if(msg.role!=='assistant') continue; + const routing=msg._gatewayRouting||null; + const gatewayText=_formatGatewayModelLabel(S.session&&S.session.model||'', '', routing); + const failoverText=_gatewayRoutingFailoverText(routing); + const modelWarningText=_gatewayModelWarningText(routing); const hasTurnUsage=!!msg._turnUsage; const compactActivityForMessage=isSimplifiedToolCalling()&&( assistantThinking.has(mi)|| (S.toolCalls||[]).some(tc=>tc&&(tc.assistant_msg_idx!==undefined?tc.assistant_msg_idx:-1)===mi) ); const durationText=compactActivityForMessage?'':_formatTurnDuration(msg._turnDuration); - if(!hasTurnUsage&&!durationText) continue; + if(!hasTurnUsage&&!durationText&&!gatewayText&&!failoverText&&!modelWarningText) continue; const seg=assistantSegments.get(mi); const row=seg?seg.closest('.assistant-turn'):null; const footerRows=row?row.querySelectorAll('.msg-foot'):[]; const targetFoot=footerRows.length?footerRows[footerRows.length-1]:null; - if(!targetFoot||targetFoot.querySelector('.msg-usage-inline,.msg-duration-inline')) continue; + if(!targetFoot||targetFoot.querySelector('.msg-usage-inline,.msg-duration-inline,.msg-gateway-inline,.gateway-failover-inline,.msg-model-warning-inline')) continue; const fragments=[]; + if(modelWarningText){ + const warning=document.createElement('span'); + warning.className='msg-model-warning-inline'; + warning.textContent=modelWarningText; + fragments.push(warning); + } + if(failoverText){ + const failover=document.createElement('span'); + failover.className='gateway-failover-inline'; + failover.textContent=failoverText; + fragments.push(failover); + } + if(gatewayText){ + const gateway=document.createElement('span'); + gateway.className='msg-gateway-inline'; + gateway.textContent=gatewayText; + fragments.push(gateway); + } if(durationText){ const duration=document.createElement('span'); duration.className='msg-duration-inline'; diff --git a/tests/test_732_gateway_routing_metadata.py b/tests/test_732_gateway_routing_metadata.py new file mode 100644 index 00000000..3604f27d --- /dev/null +++ b/tests/test_732_gateway_routing_metadata.py @@ -0,0 +1,105 @@ +"""Regression coverage for #732 LLM Gateway routing metadata display.""" + +from pathlib import Path + +from api.models import Session +from api.streaming import _normalize_gateway_routing_metadata + + +REPO = Path(__file__).resolve().parents[1] +STREAMING_PY = (REPO / "api" / "streaming.py").read_text(encoding="utf-8") +MESSAGES_JS = (REPO / "static" / "messages.js").read_text(encoding="utf-8") +UI_JS = (REPO / "static" / "ui.js").read_text(encoding="utf-8") +SESSIONS_JS = (REPO / "static" / "sessions.js").read_text(encoding="utf-8") +STYLE_CSS = (REPO / "static" / "style.css").read_text(encoding="utf-8") + + +def test_gateway_routing_metadata_is_safely_normalized_from_response_metadata(): + metadata = { + "used_provider": "Alibaba Cloud", + "used_model": "deepseek-v3.2", + "requested_provider": "CanopyWave", + "requested_model": "deepseek-v3.2", + "api_key": "fake_credential", + "routing": [ + { + "provider": "CanopyWave", + "status": "failed", + "reason": "timeout", + "score": 0.12, + "api_key": "fake_credential", + }, + {"provider": "Alibaba Cloud", "status": "selected", "score": 0.91}, + ], + } + + normalized = _normalize_gateway_routing_metadata(metadata, requested_model="deepseek-v3.2", requested_provider="CanopyWave") + + assert normalized == { + "used_provider": "Alibaba Cloud", + "used_model": "deepseek-v3.2", + "requested_provider": "CanopyWave", + "requested_model": "deepseek-v3.2", + "provider_changed": True, + "model_changed": False, + "has_failover": True, + "routing": [ + {"provider": "CanopyWave", "status": "failed", "reason": "timeout", "score": 0.12}, + {"provider": "Alibaba Cloud", "status": "selected", "score": 0.91}, + ], + } + assert "fake_credential" not in repr(normalized) + + +def test_gateway_routing_metadata_absent_returns_none_without_placeholder_noise(): + assert _normalize_gateway_routing_metadata({}, requested_model="gpt-5.5", requested_provider="openai-codex") is None + assert _normalize_gateway_routing_metadata(None, requested_model="gpt-5.5", requested_provider="openai-codex") is None + + +def test_session_persists_latest_gateway_routing_and_history_across_reload(): + routing = _normalize_gateway_routing_metadata( + { + "used_provider": "provider-b", + "used_model": "model-b", + "requested_provider": "provider-a", + "requested_model": "model-a", + "routing": [ + {"provider": "provider-a", "status": "failed"}, + {"provider": "provider-b", "status": "selected"}, + ], + }, + requested_model="model-a", + requested_provider="provider-a", + ) + session = Session(session_id="732gateway", title="Gateway", gateway_routing=routing, gateway_routing_history=[routing]) + session.messages = [{"role": "assistant", "content": "done", "_gatewayRouting": routing}] + session.save() + + reloaded = Session.load("732gateway") + + assert reloaded.gateway_routing == routing + assert reloaded.gateway_routing_history == [routing] + assert reloaded.messages[-1]["_gatewayRouting"] == routing + compact = reloaded.compact() + assert compact["gateway_routing"] == routing + assert compact["gateway_routing_history"] == [routing] + + +def test_streaming_captures_gateway_metadata_into_usage_payload_and_assistant_turn(): + assert "_extract_gateway_routing_metadata" in STREAMING_PY + assert "usage['gateway_routing']" in STREAMING_PY + assert "_dm['_gatewayRouting']" in STREAMING_PY + assert "s.gateway_routing_history" in STREAMING_PY + + +def test_frontend_copies_and_formats_gateway_metadata_without_absent_noise(): + assert "d.usage.gateway_routing" in MESSAGES_JS + assert "lastAsst._gatewayRouting" in MESSAGES_JS + assert "_formatGatewayModelLabel" in UI_JS + assert "_gatewayRoutingLabel" in UI_JS + assert "msg-gateway-inline" in UI_JS + assert "msg-model-warning-inline" in UI_JS + assert "gateway-failover-inline" in UI_JS + assert "if(!routing)return''" in UI_JS.replace(" ", "") + assert "_formatSessionModelWithGateway" in SESSIONS_JS + assert ".msg-model-warning-inline" in STYLE_CSS diff --git a/tests/test_issue673.py b/tests/test_issue673.py index c3b815bd..b60cfa46 100644 --- a/tests/test_issue673.py +++ b/tests/test_issue673.py @@ -108,7 +108,8 @@ class TestSidebarDensitySessionRendering(unittest.TestCase): def test_detailed_mode_uses_message_count_and_model(self): self.assertIn("typeof s.message_count==='number'?s.message_count:0", SESSIONS_JS) - self.assertIn("if(s.model) metaBits.push(s.model);", SESSIONS_JS) + self.assertIn("const modelMeta=_formatSessionModelWithGateway(s);", SESSIONS_JS) + self.assertIn("if(modelMeta) metaBits.push(modelMeta);", SESSIONS_JS) self.assertIn("t('session_meta_messages', msgCount)", SESSIONS_JS) def test_profile_only_when_show_all_profiles(self): diff --git a/tests/test_pr1341_context_window_persistence.py b/tests/test_pr1341_context_window_persistence.py index 42687c75..42268207 100644 --- a/tests/test_pr1341_context_window_persistence.py +++ b/tests/test_pr1341_context_window_persistence.py @@ -38,7 +38,7 @@ def test_streaming_persists_context_fields_on_session_before_save(): # Save call follows shortly after save_call = src.find("\n s.save()", block_start) assert save_call != -1, "s.save() not found after the post-merge marker" - assert save_call - block_start < 3400, ( + assert save_call - block_start < 4200, ( "s.save() should be close to the post-merge marker — block expanded unexpectedly. " "If you've added a new pre-save mutation block here, bump this limit." )