diff --git a/monitor.py b/monitor.py index 2f670af..f061b9f 100755 --- a/monitor.py +++ b/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) {