openalice-vision
The **perception producer** for [`openalice-agent-protocol`](../openalice-agent-protocol-rs) — turns a camera / screen / scene frame into a consent-gated `visual_perception` event via an **EU-sovereign VLM (Mistral vision, `mistral-small-3.2`, over OpenRouter)**. The symmetric analog of [`openalice-stt`](../openalice-stt) (audio → text): vision in, a digested observation event out.
Architecture rating
Strong substrate adoption: explicit symmetric analog of openalice-stt (audio→text mirrored as vision→event), VlmClient trait + OpenRouterVlm impl, agent-protocol v0.2 conformance, manifest 100 + drift 100 with no circular deps.
Valid manifest with rich summary, solid README explaining the producer role, AGENTS.md present, and 3 @feature annotations; held back by 21 missing docstrings and a weak roadmap (30/100).
Consent-gating is the standout: camera-off-until-consent enforced at the producer in build_visual_perception, plus structured JSON reading limits injection blast radius; but as a crate calling an external VLM over OpenRouter the SSRF surface (frame fetch) and API-key handling are undocumented, and there is no rate-limit/header layer (it's a library, not a server).
Code is clean (avg complexity 2.80, max 9, zero cycles, zero dead imports) and 'live-proven against the real model', but no evidence of timeouts/retries/backoff on the OpenRouter call, no graceful-shutdown or idempotency signals — for a network-dependent producer that's a real gap.
Intentionally stateless — owns no tables and ships no migrations, emitting agent-protocol v0.2 visual_perception events instead; nothing to grade for schema/RLS/FK/GDPR, so scored conservatively rather than credited.
No metrics, tracing, or structured-log signals surfaced and health probe fails ('no https endpoint in manifest exposes'); as a library this is partly expected, but there is zero evidence of instrumentation on the VLM round-trip.
No tests/ or migrations dir present and no automated test count in the inspector signal; only 'live-proven against the real model' and example binaries — critical paths (consent gate, JSON parsing, cadence) have no visible regression coverage.
source · auto-grader-2026-06-16
Ecosystem manifest
.atlas-deps.ymlVision perception PRODUCER — turns a camera/screen/scene frame into a consent-gated visual_perception event (agent-protocol v0.2) via an EU-sovereign VLM (mistral-small-3.2 over OpenRouter). The symmetric analog of openalice-stt (audio→text). VlmClient trait + OpenRouterVlm (multimodal) + build_visual_perception (camera-off-until-consent, enforced at the producer) + structured JSON reading + PerceptionCadence (when to read). Live-proven against the real model. The consumer/bridge is in openalice-agent-basic.
- via cargovisual_perception ConnectorEvent + PerceptionConsent / VisualSubject types the producer builds.
- openrouterhttpvia OPENROUTER_API_KEYEU VLM (mistral-small-3.2) OpenAI-compatible multimodal endpoint over HTTPS — captions frames. OpenRouter-only per project policy.
- OPENROUTER_API_KEY
- cargo_crate: openalice-vision
Code composition
tokei · loc- Rust96.9%
- TOML3.1%
- Rust96.9%
- TOML3.1%
- Rust96.9%· 539
- TOML3.1%· 17
| Language | % code | code | comments | blanks | files |
|---|---|---|---|---|---|
| Rust | 96.9% | 539 | 7 | 70 | 7 |
| TOML | 3.1% | 17 | 0 | 2 | 1 |
| Markdown | 0.0% | 0 | 60 | 11 | 2 |
Telemetry ribbon · last 90 days
1 eventagent-vision/cadence
1 feature- agent-vision.cadence.perception-gatesrc/cadence.rs:13PerceptionCadence::on_frame(now_ms, change) → bool — the deterministic sampler that gates VLM reads by min/max interval + change threshold.
agent-vision/crate
1 feature- agent-vision.cratesrc/lib.rs:21EU VLM (Pixtral/OpenRouter) frame→visual_perception producer; trait-based VlmClient for test stubs; consent-gated event builder.
agent-vision/event
1 feature- agent-vision.event.consent-gated-buildersrc/event.rs:7build_visual_perception — VlmReading → visual_perception ConnectorEvent, refusing camera origin without granted PerceptionConsent.