multi-agent-env / execution.md
Madhav189's picture
Sync council demo and docs
4455094
|
Raw
History Blame Contribute Delete
9.76 kB
# SPECTRA Execution Guide
This is the concrete runbook for the current repo. It matches the real `Makefile`, `demo.py`, `inference.py`, and test status in `/Users/madhav_189/Documents/Scalar_hackathon/Madhav_task`.
Project root:
```bash
cd /Users/madhav_189/Documents/Scalar_hackathon/Madhav_task
```
## 1. Python Environment
The repo supports two Python paths.
### Option A: create a local `.venv`
```bash
make setup-venv
```
This creates:
```text
/Users/madhav_189/Documents/Scalar_hackathon/Madhav_task/.venv
```
### Option B: reuse the older shared environment
If there is no local `.venv`, the `Makefile` falls back to:
```text
/Users/madhav_189/Documents/Scalar_hackathon/openenv/.venv/bin/python
```
### Check what the repo is using
```bash
make doctor
make which-python
```
## 2. Optional `.env`
The repo auto-loads a local `.env` file if it exists.
Create it from the template:
```bash
cp .env.example .env
```
Most useful keys:
- `HF_TOKEN`
- `INFRA_SPECIALIST_MODEL`
- `INFRA_SPECIALIST_PROVIDER`
- `LOG_SPECIALIST_MODEL`
- `LOG_SPECIALIST_PROVIDER`
- `SEC_SPECIALIST_MODEL`
- `SEC_SPECIALIST_PROVIDER`
- `COMMANDER_PROVIDER`
- `COMMANDER_MODEL`
- `COMMANDER_HF_PROVIDER`
- `API_BASE_URL`
- `OPENAI_API_KEY`
Important notes:
- `.env` is ignored by git
- hosted specialist runs need `HF_TOKEN`
- local commander runs use an OpenAI-compatible endpoint, usually Ollama at `http://127.0.0.1:11434/v1`
- the repo defaults to `SPECIALIST_MODE=hybrid` for hosted multi-agent runs and `LOCAL_MULTI_SPECIALIST_MODE=deterministic` for local smoke runs
## 3. First 5 Minutes
For a first-time user:
```bash
make doctor
./.venv/bin/python -m pytest tests -q
make scenarios
make demo SCENARIO=broken_auth_cascade
```
That verifies:
- Python environment selection
- test suite health
- scenario catalog
- council-style terminal experience
Current local test result:
- `23 passed`
## 4. The Main User Flows
Think of SPECTRA in five practical flows:
1. `make demo`: single-scenario council story
2. `make council-local`: all-scenario local council pipeline
3. `make multi-agent-local-smoke` or `make multi-agent-smoke`: trace, dataset, and hint-pack collection
4. `make hinted` and `make hinted-check`: blind versus hinted replay
5. `make train-smoke` or `make train`: replay-backed GRPO workflow
If you only remember one sequence, use this:
```bash
make doctor
./.venv/bin/python -m pytest tests -q
make demo
```
## 5. Demo Experience
### Single-scenario money demo
```bash
make demo SCENARIO=broken_auth_cascade
```
This runs the three-phase story for one scenario:
1. blind commander
2. multi-agent council
3. hinted commander
Default output root:
- `outputs/council_pipeline/single_broken_auth_cascade/`
Convenience shortcuts:
```bash
make demo-easy
make demo-medium
make demo-hard
make demo-cache
```
### Full local council pipeline
```bash
make council-local
```
Default behavior:
- `COUNCIL_SCOPE=all`
- phases: `untrained,multi_agent,hinted`
- local commander model: `qwen2.5:3b`
- local multi-agent model: `qwen2.5:3b`
- specialist mode: `deterministic`
Default output root:
- `outputs/council_pipeline/`
### Run only one scenario in the council UI
```bash
make council-local COUNCIL_SCOPE=single SCENARIO=broken_auth_cascade
```
### Run only selected phases
```bash
make council-local COUNCIL_PHASES=untrained
make council-local COUNCIL_PHASES=multi_agent
make council-local COUNCIL_PHASES=hinted
```
### Hosted council variant
```bash
make council-hf
```
This keeps the untrained and hinted phases local, but switches the multi-agent council phase to the hosted HF commander stack.
## 6. Single-Agent Baselines
### Blind local commander
This is the clean baseline: one full-state commander with no hint help.
Before running it, make sure your local OpenAI-compatible endpoint exists.
For Ollama:
```bash
ollama serve
ollama list
```
Run the blind baseline:
```bash
make untrained SCENARIO=broken_auth_cascade LOCAL_MODEL=qwen2.5:1.5b
```
Default output folder:
- `outputs/untrained/`
### Direct single-agent freeform inference
```bash
make local-free SCENARIO=broken_auth_cascade LOCAL_MODEL=qwen2.5:1.5b
```
This goes through `inference.py` in `single_agent` mode without the council wrapper.
## 7. Multi-Agent Collection
This is the core benchmark artifact flow. One run can export:
- step-level JSONL data
- episode summary JSON
- raw traces
- a trace-derived hint pack
### Local no-HF smoke run
```bash
make multi-agent-local-smoke SCENARIO=broken_auth_cascade
```
Default local settings:
- commander provider: `openai`
- commander model: `qwen2.5:3b`
- specialist mode: `deterministic`
- output dir: `outputs/multi_agent/`
### Hosted or hybrid smoke run
```bash
make multi-agent-smoke SCENARIO=broken_auth_cascade COMMANDER_MODEL=Qwen/Qwen3-4B-Instruct-2507
```
Default hosted settings:
- commander provider: `hf`
- commander model: `Qwen/Qwen3-4B-Instruct-2507`
- commander HF provider: `nscale`
- specialist mode: `hybrid`
### Larger collection run
```bash
make multi-agent EPISODES=5 COMMANDER_MODEL=Qwen/Qwen3-4B-Instruct-2507
```
### Real hosted specialist collection
```bash
make real-collect-smoke
make real-collect EPISODES=5
```
These force `SPECIALIST_MODE=llm`.
### Local model matrix
```bash
make multi-agent-local-05b-smoke SCENARIO=broken_auth_cascade
make multi-agent-local-15b-smoke SCENARIO=broken_auth_cascade
make multi-agent-local-3b-smoke SCENARIO=broken_auth_cascade
make multi-agent-local-matrix SCENARIO=broken_auth_cascade
```
### Artifacts to inspect
After a multi-agent run, look at:
- `outputs/multi_agent/data.jsonl`
- `outputs/multi_agent/data.summary.json`
- `outputs/multi_agent/traces/`
- `outputs/multi_agent/hints.json`
### Specialist mode guidance
- `deterministic`: cheapest and most reproducible
- `hybrid`: hosted first, deterministic fallback on failure
- `llm`: strict hosted specialists only
Use `hybrid` when you want the pipeline to keep moving even if provider calls are brittle.
## 8. Hinted Replay
This re-runs a full-state local commander with the exported hint pack.
### Run the hinted commander
```bash
make hinted SCENARIO=broken_auth_cascade LOCAL_MODEL=qwen2.5:1.5b
```
Default output folder:
- `outputs/hinted/`
### Compare blind versus hinted
```bash
make hinted-check SCENARIO=broken_auth_cascade
```
Alias:
```bash
make hint-effect SCENARIO=broken_auth_cascade
```
Expected output folder:
- `outputs/hint_effect/`
This is the simplest way to test whether the trace-derived cheat sheet actually improves the local commander.
## 9. Hint Building And Dataset Smoke Tests
Build a hint pack directly from deterministic heuristic collection:
```bash
make build-hints EPISODES=5
```
Minimal dataset smoke test:
```bash
make dataset-smoke
```
This is useful when you want to validate artifact wiring without burning hosted credits.
## 10. GRPO Workflow
### Smoke test the training loop
```bash
make train-smoke
```
This does two things:
1. collects a tiny deterministic dataset
2. dry-runs `training/grpo_train.py` against it
### Dry-run training on an existing dataset
```bash
make grpo-dry-run DATASET_PATH=outputs/multi_agent/data.jsonl
```
### Real training run
```bash
make train DATASET_PATH=outputs/multi_agent/data.jsonl TRAIN_STEPS=20
```
Training output root:
- `outputs/grpo_runs/`
## 11. Direct Inference Commands
Single scenario:
```bash
make inference SCENARIO=database_sqli_outage
```
Pretty terminal rendering:
```bash
make inference-pretty SCENARIO=broken_auth_cascade
```
All scenarios:
```bash
make inference-all
```
The CLI itself supports:
```bash
./.venv/bin/python inference.py --help
```
Main choices:
- runtime: `local` or `remote`
- observation mode: `multi_agent` or `single_agent`
- specialist mode: `deterministic`, `hybrid`, or `llm`
- commander type: `heuristic`, `random`, `llm`, or `single-agent`
## 12. API Server And Remote Mode
### Start the local server
Terminal 1:
```bash
make server
```
For auto-reload:
```bash
make dev
```
### Run remote inference against the server
Terminal 2:
```bash
make remote REMOTE_SCENARIO=database_sqli_outage
make remote-pretty REMOTE_SCENARIO=database_sqli_outage
```
Default base URL:
- `http://127.0.0.1:8000`
The top-level server wrapper is `server/app.py`, and the real FastAPI/OpenEnv implementation is in `environments/pomir_env/server.py`.
## 13. Docker Flow
Build the image:
```bash
make docker-build
```
Run it:
```bash
make docker-run
```
The Docker entrypoint serves:
- `uvicorn server.app:app --host 0.0.0.0 --port 8000`
## 14. Validation Commands
### Tests
```bash
./.venv/bin/python -m pytest tests -q
```
Current local result:
- `23 passed`
### OpenEnv validation
```bash
./.venv/bin/openenv validate .
```
Current local result:
- not yet ready for multi-mode deployment because `uv.lock` is missing
The repo no longer fails validation on the server wrapper shape:
- `server = "server.app:main"` exists in `pyproject.toml`
- `server/app.py` exposes a callable `main()`
To clear the remaining issue:
```bash
uv lock
```
If `uv lock` needs network access in your environment, run it outside the restricted sandbox and then re-run:
```bash
./.venv/bin/openenv validate .
```
## 15. Recommended Paths
If you want the judge-facing story:
```bash
make demo
```
If you want the full local product flow:
```bash
make council-local
```
If you want benchmark artifacts without HF credits:
```bash
make multi-agent-local-smoke
```
If you want the strongest hosted multi-agent collection:
```bash
make multi-agent-smoke COMMANDER_MODEL=Qwen/Qwen3-4B-Instruct-2507
```
If you want the shortest training sanity check:
```bash
make train-smoke
```