Jikkii's picture
UI + backend
86e603b
# backend
Long-running HTTP server that owns the searcher processes (and therefore the
loaded model weights). The UI and the CLI both talk to it β€” models are loaded
once and reused.
## Run
```bash
# from repo root, using the indexing venv
indexing/.env/bin/python backend/server.py # default 127.0.0.1:8000
indexing/.env/bin/python backend/server.py --port 8042
```
Make sure the indexes exist first:
```bash
cd indexing && python index.py /path/to/folder
```
## Routes
| route | what |
| ------------------------------------ | --------------------------------------------------- |
| `GET /` | serves `ui/static/index.html` |
| `GET /static/<file>` | UI assets |
| `GET /api/modalities` | `{modalities: [...], groups: {...}}` |
| `GET /api/search/<modality>?q=&k=` | per-modality search β†’ `{modality, kind, query, hits:[{score,path}]}` |
| `GET /api/file?path=` | serve an indexed file (with stale-path healing) |
Clients fan out across `/api/search/<modality>` themselves β€” the UI does this
with `Promise.all` so columns render as soon as their modality returns.
## Path healing
The `/api/file` endpoint accepts the absolute path stored in
`indexing/index_data/*_meta.json`. If that file has since been moved, the
server falls back to a basename lookup against `indexing/` and the repo root,
so re-indexing isn't required just to view stale-path results.