Redis hosts two things in Avvyland:
hibiken/asynq.This page covers the queue side; the cache side is part of state-server's Architecture.
avvy-worker reads from two named queues:
| Queue | Tasks | Worker config key |
|---|---|---|
model-previews |
model.preview.v1, model.object_pipeline.v1 |
worker.redis.queue_name |
model-projections |
model.projection.step.v1, model.projection.model.v1 |
worker.redis.projection_queue_name |
Defaults match the table above; override with MODEL_PREVIEW_QUEUE_NAME and MODEL_PROJECTION_QUEUE_NAME if you split the deployment.
worker:
redis:
address: "redis.internal:6379"
password: ""
db: 0
queue_name: "model-previews"
projection_queue_name: "model-projections"
concurrency: 2
callback_secret: "<rotate; never commit>"
http_timeout: "5m"
projection:
max_attempts: 4
pass_score: 0.8
concurrency is intentionally low — preview rendering uses headless Chromium and is CPU/memory heavy. Scale out (more replicas) rather than up (more concurrency).
The HMAC-SHA256 callback_secret is shared between state-server and avvy-worker. See Signed Callbacks for the protocol.
Rotation procedure:
callback_url and force the worker to POST model bytes anywhere. Keep Redis on a private network and disable public binding..env in production. Pass secrets via systemd EnvironmentFile=, Kubernetes secrets, or your secret manager.input_model) in the asynq payload. Large models put memory pressure on Redis. A planned revision uploads input to S3 and passes a URL — until then, monitor Redis memory.Asynq exposes runtime statistics via its web UI (asynqmon). Recommended dashboards:
avvy-worker architecture.
Signed callbacks protocol.
Observability.
gitlab.avvyland.com/avvy/avvy-worker — README.md (config + environment variables).