File size: 3,702 Bytes
6b3874e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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
```