ZacharyZhang-NY 4ab36cd5eb Make the proof suite say what it actually ran
The suite had fifteen checks that could not lose. The visual HashHop arena
painted a cyan line and a white ring on the answer slot, then asked the model
to find the answer by looking; the collector re-rolled puzzles until the
running rate crossed its target; the cache check passed if any layer had ever
recorded an entry; the repository check passed on a call graph built in memory
without touching the store; the research-module check asserted non-empty lists
of SHA256-derived placeholder vectors and so could not fail.

Each check now answers for one claim and reports a verdict the reader can act
on: passed, failed, deferred, or removed. A deferred row names what is missing
and the command that would settle it; a removed row says why the old claim was
withdrawn. The suite verdict is failed > deferred > passed, so a claim that
never ran holds the whole report back from saying "proven".

- evals.py (2427 lines) becomes the proofs/ package; largest module 445 lines.
- proofs/__main__.py deleted: it duplicated PRDProofSuite.latest() with a
  different glob. proofs/table.py renders; latest-proof-suite is the one face
  and exits 1 on a failed verdict.
- The arena paints nothing. The puzzle id is printed on its tile instead,
  because removing the ink without it removes the question.
- HashHop runs a fixed 8 puzzles per depth instead of re-rolling to target.
- The contradiction corpus moves from code to contradiction_scenarios.json;
  the check stays deferred while the corpus is the one this repo authored.
- The cache check compiles a nonce question over a real atom twice and reads
  the miss to hit movement; an empty store fails instead of agreeing by luck.
- The repository check requires rows in the store; the research-module check is
  removed.

Two product bugs surfaced on the way:
- text_index.fts_query joined Latin terms with a space, which FTS5 reads as
  AND, so a question longer than its answer retrieved nothing. Terms are ORed
  and bm25 rank orders the candidates.
- profiles.windows_path_to_wsl prefixed /mnt/ onto an already-POSIX path with
  an empty drive, producing /mnt//home/... and failing every launcher probe.

Verification: 168 passed (pytest backend/tests bench/tests); ruff clean on the
proofs package, cli.py, text_index.py, profiles.py, and both test files; mypy
clean on 16 files with a fresh cache; pyright reports 0 errors on proofs/ and
the test file. Ruff debt elsewhere is unchanged: 19 errors in seven files this
commit does not touch, measured against the same files at HEAD.
2026-10-07 18:39:46 -04:00
2026-05-30 23:51:45 -04:00
2026-05-30 23:51:45 -04:00

Ely-Eye

Ely-Eye is a local multimodal context operating system built on Qwen3.5-9B. It runs on a single consumer GPU and gives a small model three tiers of context: a 262K native window, a 1.01M extended window, and a 100M-token memory capsule it can retrieve from, cite, and recall across sessions.

Under the hood it ingests PDFs, screenshots, video, and code into Evidence Atoms, packs them into a Context Cartridge, retrieves with sparse and Qwen embedding search, runs Qwen3.5-9B with trained LoRA adapters, and checks every answer with a verifier. A fifteen-check proof suite exercises the whole thing against the live model, so a real run can be told apart from a fabricated one.

The landing site lives at https://model.elydora.com/ (its source is under ely-eye-web/, which this repository does not track).

Requirements

  • Windows with an NVIDIA GPU and CUDA. Training and the proof suite were built on an RTX 4090; deployment targets a 16GB card such as an RTX 4080.
  • The extended-context runtimes (SGLang, vLLM, KTransformers, llama.cpp) are optional and run under WSL. The default Windows runtime uses Transformers and needs none of them.

Run it locally

.\scripts\install.ps1            # virtual env, PyTorch + CUDA, Transformers, PEFT, bitsandbytes
.\scripts\download-models.ps1    # Qwen3.5-9B, the 0.8B planner, Qwen3-VL-Embedding-8B
.\scripts\serve-backend.ps1      # API on http://127.0.0.1:8765
.\scripts\serve-frontend.ps1     # dashboard on http://127.0.0.1:5173

When ELY_EYE_ADAPTER_DIR is empty, the runtime picks the latest trained HME-Core-LoRA adapter for Qwen/Qwen3.5-9B on its own; ely-eye status prints which adapter it resolved.

For the 262K and 1.01M extended-context profiles, set up the Linux runtimes once and launch one:

.\scripts\setup-linux-runtimes.ps1
.\scripts\launch-sglang-live.ps1       # 262K
.\scripts\launch-sglang-extreme.ps1    # 1.01M via YaRN

Core commands

.\.venv\Scripts\ely-eye.exe status
.\.venv\Scripts\ely-eye.exe ingest C:\path\to\package --cartridge-name project
.\.venv\Scripts\ely-eye.exe hashhop --kind visual --hops 2 --token-equivalent 262144
.\.venv\Scripts\ely-eye.exe proof-suite

Every command has an HTTP equivalent under /api/..., and the dashboard shows the same state: Adapter Matrix, Proof Suite, Memory Map, Cache Trace.

Fine-tuning

Training runs real BF16 LoRA updates on the GPU through Unsloth-patched Transformers, PEFT, and bitsandbytes with paged 8-bit AdamW. Each run writes the PEFT adapter alongside a manifest, a per-step training trace, a summary, and a proof file that records dataset and weight hashes, per-step loss, optimizer-update norms, and the CUDA/BF16 environment.

The adapter set:

HME-Core-LoRA      Qwen3.5-9B attention/MLP
HME-Vision-LoRA    Qwen3.5-9B visual projector and selected vision layers
HME-TTT-VL         Qwen3.5-9B mutable MLP and visual adapter
HME-Visual-MTP     Qwen3.5-9B draft-head LoRA
HME-Router         Qwen3.5-0.8B context planner
HME-Retrieval      Qwen3-VL-Embedding-8B contrastive retrieval adapter

Proof suite

ely-eye proof-suite runs fifteen checks against the live model and writes the evidence under .ely_eye/data/eval_proofs/. Among them:

  • real CUDA BF16 LoRA training — changed weight hashes, nonzero optimizer updates, per-step loss
  • the runtime loading the model and adapter and generating a cited answer
  • Visual HashHop: multi-hop visual addressing the model has to actually solve, with no OCR shortcut
  • the 100M-token memory capsule committing to a reproducible Memory DNA
  • the Visual Contradiction Lens localizing cross-version drift (design-token, layout, typography, copy, visual-code, temporal) at >=80% recall with no false positives
  • standard benchmark samples (MMMU-Pro, OCRBench, and others) scored against ground truth
.\.venv\Scripts\ely-eye.exe proof-suite
.\.venv\Scripts\ely-eye.exe latest-proof-suite
.\.venv\Scripts\ely-eye.exe runtime-generation-proof
.\.venv\Scripts\ely-eye.exe visual-contradiction-proof

MCP server for coding agents

ely-eye-mcp/ is a local Model Context Protocol server that exposes the .ely_eye memory store to coding agents such as Codex and Claude Code. One command builds a native Go binary (or downloads a prebuilt one), installs it under .ely_eye/bin/, and registers it with both clients. No Docker.

Windows:

powershell -ExecutionPolicy Bypass -File .\ely-eye-mcp\install.ps1 -Client both

Linux and macOS:

bash ./ely-eye-mcp/install.sh --client both

The agent then has nine read-only tools over the live memory — status, cartridge listing and detail, Evidence Atom search and fetch, evidence-pack compilation, proof suites, and HashHop proofs. The server opens the database read-only and never writes to it. The same installer works against any .ely_eye store, not only this repository. See ely-eye-mcp/README.md for the full tool list and the release pipeline.

Data layout

Runtime state lives under .ely_eye/ (git-ignored):

.ely_eye/
├─ adapters/     trained LoRA adapters
├─ data/         sqlite database and eval proofs
├─ training/     datasets and training traces
├─ objects/      ingested source files
├─ cache/        cache fabric
└─ cartridges/   materialized Context Cartridges

A Context Cartridge is a self-contained memory package: the Evidence Atoms, a sparse index and vector indexes, a temporal graph, KV snapshots, the memory capsule, any attached adapters, and the eval proofs.

Project layout

backend/      Python: ingestion, retrieval, runtime, training, proof suite, FastAPI
frontend/     the local dashboard (Vite + React)
scripts/      PowerShell: install, model download, serving, runtimes, fine-tuning
ely-eye-mcp/  Go: local MCP server exposing the memory store to coding agents
S
Description
Ely-Eye: a local memory store for AI. Every memory carries who it belongs to, where it came from, when it was true, and who may read it. Coding agents reach the same store over MCP.
Readme AGPL-3.0
2.8 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 83.2%
Go 7.4%
Shell 3.6%
TypeScript 3.4%
PowerShell 1.1%
Other 1.2%