feat(token-viz): Phase 3 — auto-refresh triggers and /api/gui/token_stats endpoint
This commit is contained in:
17
gui_2.py
17
gui_2.py
@@ -298,6 +298,7 @@ class App:
|
||||
self._gemini_cache_text = ""
|
||||
self._last_stable_md: str = ''
|
||||
self._token_stats: dict = {}
|
||||
self._token_stats_dirty: bool = False
|
||||
self.ui_disc_truncate_pairs: int = 2
|
||||
self.ui_auto_scroll_comms = True
|
||||
self.ui_auto_scroll_tool_calls = True
|
||||
@@ -360,7 +361,10 @@ class App:
|
||||
if hasattr(self, 'hook_server'):
|
||||
self.hook_server.start()
|
||||
self.available_models = []
|
||||
self.available_models = []
|
||||
self._fetch_models(value)
|
||||
self._token_stats = {}
|
||||
self._token_stats_dirty = True
|
||||
|
||||
@property
|
||||
def current_model(self) -> str:
|
||||
@@ -372,6 +376,8 @@ class App:
|
||||
self._current_model = value
|
||||
ai_client.reset_session()
|
||||
ai_client.set_provider(self.current_provider, value)
|
||||
self._token_stats = {}
|
||||
self._token_stats_dirty = True
|
||||
|
||||
def _init_ai_and_hooks(self) -> None:
|
||||
ai_client.set_provider(self.current_provider, self.current_model)
|
||||
@@ -607,6 +613,12 @@ class App:
|
||||
async def stream(req: GenerateRequest) -> Any:
|
||||
"""Placeholder for streaming AI generation responses (Not yet implemented)."""
|
||||
raise HTTPException(status_code=501, detail="Streaming endpoint (/api/v1/stream) is not yet supported in this version.")
|
||||
|
||||
@api.get("/api/gui/token_stats", dependencies=[Depends(get_api_key)])
|
||||
def token_stats() -> dict[str, Any]:
|
||||
"""Returns current token budget stats for simulation/test verification."""
|
||||
return dict(self._token_stats)
|
||||
|
||||
return api
|
||||
# ---------------------------------------------------------------- project loading
|
||||
|
||||
@@ -935,6 +947,8 @@ class App:
|
||||
self.ai_response = text
|
||||
self.ai_status = payload.get("status", "done")
|
||||
self._trigger_blink = True
|
||||
if not stream_id:
|
||||
self._token_stats_dirty = True
|
||||
if self.ui_auto_add_history and not stream_id:
|
||||
role = payload.get("role", "AI")
|
||||
with self._pending_history_adds_lock:
|
||||
@@ -2732,6 +2746,9 @@ class App:
|
||||
imgui.text_colored(C_SUB, self._gemini_cache_text)
|
||||
|
||||
def _render_token_budget_panel(self) -> None:
|
||||
if self._token_stats_dirty:
|
||||
self._token_stats_dirty = False
|
||||
self._refresh_api_metrics({}, md_content=self._last_stable_md or None)
|
||||
stats = self._token_stats
|
||||
if not stats:
|
||||
imgui.text_disabled("Token stats unavailable")
|
||||
|
||||
Reference in New Issue
Block a user