Files
microdao-daarion/docs/ops/experience_bus_phase1.md

1.9 KiB

Experience Bus Phase-1 (Router First)

Scope

  • Source: router /v1/agents/{id}/infer
  • Event subject: agent.experience.v1.<agent_id>
  • JetStream stream: EXPERIENCE (agent.experience.v1.>)
  • DB table: agent_experience_events (append-only)
  • Controls: dedup + sampling

Env knobs

  • EXPERIENCE_BUS_ENABLED=true
  • EXPERIENCE_ENABLE_NATS=true
  • EXPERIENCE_ENABLE_DB=true
  • EXPERIENCE_DATABASE_URL=postgresql://<user>:<pass>@<host>:5432/daarion_memory
  • EXPERIENCE_OK_SAMPLE_PCT=10
  • EXPERIENCE_LATENCY_SPIKE_MS=5000
  • EXPERIENCE_DEDUP_WINDOW_SECONDS=900
  • EXPERIENCE_QUEUE_MAX=2000

Deploy

  1. Apply migration migrations/054_agent_experience_events.sql.
  2. Deploy router with updated main.py, experience_bus.py, agent_metrics.py.
  3. Restart router service.

Smoke (30 calls)

for i in $(seq 1 15); do
  curl -sS -X POST http://127.0.0.1:9102/v1/agents/agromatrix/infer \
    -H 'content-type: application/json' \
    -d "{\"prompt\":\"experience smoke agromatrix $i $(date +%s%N)\"}" >/dev/null
done

for i in $(seq 1 15); do
  curl -sS -X POST http://127.0.0.1:9102/v1/agents/stepan/infer \
    -H 'content-type: application/json' \
    -d "{\"prompt\":\"experience smoke stepan $i $(date +%s%N)\"}" >/dev/null
done

Verify JetStream

# example (inside nats container with nats CLI)
nats stream info EXPERIENCE
nats stream view EXPERIENCE --count 5

Verify DB

SELECT count(*)
FROM agent_experience_events
WHERE ts > now() - interval '10 minutes';

Verify lifecycle guard unchanged

curl -sS -o /dev/null -w '%{http_code}\n' -X POST http://127.0.0.1:9102/v1/agents/aistalk/infer -H 'content-type: application/json' -d '{"prompt":"ping"}'
# expected: 410

curl -sS -o /dev/null -w '%{http_code}\n' -X POST http://127.0.0.1:9102/v1/agents/devtools/infer -H 'content-type: application/json' -d '{"prompt":"ping"}'
# expected: 404