Add deep Assistent probes to the Debug API.
Expose /assistent subpaths for extension/DLL, overlay personas, roles, memory sqlite, live Assistent* API smoke, and optional chat_smoke so agents can diagnose missing tab, empty chat, and wrong models over HTTP. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+135
-7
@@ -84,7 +84,54 @@ _OPENAPI: dict[str, Any] = {
|
||||
"/gpu": {"get": {"summary": "nvidia-smi / CUDA / torch probe"}},
|
||||
"/swarm": {"get": {"summary": "SwarmUI backend_status + ListBackends"}},
|
||||
"/ollama": {"get": {"summary": "Ollama tags + ps"}},
|
||||
"/assistent": {"get": {"summary": "Extension + personas + LLM readiness"}},
|
||||
"/assistent": {
|
||||
"get": {
|
||||
"summary": "Deep Assistent bundle (extension/roles/api/hints)",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "chat_smoke",
|
||||
"in": "query",
|
||||
"schema": {"type": "boolean"},
|
||||
"description": "1-token Ollama /api/chat with preferred model",
|
||||
},
|
||||
{
|
||||
"name": "logs",
|
||||
"in": "query",
|
||||
"schema": {"type": "boolean"},
|
||||
"description": "Include filtered swarmui journal lines",
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
"/assistent/extension": {
|
||||
"get": {"summary": "DLL/Sqlite deps/Tab assets under Extensions/swarm-assistent"}
|
||||
},
|
||||
"/assistent/overlay": {
|
||||
"get": {"summary": "Overlay personas + _base/assistant.json vs local seed"}
|
||||
},
|
||||
"/assistent/roles": {
|
||||
"get": {"summary": "ollama-roles.json vs /api/tags (default_chat)"}
|
||||
},
|
||||
"/assistent/memory": {
|
||||
"get": {"summary": "assistent.sqlite presence + counts + Sqlite DLL hint"}
|
||||
},
|
||||
"/assistent/api": {
|
||||
"get": {
|
||||
"summary": "Live AssistentListPersonas/Models/Memory/Chats smoke",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "chat_smoke",
|
||||
"in": "query",
|
||||
"schema": {"type": "boolean"},
|
||||
"description": "Also run 1-token Ollama chat",
|
||||
}
|
||||
],
|
||||
}
|
||||
},
|
||||
"/assistent/wanted": {"get": {"summary": "Wanted-models queue on data volume"}},
|
||||
"/assistent/logs": {
|
||||
"get": {"summary": "journalctl swarmui filtered for Assistent/Sqlite/build"}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -420,12 +467,92 @@ def _make_handler(hub: DebugHub):
|
||||
)
|
||||
self._json(200, payload)
|
||||
return
|
||||
if path == "/assistent":
|
||||
payload = hub.cached(
|
||||
"assistent",
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_checks.collect_assistent(hub.cfg),
|
||||
)
|
||||
if path == "/assistent" or path.startswith("/assistent/"):
|
||||
from gpu_rent import debug_assistent
|
||||
|
||||
def _flag(name: str) -> bool:
|
||||
raw = (qs.get(name) or ["0"])[0].strip().lower()
|
||||
return raw in {"1", "true", "yes", "on"}
|
||||
|
||||
chat_smoke = _flag("chat_smoke")
|
||||
include_logs = _flag("logs")
|
||||
sub = path[len("/assistent") :].lstrip("/") or ""
|
||||
|
||||
if sub == "":
|
||||
cache_key = f"assistent:{int(chat_smoke)}:{int(include_logs)}"
|
||||
payload = hub.cached(
|
||||
cache_key,
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_checks.collect_assistent(
|
||||
hub.cfg,
|
||||
chat_smoke=chat_smoke,
|
||||
include_logs=include_logs,
|
||||
),
|
||||
)
|
||||
elif sub == "extension":
|
||||
payload = hub.cached(
|
||||
"assistent/extension",
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_assistent.collect_assistent_extension(hub.cfg),
|
||||
)
|
||||
elif sub == "overlay":
|
||||
payload = hub.cached(
|
||||
"assistent/overlay",
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_assistent.collect_assistent_overlay(hub.cfg),
|
||||
)
|
||||
elif sub == "roles":
|
||||
payload = hub.cached(
|
||||
"assistent/roles",
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_assistent.collect_assistent_roles(hub.cfg),
|
||||
)
|
||||
elif sub == "memory":
|
||||
payload = hub.cached(
|
||||
"assistent/memory",
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_assistent.collect_assistent_memory(hub.cfg),
|
||||
)
|
||||
elif sub == "api":
|
||||
cache_key = f"assistent/api:{int(chat_smoke)}"
|
||||
payload = hub.cached(
|
||||
cache_key,
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_assistent.collect_assistent_api(
|
||||
hub.cfg, chat_smoke=chat_smoke
|
||||
),
|
||||
)
|
||||
elif sub == "wanted":
|
||||
payload = hub.cached(
|
||||
"assistent/wanted",
|
||||
CACHE_TTL_DEFAULT,
|
||||
lambda: debug_assistent.collect_assistent_wanted(hub.cfg),
|
||||
)
|
||||
elif sub == "logs":
|
||||
payload = hub.cached(
|
||||
"assistent/logs",
|
||||
CACHE_TTL_LOGS,
|
||||
lambda: debug_assistent.collect_assistent_logs(hub.cfg),
|
||||
)
|
||||
else:
|
||||
self._json(
|
||||
404,
|
||||
{
|
||||
"ok": False,
|
||||
"error": f"unknown path {path}",
|
||||
"try": [
|
||||
"/assistent",
|
||||
"/assistent/extension",
|
||||
"/assistent/overlay",
|
||||
"/assistent/roles",
|
||||
"/assistent/memory",
|
||||
"/assistent/api",
|
||||
"/assistent/wanted",
|
||||
"/assistent/logs",
|
||||
],
|
||||
},
|
||||
)
|
||||
return
|
||||
self._json(200, payload)
|
||||
return
|
||||
|
||||
@@ -483,6 +610,7 @@ def start_debug_server(
|
||||
f"Debug API {base}/",
|
||||
f" {base}/openapi.json",
|
||||
f" {base}/snapshot",
|
||||
f" {base}/assistent",
|
||||
]
|
||||
if log:
|
||||
for line in lines:
|
||||
|
||||
Reference in New Issue
Block a user