Flag hung seats and memory pressure
A turn that has run 15 minutes while producing under 50 tokens a minute is a stalled API stream: flagged on the page with an Esc button, and notified once. The container's memory use is shown in the header and notified near the limit. Claude-Session: https://claude.ai/code/session_01QhLkBGEip8wQdaZ54z4AqJ
This commit is contained in:
@@ -133,6 +133,26 @@ class ParseAskTest(unittest.TestCase):
|
||||
def test_numbered_list_without_cursor_is_not_a_menu(self):
|
||||
self.assertIsNone(server.parse_ask("● Plan:\n 1. engine\n 2. rooms\n", idle=False))
|
||||
|
||||
def test_stalled_turn(self):
|
||||
self.assertEqual(server.stalled("· Ionizing… (34m 31s · ↓ 439 tokens · thinking some more)"), 35)
|
||||
self.assertIsNone(server.stalled("✶ Levitating… (10m 40s · ↓ 30.1k tokens)")) # short and busy
|
||||
self.assertIsNone(server.stalled("✻ Doing… (16m 3s · ↓ 3.4k tokens)")) # long but producing
|
||||
self.assertEqual(server.stalled("* Thinking… (1h 2m 0s · ↓ 900 tokens)"), 62)
|
||||
self.assertIsNone(server.stalled("✻ Churned for 1m 24s · done 4:26 PM"))
|
||||
|
||||
def test_stall_notifies_once(self):
|
||||
w = server.Watcher()
|
||||
s = snap()
|
||||
s["rigs"][0]["seats"][0]["stalled"] = 34
|
||||
self.assertEqual(w.events(s)[-1][0], "dev-qa@team ser ud til at hænge")
|
||||
self.assertEqual(w.events(s), [])
|
||||
|
||||
def test_memory_warning_once(self):
|
||||
w = server.Watcher()
|
||||
s = {**snap(), "memory": {"used": 95, "limit": 100, "fraction": 0.95}}
|
||||
self.assertTrue(w.events(s)[-1][0].startswith("Containeren"))
|
||||
self.assertEqual(w.events(s), [])
|
||||
|
||||
def test_ask_text_for_notifications(self):
|
||||
self.assertIn("2. Yes, and", server.ask_text(server.parse_ask(PERMISSION, idle=False)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user