The Widget Monitor at
/settings/system/widget-monitor (super-admin only) is the
error counterpart to the hot-path
latency dashboard. Latency answers “why is the bot slow?”; the
Widget Monitor answers “what's breaking?” — stream failures,
LLM-provider outages, and visitor-reported freezes, all in one feed you can
triage and mark resolved as you fix each one.
Each row is one failure or anomaly on the visitor path:
Filter by time window (24h / 7d / 30d), type, severity, and open-vs-resolved. The banner at the top gives a plain-English verdict (“provider outage in progress…”, “healthy with hiccups…”, “all clear…”) so you can read the state at a glance. Click Resolve on a row once you've dealt with it — or Reopen if it comes back.
The reliability backbone behind the monitor is runtime provider failover. Pitchbar can be configured with more than one LLM provider (Cloudflare Workers AI, OpenAI, OpenRouter). When two or more are configured, every visitor turn runs through a failover chain: if the primary provider is slow, returns a 5xx, is rate-limited (429), or has run out of credits, Pitchbar transparently retries the next provider — same turn, before the visitor sees an error.
OPENAI_API_KEY or OPENROUTER_API_KEY alongside
your Cloudflare credentials) so a single outage becomes invisible to
visitors instead of fatal.
Blocking provider calls (tool decisions, embeddings) are capped well below the streaming budget so a hung provider is abandoned quickly and failover reaches the next one fast, rather than waiting out a full minute. Streaming keeps a generous budget because a legitimate long answer holds the connection open; a 5-second connect cap still detects a dead host immediately.
“Client freeze” events come from the widget's own stall detector. If you see them clustered, cross-reference the hot-path latency monitor — a freeze is usually a turn that genuinely took longer than the widget's patience (35s without a single byte), which points at provider responsiveness or an overloaded tool loop rather than a hard crash.