whassan's picture
Deploy Sensorflow Studio
6b3874e verified
|
Raw History Blame Contribute Delete
3.7 kB
# Retro — Agentic Retrospective Safety Analyzer
Local-first, evidence-driven analysis of perception failures. Traceable chain:
```
RAW FAILURE -> OBSERVED EVIDENCE -> DERIVED METRICS -> RETRIEVED ENGINEERING
EVIDENCE -> AGENT HYPOTHESIS -> BEHAVIORAL ANALYSIS -> SAFETY POLICY ->
RETROSPECTIVE SCORECARD -> HUMAN DECISION
```
Core rule: the LLM interprets/correlates/hypothesizes; deterministic code
computes metrics and owns the safety boundary. Launch determinations only
pass through the deterministic policy gate (`policy.py`).
## Backends and reproducible startup
### mock (default — no model, fully deterministic)
Nothing to start. All tests run against this backend.
```bash
.venv/bin/python -c "
from sensorflow.retro.inference.client import get_backend
b = get_backend('mock'); print(b.health()); print(b.validate())"
```
### ollama (real local inference on this macOS machine — CPU/Metal)
```bash
# 1. Install & start Ollama (https://ollama.com), then pull a model:
ollama pull gemma3:latest # or any chat model
# 2. Optionally pin the model:
export RETRO_OLLAMA_MODEL=gemma3:latest
# 3. Validate:
.venv/bin/python -c "
from sensorflow.retro.inference.client import get_backend
b = get_backend('ollama'); print(b.health()); print(b.validate())"
```
Numbers from this backend are **Ollama-on-CPU/Metal**, never vLLM numbers.
### vllm (CUDA/ROCm Linux hosts ONLY — not runnable on this machine)
```bash
# On the GPU host:
pip install vllm
cd sensorflow/retro/inference/vllm_server
MODEL_NAME=meta-llama/Llama-3.1-8B-Instruct PORT=8001 ./start_vllm.sh
# Benchmark (TTFT p50/p95/p99, tokens/sec, warm-vs-cold):
python benchmark.py --base-url http://localhost:8001/v1 --label "vLLM <GPU model>"
# Back on this machine, point the client at the host:
export RETRO_VLLM_URL=http://gpu-host:8001/v1
```
`start_vllm.sh` refuses to run on macOS with a clear error. `env_detect.py`
and `compat.py` report this machine as unsupported for vLLM (verified by
tests). See `docs/retro/compatibility-matrix.md` for CUDA vs ROCm.
## Quick tour
```bash
# Environment + compat report
.venv/bin/python -m sensorflow.retro.inference.compat
# Analyze a canonical fixture end to end (mock backend)
.venv/bin/python -c "
from sensorflow.retro.agent.orchestrator import analyze_fixture
sc = analyze_fixture('missed_pedestrian_rain', backend='mock')
print(sc.render_markdown())"
# API (mounted on the studio backend at :8000)
curl -s localhost:8000/api/retro/env | python -m json.tool
curl -s -X POST 'localhost:8000/api/retro/analyze?fixture_id=phantom_brake_plastic_bag&backend=mock'
```
## Layout
- `inference/` — env detection, vLLM compat chain, pluggable client,
vLLM server configs + startup + benchmark (GPU hosts only).
- `rag/` — safety-case retrieval. Seed corpus is **SYNTHETIC** demonstration
material; every synthetic rule is tagged `SYNTHETIC_EXAMPLE` /
`NOT_A_REAL_STANDARD` in content and metadata. SOTIF/ISO 21448 entries are
paraphrase-level concept summaries, not standard text.
- `tools/` — MCP-style audited tool registry (read-only default, path
allowlists, audit trail with args/result-hash/timestamp).
- `agent/` — orchestrator: Log Agent -> Evidence Analyzer -> RAG Agent ->
Safety Synthesizer. Mock backend = deterministic scripted analysis.
- `scorecard.py` — tiered evidence (OBSERVED/DERIVED/RETRIEVED/AI_HYPOTHESIS)
and the strictly-typed `RetrospectiveScorecard`.
- `policy.py` — deterministic severity framework (asymmetric FN/FP cost) and
the versioned launch-recommendation gate.
- `api.py` — FastAPI router at `/api/retro`; artifacts under `runs/retro/`.
## Tests
```bash
.venv/bin/python -m pytest tests/test_retro -q
```