Architecture

Public architecture overview

Ten architectural surfaces — multi-tenant isolation, RAG pipeline, LLM provider abstraction, channel adapters, streaming response, sub-processor data flow, deployment topology, disaster recovery, eval pipeline and observability. Engineering-side trust signal pairing with security controls, compliance posture and the sub-processor list.

Multi-tenant data isolation

Every tenant gets a strict ClientId partition key applied at every storage layer. SQL Server tables (SLAtech.Db) and our vector-search collections are keyed by ClientId with row-level and collection-level filters enforced at the query layer. The repository pattern rejects any query that omits ClientId at compile time via a static analyzer rule (SLATECH001). Sentry projects, audit logs and blob containers all maintain the same partition discipline. Cross-tenant data is a structural impossibility, not a runtime check.

RAG retrieval pipeline

Ingest → chunk → embed → upsert: documents (PDF, DOCX, scraped HTML, FAQ pairs) are chunked at 200-500 tokens with 50-token overlap. Chunks embedded via our embedding model (1536-dimension vectors) and upserted into our vector-search index with metadata (ClientId, sourceUrl, chunkIndex). Query path: question embedded, top-K cosine-similarity search filtered by ClientId, ScoreThreshold 0.5 default. Retrieved chunks pass to the LLM with structured citation metadata so the response carries a Snippet per source. Reconciliation runs nightly as a Worker BackgroundService.

LLM provider abstraction

All LLM calls go through ILlmProvider — a thin abstraction over multiple language-model providers (a primary provider, an Enterprise-tier alternative for failover, and an optional re-ranking provider). Provider selection per tenant via configuration; failover routes automatically on rate-limit or 5xx. Token usage and cost report per-call in the response payload so that tenants can monitor spend in real time. Provider switching doesn't require customer-side migration — abstraction insulates application code.

Channel adapter pattern

Each channel (web widget, Telegram, WhatsApp Business, Instagram DM, email) implements IChannelAdapter — a common contract that translates channel-native message envelopes to a unified Conversation domain model. Adapter pattern lets the core query pipeline run channel-agnostic; per-channel formatting (Telegram inline keyboards, WhatsApp template messages) lives within the adapter. Adding a channel doesn't touch the query pipeline.

Streaming response pipeline

SSE-based streaming via /v1/query/ask-stream endpoint. First event is sources-early — emits citation metadata before LLM streaming starts (so widgets render "according to" hover-cards while the answer is still streaming). Subsequent events are token chunks; final event is done with aggregate metadata (total tokens, total cost, conversation log ID). Cuts perceived latency by ~70% vs synchronous response.

Sub-processor data flow

Customer query → Kestrel ingress → SLAtech.Api → embedding call to our model provider (US, SCC 2021/914) → vector search in our retrieval engine → LLM call to our language-model provider with retrieved chunks → response to Kestrel → SSE back to widget. Sentry receives sanitised error envelopes (PII scrubbed pre-emission). SendGrid handles transactional email (US, SCC 2021/914). Cloudflare WAF and CDN edge globally. Full sub-processor list at /en/sub-processors/.

Deployment topology

Azure App Service (Linux) for SLAtech.Api, SLAtech.Web, SLAtech.AdminUI, SLAtech.Business + 8 vertical hubs. Azure SQL Database for relational store with daily backup and 24-hour point-in-time recovery. Our vector-search engine on Azure VM with per-tenant collections. Azure Cache for Redis for session + rate-limit token bucket. Azure Storage for document blobs. Cloudflare in front for WAF / DDoS mitigation / CDN. GitHub Actions workflows trigger production deploys on push to the production branch.

Disaster recovery posture

RTO 4 hours, RPO 1 hour. Daily Azure SQL backups with 35-day retention; point-in-time recovery within the last 24 hours. Our vector-search engine snapshotted nightly to Azure Storage. Multi-region failover for high availability. DR runbook tested quarterly with simulated region failure. Status page at status.slatech.ai surfaces real-time uptime + last 90-day incident log.

Eval pipeline

Per-vertical eval harness runs nightly against a sealed 200-question test set (held out of training/tuning loops). LLM-as-Judge scores factuality, hallucination and confidence per response. Aggregate per-vertical scores surface to the public scoreboard at /en/eval/. Score regressions ≥3 points trigger a manual triage alert. The eval harness itself is open-source and downloadable as a repro template — buyers can run it against their own SLAtech tenant.

Observability stack

Sentry per backend service with PII scrubbing pre-emission. Synthetic transaction monitoring at 5-minute cadence covering 12 critical user journeys. OpenTelemetry-instrumented spans for query pipeline timings. Per-tenant audit log exportable on the Enterprise tier. Real-time uptime dashboard at status.slatech.ai surfaces 12 metric groups including p95 query latency, retrieval recall and channel-specific error rates.

Need deeper architecture diagrams?

Enterprise architecture deck and per-component sequence diagrams available under NDA.

Buyer evaluation tools

Four self-serve tools for evaluating SLAtech (or any AI chatbot vendor) without a sales call:

Eval scoreboard 200-question per-vertical methodology TCO calculator Annual savings + payback period Vendor compare-tool Filter 16 vendors by 6 criteria Vendor checklist 30 procurement due-diligence questions