Substrate-specific operational verdicts for Hugging Face Spaces — detect ZeroGPU silent-fails, worker errors, and quota burn that HF won't tell you about.
Project description
lookingeye
Substrate-specific operational verdicts for Hugging Face Spaces. Goal: detect runtime failures that HF won't tell you about (ZeroGPU silent worker errors, async deadlocks, quota burn). Shipped in phases — see "What this version detects" below for exactly what's live today.
Install
pipx install lookingeye
Or with pip:
pip install lookingeye
Quickstart
lookingeye --version
lookingeye verify owner/your-hf-model
Each run writes a SHAPE-valid lookingeye-report.json to ./.lookingeye/<model_id>-<timestamp>.json and prints a one-screen summary.
Example:
$ lookingeye verify gpt2
LookingEye verdict — model: gpt2
decision: generated
hub: reachable
model: confirmed public
probe: 367 ms
warning_codes: (none)
report written: .lookingeye/gpt2-2026-05-26T18-32-59.171Z.json
What this version detects (v0.2.1, Phase A)
Live today:
- ✅
hub_unreachable— fires on network error, DNS failure, or 5xx from HF Hub. Decision:refused. - ✅
hf_hub_reachable+model_foundpopulated inruntime_evidencewhen probe succeeds for a public model.
Honest limit (documented in lookingeye/probe.py):
- ⚠️ HF returns HTTP 401 for both nonexistent and gated models, indistinguishably (verified against the live API 2026-05-26). They do this deliberately to prevent model-name enumeration. Without an HF token, the CLI cannot tell a typo from a gated model — it reports
model_found: nullhonestly rather than guessing.
Coming next:
- 🚧 v0.3 — Phase A.5: accept
HF_TOKENenv var to disambiguate 401 → nonexistent vs gated, and unlockmodel_not_foundwarning. - 🚧 v0.4 — Phase B: Space probe →
zerogpu_worker_ok,invocation_succeeded,silent_hang. - 🚧 v0.5 — Phase C:
quota_remaining_pct,quota_burn.
Telemetry (opt-in)
lookingeye never sends telemetry unless you opt in. To enable:
lookingeye --opt-in
You'll be prompted for an email. We SHA-256 the email locally and only send the hash plus the CLI version + invocation event. No model contents, no source code, no raw PII ever leaves your machine.
To revoke:
lookingeye --opt-out
State is stored at ~/.config/lookingeye/state.json (override with LOOKINGEYE_STATE_DIR).
Privacy
Telemetry is governed by .lookingeye/PRIVACY.md in this repository. The SaaS endpoint that receives pings is https://lookingeye.draftlabs.org/api/cli/ping and is documented in experiment/EVENTS.yaml.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lookingeye-0.2.1.tar.gz.
File metadata
- Download URL: lookingeye-0.2.1.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2b134249b44d9dd756d6c6fa24e71bcde0060ed7c8e49df65e047c2ad49033a
|
|
| MD5 |
9100bacf1f615c17f63dec862ec5ec1a
|
|
| BLAKE2b-256 |
ff9e85a57a2c9839006e5128f4ff79e08a7bc2c369680236e4d9e143db9738ae
|
File details
Details for the file lookingeye-0.2.1-py3-none-any.whl.
File metadata
- Download URL: lookingeye-0.2.1-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0fd2a9f33bc827e1fad384e480d500b1f1a30a84dff345b35320ef0603aa2ac
|
|
| MD5 |
d2c74d8b792330ec78fa92b89a82c47a
|
|
| BLAKE2b-256 |
8a90b84eec3da424d1c714d81ebd1b5fb10d21e5fb35302fcd122e3fd6d1ccc6
|