Skip to main content

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_found populated in runtime_evidence when 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: null honestly rather than guessing.

Coming next:

  • 🚧 v0.3 — Phase A.5: accept HF_TOKEN env var to disambiguate 401 → nonexistent vs gated, and unlock model_not_found warning.
  • 🚧 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lookingeye-0.2.1.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lookingeye-0.2.1-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

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

Hashes for lookingeye-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e2b134249b44d9dd756d6c6fa24e71bcde0060ed7c8e49df65e047c2ad49033a
MD5 9100bacf1f615c17f63dec862ec5ec1a
BLAKE2b-256 ff9e85a57a2c9839006e5128f4ff79e08a7bc2c369680236e4d9e143db9738ae

See more details on using hashes here.

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

Hashes for lookingeye-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b0fd2a9f33bc827e1fad384e480d500b1f1a30a84dff345b35320ef0603aa2ac
MD5 d2c74d8b792330ec78fa92b89a82c47a
BLAKE2b-256 8a90b84eec3da424d1c714d81ebd1b5fb10d21e5fb35302fcd122e3fd6d1ccc6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page