Fix monitor: use API slugs, show KB for small sizes
- Fetch real workspace slugs from AnythingLLM API instead of guessing - Show KB instead of 0MB for small LanceDB/vector sizes - Fixes incorrect vector detection after embedding engine change Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
27
monitor.py
27
monitor.py
@@ -108,6 +108,19 @@ def collect_status():
|
|||||||
lance_ws = get_lance_workspaces()
|
lance_ws = get_lance_workspaces()
|
||||||
lance_sizes = get_lance_sizes()
|
lance_sizes = get_lance_sizes()
|
||||||
|
|
||||||
|
# Get real slugs from API
|
||||||
|
api_slugs = {} # workspace name → slug
|
||||||
|
if requests:
|
||||||
|
try:
|
||||||
|
url = f"{config['anythingllm']['base_url']}/workspaces"
|
||||||
|
headers = {"Authorization": f"Bearer {config['anythingllm']['api_key']}"}
|
||||||
|
resp = requests.get(url, headers=headers, timeout=5)
|
||||||
|
if resp.status_code == 200:
|
||||||
|
for ws in resp.json().get("workspaces", []):
|
||||||
|
api_slugs[ws["name"]] = ws["slug"]
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
# Build expected doc counts per persona
|
# Build expected doc counts per persona
|
||||||
folder_counts = {}
|
folder_counts = {}
|
||||||
for fpath, info in uploaded.items():
|
for fpath, info in uploaded.items():
|
||||||
@@ -117,13 +130,8 @@ def collect_status():
|
|||||||
|
|
||||||
personas = []
|
personas = []
|
||||||
for codename, ws_cfg in workspaces.items():
|
for codename, ws_cfg in workspaces.items():
|
||||||
slug = ws_cfg["name"].lower()
|
# Use real slug from API, fallback to name-based guess
|
||||||
# Normalize slug like AnythingLLM does
|
slug = api_slugs.get(ws_cfg["name"], codename)
|
||||||
import re
|
|
||||||
slug = re.sub(r'[^a-z0-9\s-]', '', slug.replace('ş', 's').replace('ç', 'c')
|
|
||||||
.replace('ğ', 'g').replace('ü', 'u').replace('ö', 'o')
|
|
||||||
.replace('ı', 'i').replace('İ', 'i').replace('&', 'and'))
|
|
||||||
slug = re.sub(r'\s+', '-', slug.strip())
|
|
||||||
|
|
||||||
# Expected docs from mapped folders
|
# Expected docs from mapped folders
|
||||||
expected = 0
|
expected = 0
|
||||||
@@ -142,6 +150,7 @@ def collect_status():
|
|||||||
personas.append({
|
personas.append({
|
||||||
"codename": codename,
|
"codename": codename,
|
||||||
"name": ws_cfg["name"],
|
"name": ws_cfg["name"],
|
||||||
|
"slug": slug,
|
||||||
"expected": expected,
|
"expected": expected,
|
||||||
"assigned": assigned,
|
"assigned": assigned,
|
||||||
"has_vectors": has_vectors,
|
"has_vectors": has_vectors,
|
||||||
@@ -362,7 +371,7 @@ function render(data) {
|
|||||||
<div class="summary-card"><div class="label">Uploaded</div><div class="value">${data.total_uploaded}</div><div class="unit">files</div></div>
|
<div class="summary-card"><div class="label">Uploaded</div><div class="value">${data.total_uploaded}</div><div class="unit">files</div></div>
|
||||||
<div class="summary-card"><div class="label">Assigned</div><div class="value">${data.total_assigned}</div><div class="unit">docs</div></div>
|
<div class="summary-card"><div class="label">Assigned</div><div class="value">${data.total_assigned}</div><div class="unit">docs</div></div>
|
||||||
<div class="summary-card"><div class="label">Vectors</div><div class="value">${data.personas_with_vectors}<span class="unit">/${data.total_personas}</span></div><div class="unit">${pctVec}%</div></div>
|
<div class="summary-card"><div class="label">Vectors</div><div class="value">${data.personas_with_vectors}<span class="unit">/${data.total_personas}</span></div><div class="unit">${pctVec}%</div></div>
|
||||||
<div class="summary-card"><div class="label">LanceDB</div><div class="value">${Math.round(data.lancedb_size_mb)}<span class="unit">MB</span></div></div>
|
<div class="summary-card"><div class="label">LanceDB</div><div class="value">${data.lancedb_size_mb < 1 ? Math.round(data.lancedb_size_mb * 1024) + '<span class="unit">KB</span>' : Math.round(data.lancedb_size_mb) + '<span class="unit">MB</span>'}</div></div>
|
||||||
<div class="summary-card"><div class="label">Documents</div><div class="value">${Math.round(data.docs_size_mb)}<span class="unit">MB</span></div></div>
|
<div class="summary-card"><div class="label">Documents</div><div class="value">${Math.round(data.docs_size_mb)}<span class="unit">MB</span></div></div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@@ -389,7 +398,7 @@ function render(data) {
|
|||||||
const pct = p.expected > 0 ? Math.round(p.assigned / p.expected * 100) : 0;
|
const pct = p.expected > 0 ? Math.round(p.assigned / p.expected * 100) : 0;
|
||||||
const vecClass = p.has_vectors ? 'vec-ok' : 'vec-no';
|
const vecClass = p.has_vectors ? 'vec-ok' : 'vec-no';
|
||||||
const vecIcon = p.has_vectors ? '✓' : '○';
|
const vecIcon = p.has_vectors ? '✓' : '○';
|
||||||
const sizeStr = p.vector_size_mb > 0 ? Math.round(p.vector_size_mb) + 'MB' : '';
|
const sizeStr = p.vector_size_mb > 0 ? (p.vector_size_mb < 1 ? Math.round(p.vector_size_mb * 1024) + 'KB' : Math.round(p.vector_size_mb) + 'MB') : '';
|
||||||
html += `<tr>
|
html += `<tr>
|
||||||
<td class="vec-icon ${vecClass}">${vecIcon}</td>
|
<td class="vec-icon ${vecClass}">${vecIcon}</td>
|
||||||
<td class="persona-name">${code}</td>
|
<td class="persona-name">${code}</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user