Skip to content

Commit 4b37ad7

Browse files
committed
feat(debug): rename context.json to llm.json for more detailed json debug file
1 parent 4a977bb commit 4b37ad7

3 files changed

Lines changed: 63 additions & 14 deletions

File tree

browser_utils/debug_utils.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,34 @@ def _sanitize_proxy(settings: Optional[Dict[str, str]]) -> Optional[Dict[str, st
248248
if server.console_logs:
249249
context["recent_activity"]["last_console_logs"] = server.console_logs[-5:]
250250

251+
# Filter for errors/warnings
252+
console_errors = [
253+
log
254+
for log in server.console_logs
255+
if str(log.get("type", "")).lower() in ("error", "warning")
256+
]
257+
if console_errors:
258+
context["recent_activity"]["recent_console_errors"] = console_errors[-5:]
259+
260+
# Add failed network requests summary
261+
if server.network_log and "responses" in server.network_log:
262+
failed_responses = [
263+
resp
264+
for resp in server.network_log["responses"]
265+
if isinstance(resp.get("status"), int) and resp.get("status") >= 400
266+
]
267+
if failed_responses:
268+
context["recent_activity"]["failed_network_responses"] = failed_responses[
269+
-5:
270+
]
271+
272+
# Add current page details if available
273+
if server.page_instance and not server.page_instance.is_closed():
274+
try:
275+
context["browser_state"]["current_url"] = server.page_instance.url
276+
except Exception:
277+
context["browser_state"]["current_url"] = "error_getting_url"
278+
251279
return context
252280

253281

@@ -490,15 +518,15 @@ async def save_comprehensive_snapshot(
490518
except Exception as pw_err:
491519
logger.error(f"{log_prefix} ❌ Playwright state failed: {pw_err}")
492520

493-
# === 7. System Context ===
494-
context_path = snapshot_dir / "context.json"
521+
# === 7. System Context (LLM Context) ===
522+
context_path = snapshot_dir / "llm.json"
495523
try:
496524
system_context = await capture_system_context(req_id, error_name)
497525
with open(context_path, "w", encoding="utf-8") as f:
498526
json.dump(system_context, f, indent=2, ensure_ascii=False)
499-
logger.info(f"{log_prefix}System context saved")
527+
logger.info(f"{log_prefix}LLM context saved")
500528
except Exception as ctx_err:
501-
logger.error(f"{log_prefix}System context failed: {ctx_err}")
529+
logger.error(f"{log_prefix}LLM context failed: {ctx_err}")
502530

503531
# === 8. Metadata ===
504532
metadata_path = snapshot_dir / "metadata.json"

browser_utils/page_controller_modules/input.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,29 @@ async def submit_prompt(
6666

6767
# 等待发送按钮启用
6868
wait_timeout_ms_submit_enabled = 100000
69+
start_time = asyncio.get_event_loop().time()
70+
self.logger.info(f"[{self.req_id}] 等待发送按钮启用 (最大 {wait_timeout_ms_submit_enabled}ms)...")
71+
6972
try:
70-
await self._check_disconnect(
71-
check_client_disconnected, "填充提示后等待发送按钮启用 - 前置检查"
72-
)
73-
await expect_async(submit_button_locator).to_be_enabled(
74-
timeout=wait_timeout_ms_submit_enabled
75-
)
76-
self.logger.info(f"[{self.req_id}] ✅ 发送按钮已启用。")
73+
while True:
74+
await self._check_disconnect(
75+
check_client_disconnected, "Waiting for Submit Button Enabled"
76+
)
77+
78+
try:
79+
# 使用短超时轮询检查,以便能响应中断信号
80+
if await submit_button_locator.is_enabled(timeout=500):
81+
self.logger.info(f"[{self.req_id}] ✅ 发送按钮已启用。")
82+
break
83+
except Exception:
84+
# 忽略临时错误(如元素尚未出现)
85+
pass
86+
87+
if (asyncio.get_event_loop().time() - start_time) * 1000 > wait_timeout_ms_submit_enabled:
88+
raise TimeoutError(f"Submit button not enabled within {wait_timeout_ms_submit_enabled}ms")
89+
90+
await asyncio.sleep(0.5)
91+
7792
except Exception as e_pw_enabled:
7893
self.logger.error(f"[{self.req_id}] ❌ 等待发送按钮启用超时或错误: {e_pw_enabled}")
7994
await save_error_snapshot(f"submit_button_enable_timeout_{self.req_id}")

tests/browser_utils/page_controller_modules/test_input.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ def locator_side_effect(selector):
3838
with patch('browser_utils.page_controller_modules.input.expect_async', new_callable=MagicMock) as mock_expect:
3939
# Setup successful expectations
4040
mock_expect.return_value.to_be_visible = AsyncMock()
41-
mock_expect.return_value.to_be_enabled = AsyncMock()
41+
42+
# Mock is_enabled for polling loop
43+
submit_button.is_enabled = AsyncMock(return_value=True)
4244

4345
# Mock handle_post_upload_dialog
4446
input_controller._handle_post_upload_dialog = AsyncMock()
@@ -96,7 +98,9 @@ def locator_side_effect(selector):
9698

9799
with patch('browser_utils.page_controller_modules.input.expect_async', new_callable=MagicMock) as mock_expect:
98100
mock_expect.return_value.to_be_visible = AsyncMock()
99-
mock_expect.return_value.to_be_enabled = AsyncMock()
101+
102+
# Mock is_enabled for polling loop
103+
submit_button.is_enabled = AsyncMock(return_value=True)
100104

101105
# Simulate button click failure
102106
submit_button.click.side_effect = Exception("Click failed")
@@ -133,7 +137,9 @@ def locator_side_effect(selector):
133137

134138
with patch('browser_utils.page_controller_modules.input.expect_async', new_callable=MagicMock) as mock_expect:
135139
mock_expect.return_value.to_be_visible = AsyncMock()
136-
mock_expect.return_value.to_be_enabled = AsyncMock()
140+
141+
# Mock is_enabled for polling loop
142+
submit_button.is_enabled = AsyncMock(return_value=True)
137143

138144
# Simulate button click failure
139145
submit_button.click.side_effect = Exception("Click failed")

0 commit comments

Comments
 (0)