| Global edge — anycast termination, WAF, geography pinning, deadline stamping |
Azure Front Door Premium with WAF, routing by geography and tenant residency rather than purely by latency |
Microsoft Azure |
AWS CloudFront with Lambda@Edge; Google Cloud Load Balancing with Cloud Armor; self-hosted Envoy on anycast |
The first 60 ms of the budget is spent here, so termination has to be close to the developer and the residency decision has to be made before the request is forwarded anywhere |
ADR-04 |
| Inference fleet — continuous batching, session-affine placement |
AKS GPU node pools, one pool per model family, with a drain protocol that completes in-flight sequences and refuses new sessions |
Microsoft Azure |
Amazon EKS with GPU node groups; GKE with GPU node pools; self-operated bare metal with a Kubernetes overlay |
Session affinity needs placement control over individual replicas and a drain that is graceful rather than a termination grace period, which rules out an abstraction that hides the node |
ADR-01 |
| Prefix cache tiers — device, host, node-local disk |
In-process management in the model server, spilling to host DRAM and then to the node's local NVMe temp disk, sized for the working set |
open source on Azure |
Any serving runtime with paged attention and host offload; a remote cache tier over RDMA where the interconnect justifies it |
Eviction has to degrade to a local disk read rather than to a full recompute, which is what holds the cold-prefix penalty at 180 ms |
ADR-02 |
| Stateless request plane — context assembly, routing, post-processing, filters |
Azure Container Apps, scaled on ordinary request signals, with filters in-process rather than as a network hop |
Microsoft Azure |
AWS Fargate or App Runner; Google Cloud Run; plain Kubernetes deployments alongside the GPU pools |
These tiers hold no state and must scale independently of the accelerator fleet; an in-process filter is the only way to fit an 8 ms p99 budget |
ADR-11 |
| Affinity map and policy cache |
Azure Cache for Redis, regional, holding (tenant, session) → replica with a session-length TTL and the read-through policy cache |
Microsoft Azure |
Amazon ElastiCache or MemoryDB; Google Memorystore; self-hosted Redis or Valkey in-cluster |
Placement lookup is on the critical path and must answer in single-digit milliseconds; the same store carries the 30-second policy cache so both share one failure mode |
ADR-01 |
| Policy, tenancy, seats, consent — the system of record |
Azure SQL Database, one write region with regional read replicas, plus an append-only audit store retained five years |
Microsoft Azure |
Amazon Aurora PostgreSQL; Google Cloud SQL or Spanner where multi-region writes are genuinely needed |
Policy must be strongly consistent and is read through a cache, so write latency matters far less than correctness and auditability |
ADR-10 |
| Model and decoding-config registry |
Azure Container Registry, geo-replicated, content-addressed by digest, with artifacts signed through Key Vault |
Microsoft Azure |
Amazon ECR with geo-replication; Google Artifact Registry; an OCI registry over object storage |
Weights are large, immutable and read in every region; addressing by digest is what makes a 10-minute rollback an alias move rather than a redeploy |
ADR-08 |
| Interaction telemetry transport |
Azure Event Hubs, two separate streams — code-bearing and non-code — with the code-bearing sink absent for zero-retention tenants |
Microsoft Azure |
Amazon Kinesis or MSK; Google Pub/Sub; self-hosted Kafka |
The split has to be in the transport rather than in a consumer, so that a zero-retention tenant has no configured sink rather than a filtered write |
ADR-10 |
| Quality aggregates and experiment analysis |
Azure Data Explorer, minute-grain aggregates by model digest, language, recipe version and experiment arm, 400-day retention |
Microsoft Azure |
Amazon Redshift or Athena over S3; Google BigQuery; ClickHouse self-hosted |
Retention and acceptance are computed over high-cardinality interaction events repeatedly and interactively; a columnar engine with fast time-series aggregation is the shape of the query |
ADR-07 |
| Identity, seats and short-lived credentials |
Microsoft Entra ID, OIDC device-code flow in the editor, 60-minute tokens refreshed by the plugin |
Microsoft Azure |
Okta or Auth0; AWS IAM Identity Center; Google Cloud Identity — in practice whatever the enterprise already runs |
The enterprises adopting this already operate their developer identity here, and seat revocation has to take effect in 60 seconds against the same directory |
ADR-05 |
| Retrieval indexes — per workspace, permission-free |
Self-operated lexical and symbol indexes on AKS, shards content-addressed in Blob Storage, rebuilt from the repository |
open source on Azure |
Azure AI Search or Amazon OpenSearch where index count is low; a managed vector store where semantic retrieval dominates |
Tens of thousands of per-workspace indexes exceed what a managed search service is priced or shaped for, and the indexes carry no permissions so they can be rebuilt freely |
ADR-12 |
| Observability and the operational signals that drive scaling |
Azure Monitor with Managed Prometheus and Managed Grafana; admission refusals and queue-wait at p99 as the GPU autoscaling signal |
Microsoft Azure |
Amazon CloudWatch with Managed Prometheus; Google Cloud Operations; self-hosted Prometheus with Grafana and Mimir |
The autoscaler must act on refusals and queue-wait rather than utilisation, which requires custom metrics to be first-class rather than an add-on |
ADR-04 |
| Keys, signing and tenant-scoped encryption |
Azure Key Vault, with Managed HSM for tenants requiring customer-managed keys and for model-artifact signing |
Microsoft Azure |
AWS KMS and CloudHSM; Google Cloud KMS; HashiCorp Vault with an HSM backend |
Signing the model artifacts is what makes the registry's immutability claim checkable, and customer-managed keys are a standing enterprise requirement |
ADR-10 |