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_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
|
||||
folder_counts = {}
|
||||
for fpath, info in uploaded.items():
|
||||
@@ -117,13 +130,8 @@ def collect_status():
|
||||
|
||||
personas = []
|
||||
for codename, ws_cfg in workspaces.items():
|
||||
slug = ws_cfg["name"].lower()
|
||||
# Normalize slug like AnythingLLM does
|
||||
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())
|
||||
# Use real slug from API, fallback to name-based guess
|
||||
slug = api_slugs.get(ws_cfg["name"], codename)
|
||||
|
||||
# Expected docs from mapped folders
|
||||
expected = 0
|
||||
@@ -142,6 +150,7 @@ def collect_status():
|
||||
personas.append({
|
||||
"codename": codename,
|
||||
"name": ws_cfg["name"],
|
||||
"slug": slug,
|
||||
"expected": expected,
|
||||
"assigned": assigned,
|
||||
"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">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">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>
|
||||
`;
|
||||
|
||||
@@ -389,7 +398,7 @@ function render(data) {
|
||||
const pct = p.expected > 0 ? Math.round(p.assigned / p.expected * 100) : 0;
|
||||
const vecClass = p.has_vectors ? 'vec-ok' : 'vec-no';
|
||||
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>
|
||||
<td class="vec-icon ${vecClass}">${vecIcon}</td>
|
||||
<td class="persona-name">${code}</td>
|
||||
|
||||
Reference in New Issue
Block a user