The platform

What both products stand on

AI Answers reads your pages. Safety Vision reads your cameras. From the ingest queue down, they are the same system — the same tenancy, the same tokens, the same insistence on evidence.

Ingestion and indexing

Everything both products know starts here. For AI Answers that is your website, rendered with Playwright so client-side content is read like any other page. For Safety Vision it is the alarm frames your VMS already writes, read from your own bucket. Neither pipeline holds work in memory — a deploy can kill the process mid-run and the queue survives it.

  • JavaScript rendering, tables and PDFs preserved
  • Fingerprinted re-crawls: changed pages re-embedded, deleted pages removed
  • CMS ping to re-index a single page on publish
  • Frames read cross-account by role or key pair
re-crawl · run 41ok
/services
changed → re-embedded
/faq
304 → skipped
/pricing-2023
404 → removed
/blog/*
3 new → indexed

Control and guardrails

Neither product is allowed to be a black box you hope behaves. Answers pass forty-three guardrail rules, four of them locked. Competitor-only questions are refused before a model is called at all. On the safety side, zones decide which rules apply where, and advisory mode lets you watch a rule before it starts alerting anyone.

  • Per-page rules to exclude or boost any URL
  • Pinned answers for wording you must control exactly
  • Confidence floor: hand over rather than guess
  • Advisory mode and grace zones for safety rules
guardrailsok
competitor_only
refuse before LLM
brand_negative
blocked on output
confidence < floor
hand over
pinned_answer
verbatim

Measurement

Quality that is not measured drifts. Upload your own prompt sheet and grade the whole set, then diff this run against the last to see which prompts moved and why. Safety incidents are counted only once a reviewer has closed them, and precision is always reported next to coverage so a flattering number cannot hide a detector that stopped firing.

  • Prompt suites imported from xlsx or csv
  • Run-versus-run diff with per-prompt movement
  • Reviewer agreement tracked as its own measure
  • Pipeline health and failures on the same screen
eval run · 157 promptsok
failures
22 → 3
graded runs
8
counting rule
closed incidents only
precision
reported with coverage

Integration

One script tag before the closing body tag installs the widget. Everything the widget does is also available over the public API with per-site tokens, domain whitelists and a scope boundary that is actually enforced — a chat key cannot post safety alarms, and one site's token cannot write into another's.

  • Per-website and per-site API tokens, revealed once
  • Domain whitelists per token
  • Webhooks on incident opened and resolved
  • Integration docs generated from your own configuration
api · v1ok
POST /v1/query
scope: chat
POST /v1/safety/alarms
scope: safety
POST /v1/pages/refresh
re-index one page
wrong scope
wrong_key_scope

Tenancy and security

Each client gets its own database and its own vector collection — answers, evidence images and incidents are never stored alongside another client's. Products are enabled per client with separate flags, so buying one does not expose the other. Bring your own model key and the usage lands on your bill instead of ours.

  • Database and vector collection per client
  • Roles, co-owners and invites, re-read on every request
  • Per-product feature flags
  • Your own OpenAI, Anthropic, Gemini, Azure or Groq key
tenantok
database
one per client
vector collection
one per client
features.aiChat
on
features.safetyVision
per contract

Start with the product you need first

They are flagged and billed separately. Adding the second one later costs you a setting, not a migration.