feat: add profile editing and richer request ids

This commit is contained in:
2026-06-30 11:25:36 +08:00
parent 35780329c4
commit dac72f67e6
4 changed files with 398 additions and 32 deletions
+46 -2
View File
@@ -35,12 +35,14 @@ class CodexRetryGatewayTUITests(unittest.TestCase):
mod = load_module()
payload = {
"entries": [
{"seq": 1, "request_id": "req_a", "path": "/responses"},
{"seq": 2, "request_id": "req_b", "path": "/v1/responses"},
{"seq": 1, "request_id": "req_a", "response_id": "resp_a", "thread_id": "thread_a", "path": "/responses"},
{"seq": 2, "request_id": "req_b", "response_id": "resp_b", "thread_id": "thread_b", "path": "/v1/responses"},
]
}
rows = mod.normalize_request_rows(payload)
self.assertEqual([row["request_id"] for row in rows], ["req_b", "req_a"])
self.assertEqual(rows[0]["response_id"], "resp_b")
self.assertEqual(rows[0]["thread_id"], "thread_b")
def test_profile_rows_show_active_first(self) -> None:
mod = load_module()
@@ -75,6 +77,8 @@ class CodexRetryGatewayTUITests(unittest.TestCase):
row = {
"seq": 1,
"request_id": "r",
"response_id": "resp_1",
"thread_id": "thread_1",
"method": "POST",
"path": "/responses",
"status_code": 200,
@@ -90,10 +94,50 @@ class CodexRetryGatewayTUITests(unittest.TestCase):
"finished_at": "2026-06-30T00:00:01Z",
"usage_last_updated_at": "2026-06-30T00:00:01Z",
}
self.assertEqual(mod.primary_request_id(row), "resp_1")
self.assertIn("thread thread_1", mod.render_request_detail(row))
self.assertIn("updated 1.0s", mod.render_request_detail(row))
self.assertEqual(mod.request_updated_elapsed(row), "1.0s")
self.assertEqual(mod.request_chunk_progress(row), "7 / 4.1KB")
def test_request_usage_summary_shows_cached_ratio(self) -> None:
mod = load_module()
row = {
"input_tokens": 100,
"output_tokens": 40,
"cached_tokens": 25,
}
self.assertEqual(mod.request_usage_summary(row), "in 75 | out 40 | cached 25 (25%)")
def test_profile_editor_payload_round_trip(self) -> None:
mod = load_module()
row = {
"name": "pc",
"listen_host": "100.115.235.115",
"listen_port": "4610",
"upstream_base_url": "https://example.com/v1",
"auth_mode": "passthrough",
"auth_json_key": "OPENAI_API_KEY",
"request_history_limit": 0,
"model_remap": "a=b",
"reasoning_equals": [516, 1034],
"raw": {
"form": {
"retryable_error_messages": [
"Selected model is at capacity. Please try a different model.",
"stream disconnected before completion: Concurrency limit exceeded for account, please retry later",
],
}
},
}
text = mod.profile_editor_document(row)
payload = mod.profile_payload_from_editor_text(text)
self.assertEqual(payload["name"], "pc")
self.assertIn(
"stream disconnected before completion: Concurrency limit exceeded for account, please retry later",
payload["retryable_error_messages"],
)
def test_default_api_url_discovers_gateway_state(self) -> None:
mod = load_module()
with tempfile.TemporaryDirectory() as tmpdir: