This project runs a FastAPI coding agent service (/health, /runs) and a local Langfuse observability stack.
cp .env.example .env
docker compose up --build -dSet the model API endpoint explicitly if your provider is not OpenAI:
OPENAI_BASE_URL=http://seasonsolt.myds.me:8888/v1 \
OPENAI_API_BASE=http://seasonsolt.myds.me:8888/v1 \
OPENAI_API_KEY=<your_key> \
DEEP_AGENT_MODEL=openai:gpt-4o-mini \
LANGFUSE_ENABLED=true \
LANGFUSE_PUBLIC_KEY=<lf_public_key> \
LANGFUSE_SECRET_KEY=<lf_secret_key> \
docker compose up -d --force-recreate coding-agentdocker compose ps
curl http://localhost:8000/health
curl -X POST http://localhost:8000/runs \
-H "Content-Type: application/json" \
-d '{"task":"List files in the workspace root."}'Services:
langfuse-web:http://localhost:3000coding-agent:http://localhost:8000langfuse-workerpostgresclickhouseredisminioproxy(optional): route/to agent and/langfuse/to Langfuse
proxy(nginx): unify public entry (/-> agent,/langfuse/-> Langfuse) and easy TLS termination.monitoring: Prometheus + Grafana for host/container metrics.backup: scheduled snapshots ofpostgres/clickhouse/miniovolumes.
Logs:
docker compose logs -f coding-agentRun a sample skill evaluation:
mkdir -p /tmp/agent-lab-runs
docker compose up -d --build
python3 -m skill_lab.cli run \
--skill ./skills/example-coding-skill \
--task-pack ./task_packs/coding-basic \
--api-url http://localhost:8000 \
--networkCompare a treatment skill against a baseline skill:
python3 -m skill_lab.cli compare \
--baseline ./skills/example-coding-skill \
--treatment ./skills/ddia-system-design \
--task-pack ./task_packs/ddia-coding-real \
--api-url http://localhost:8000 \
--runs 3 \
--network \
--timeout-seconds 300The comparison output includes mean scores, score lift, pass-rate delta, error rate, timeout rate, run IDs, and a verdict.
Eval API:
POST /eval-runsGET /eval-runs/{id}GET /eval-runs/{id}/report