6a6112a15f
Rename CLAUDE.md -> AGENTS.md (cross-vendor standard) with a relative CLAUDE.md symlink so Claude Code still loads it. Move each .claude/rules file into docs/guides/ (paths: frontmatter preserved) and replace the rules file with a relative symlink into the guide. Repoint the AGENTS.md index paragraph at docs/guides/ so non-Claude agents find the guides.
1.9 KiB
1.9 KiB
paths
| paths | |
|---|---|
|
FastAPI image (image/)
Standalone FastAPI app (Python ≥3.11; ships on python:3.12-slim; UI on port 9999; vanilla HTML/CSS/JS, no framework). Python has no configured linter/formatter — match the style of the file you're editing.
Local dev (no StartOS)
cd image
python3 -m venv .venv && source .venv/bin/activate # one-time
pip install -e .
export SPARK1_HOST=<ip> SPARK1_USER=<user> SPARK2_HOST=<ip> SPARK2_USER=<user> SSH_KEY_PATH=<private-key>
# Required outside the container — these default to paths under /data, which only exists in the image
# (missing REDACTION_MAP_DB crashes startup; missing CONNECTIVITY_LOG 500s /api/status):
export REDACTION_MAP_DB=/tmp/redaction_maps.db CONNECTIVITY_LOG=/tmp/connectivity.json
uvicorn app.server:app --host 0.0.0.0 --port 9999 --reload
Other env vars: BIND_PORT, MODELS_YAML, SSH_DIR, SSH_KNOWN_HOSTS, MODELS_OVERRIDES, SERVICES_OVERRIDES.
Tests
No pytest harness — each suite is a standalone script run with the image/.venv interpreter (system python3 has no deps). See the redaction and audio rules for the suites themselves.
Conventions
- Pydantic request models go at module scope, never inside a
build_router()body (FastAPI silently 422s otherwise). - New external-facing endpoints get documented in
docs/(AUDIO_API.md,EMBEDDINGS.md,REDACTION_GATEWAY.md) and noted in release notes.
Layout
image/app/server.py— FastAPI entry; routers live in sibling modules (audio_proxy.py,llm_proxy.py,embeddings_proxy.py,redaction_gateway.py,swap.py,health.py,deep_health.py,connectivity.py, …).image/app/static/— the dashboard UI.image/models.yaml— vLLM model catalog bundled into the image.image/spark_embed/— Dockerfile + app for the embeddings container; built ON a Spark (ARM64, NGC PyTorch base — see the audio/cluster rule for NGC torch-pinning caveats).