feat: add request table preferences
This commit is contained in:
@@ -210,6 +210,84 @@ class CodexRetryGatewayTUITests(unittest.TestCase):
|
||||
"Selected model is at capacity. Please try a different model.",
|
||||
)
|
||||
|
||||
def test_request_rows_capture_retry_round_and_wave_firsts(self) -> None:
|
||||
mod = load_module()
|
||||
payload = {
|
||||
"entries": [
|
||||
{
|
||||
"seq": 3,
|
||||
"request_id": "req_round",
|
||||
"response_id": "resp_round",
|
||||
"thread_id": "thread_round",
|
||||
"path": "/responses",
|
||||
"status_code": 200,
|
||||
"reasoning_retry_current_round": 3,
|
||||
"reasoning_retry_current_width": 2,
|
||||
"reasoning_retry_current_firsts": [
|
||||
{
|
||||
"slot": 1,
|
||||
"first_response_delay_ms": 1200,
|
||||
"outcome": "ok",
|
||||
"status_code": 200,
|
||||
"reasoning_effort": "high",
|
||||
"reasoning_tokens": 516,
|
||||
},
|
||||
{
|
||||
"slot": 2,
|
||||
"first_delay_ms": 1800,
|
||||
"outcome": "retry",
|
||||
"status_code": 429,
|
||||
"reason": "capacity",
|
||||
},
|
||||
],
|
||||
}
|
||||
]
|
||||
}
|
||||
rows = mod.normalize_request_rows(payload)
|
||||
row = rows[0]
|
||||
self.assertEqual(row["reasoning_retry_current_round"], 3)
|
||||
self.assertEqual(row["reasoning_retry_current_width"], 2)
|
||||
self.assertEqual(len(row["reasoning_retry_current_firsts"]), 2)
|
||||
self.assertEqual(mod.request_retry_round_text(row), "3(2)")
|
||||
self.assertIn("slot 1", mod.request_retry_wave_summary(row))
|
||||
self.assertIn("retry round 3(2)", mod.render_request_detail(row))
|
||||
self.assertIn("current wave slot 1 first 1.2s", mod.render_request_detail(row))
|
||||
self.assertEqual(mod.request_row_cells(row)[18], "3(2)")
|
||||
|
||||
def test_request_table_preferences_round_trip(self) -> None:
|
||||
mod = load_module()
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
prefs_path = Path(tmpdir) / "request-table.json"
|
||||
with mock.patch.dict(
|
||||
os.environ,
|
||||
{"CODEX_RETRY_GATEWAY_TUI_REQUEST_TABLE_PREFERENCES_FILE": str(prefs_path)},
|
||||
clear=False,
|
||||
):
|
||||
saved_path = mod.write_request_table_preferences(
|
||||
{
|
||||
"visible_columns": ["round", "seq", "status", "unknown"],
|
||||
"sort_column": "round",
|
||||
"sort_reverse": False,
|
||||
}
|
||||
)
|
||||
self.assertEqual(saved_path, prefs_path)
|
||||
loaded = mod.load_request_table_preferences()
|
||||
self.assertEqual(loaded["visible_columns"], ["seq", "status", "round"])
|
||||
self.assertEqual(loaded["sort_column"], "round")
|
||||
self.assertFalse(loaded["sort_reverse"])
|
||||
|
||||
def test_sort_request_rows_supports_custom_column_and_missing_values(self) -> None:
|
||||
mod = load_module()
|
||||
rows = [
|
||||
{"seq": 1, "request_id": "req_1", "duration_ms": 5000, "reasoning_retry_current_round": 1, "reasoning_retry_current_width": 1},
|
||||
{"seq": 2, "request_id": "req_2", "duration_ms": None, "reasoning_retry_current_round": None, "reasoning_retry_current_width": None},
|
||||
{"seq": 3, "request_id": "req_3", "duration_ms": 1200, "reasoning_retry_current_round": 3, "reasoning_retry_current_width": 2},
|
||||
]
|
||||
by_duration = mod.sort_request_rows(rows, "duration", reverse=False)
|
||||
self.assertEqual([row["request_id"] for row in by_duration], ["req_3", "req_1", "req_2"])
|
||||
by_round = mod.sort_request_rows(rows, "round", reverse=True)
|
||||
self.assertEqual([row["request_id"] for row in by_round], ["req_3", "req_1", "req_2"])
|
||||
|
||||
def test_request_rows_read_usage_from_nested_usage_object(self) -> None:
|
||||
mod = load_module()
|
||||
payload = {
|
||||
|
||||
Reference in New Issue
Block a user