Skip to main content

Overview

Warp is an agent built into the Bifrost dashboard. You ask it a question about your deployment, such as “Who are my top 5 users by cost this week?”, and it answers from your own data. It reads that data through a fixed set of read-only tools: request logs, metrics, usage rankings, model performance, request traces, and virtual key limits. Warp runs on a model you choose, separate from the providers your gateway serves. Its own model calls go through Bifrost like any other request. They are logged, priced, and governed under the app name Warp, so you can always see what Warp costs. Key features:
  • Answers from live telemetry - Warp looks up costs, error rates, latency percentiles, and usage rankings, so the numbers come from your logs.
  • Semantic log search - Warp finds conversations by meaning (“requests where users asked about refunds”) using an embedding index of your logs.
  • Inline charts and log links - Answers can include line and bar charts and links that open the matching rows on the Logs page.
  • Clarifying questions - When a question is ambiguous, Warp asks a multiple-choice question instead of guessing.
  • Read-only and scoped - Warp cannot change configuration. It reads only the data the person asking is allowed to see.
Warp is in alpha. Its settings and behavior may change between releases.

Requirements

Warp answers questions only when all of the following are in place:

Enable the feature flag

The warp flag is the master switch. While it is off, every /api/warp route returns 404, new logs are not indexed for Warp, and the dashboard hides the launcher, chat panel, and settings page. Turning the flag on does not make Warp answer anything yet. You still need to configure it.
  1. Go to Settings > Feature Flags.
  2. Turn on Warp.
If the flag is set in config.json, it shows as locked here and can only be changed in the file.

Configure Warp

Warp’s own settings are stored in the config store and managed through the Web UI or API. There is no config.json section for them.
Warp settings page
  1. Go to Settings > Warp.
  2. Under Models, choose the Default model: a Provider, a Model, and an API key. Any key load-balances across the provider’s keys. Pin a specific key to keep Warp’s spend separate from tenant traffic.
  3. Optionally, click Add model to offer more models in the chat panel’s model switcher.
  4. Adjust Behavior and limits if needed (see Settings reference).
  5. Under Conversation search, choose the Embedding provider, Embedding model, Embedding API key, and Embedding dimension. The dimension must match what the embedding model returns, for example 1536 for text-embedding-3-small.
  6. Turn on Enable Warp at the top of the page.
  7. Click Save Changes.
The Enable Warp switch is disabled until a vector store is connected. If every field is filled in but the switch is off, Warp stays hidden from the dashboard.

Settings reference


Semantic search works over an embedding index of your logs, stored in the vector store under log_vector_store_namespace.

What gets indexed

A log is indexed when all of these are true:
  • It is a chat completion or Responses API request, streaming or not.
  • It has finished: its status is success, error, or cancelled.
  • Its content is logged. Logs with content logging turned off are skipped.
  • It is not Warp’s own traffic.
For each log, Warp embeds the user input and the assistant output, up to 16 KB of text. Alongside the vector it stores filterable metadata: provider, model, status, latency, cost, token counts, app, virtual key, user, team, customer, and business unit.

Live indexing

Once Warp is configured, each new log is embedded in the background as it is written. If logs arrive faster than they can be embedded, the queue fills and further logs are dropped from the index with a warning in the server log. They stay in the logs store, and a backfill can add them to the index later.

Backfill

Logs written before Warp was configured, or dropped during a burst, are added with a backfill.
Warp backfill embeddings section
  1. Go to Settings > Warp > Backfill embeddings.
  2. Choose a date range. The default is the last 7 days.
  3. Click Start backfill.
Save any configuration changes first: the button is disabled while the page has unsaved changes. Progress shows in the section, with indexed, skipped, and failed counts and the embedding spend so far. It also appears as Indexing logs for Warp under Background jobs.A cancelled or interrupted backfill can be continued with Resume backfill, or discarded with Start fresh instead.
Only one backfill runs at a time. Starting a second one returns 409 with the running job’s status. A backfill stops on its own after 100 consecutive embedding failures.

Change the embedding model

Vectors from different embedding models cannot be compared. When you change the embedding provider, model, or dimension, you must also choose a new Log embedding namespace. Bifrost rejects the save otherwise. The new namespace starts empty, so run a backfill to fill it. You cannot change the embedding configuration while a backfill is running. Cancel it first.

Use Warp

Warp chat panel Open Warp from Ask Warp in the top bar, or press ⌘ I (Ctrl I on Windows and Linux). On wide screens it opens as a resizable panel docked on the right. On narrow screens it opens full width. Some questions to start with:
  • “What did I spend on each provider in the last 7 days?”
  • “Which model had the worst p99 latency yesterday?”
  • “Who are my top 5 users by cost this week?”
  • “Show me failed requests in the last 24 hours”
While Warp works, the panel shows each tool it calls and how long the call took. You can type follow-up questions while an answer is still streaming. They are sent in order. In the panel:
  • Model switcher - Under the input, choose any model an administrator exposed in Models. The default is marked Default. Your choice is remembered in the browser.
  • Clarifying questions - When Warp needs to know something, such as which team or time window you mean, it shows a Question card with options. Pick one with the mouse or the arrow keys, or type your own answer when the card allows it. Skip tells Warp to use its best judgement and say what it assumed.
  • Charts - Answers can include line or bar charts of requests, errors, error rate, cost, tokens, or latency. Each chart has an Open in Logs link to the underlying rows.
  • Log links - Links in an answer open the Logs page with the matching filters applied. Warp only shows links built from queries it actually ran.
  • New chat - Click New chat in the header, or type /clear.
  • Chat history - Click Chat history to reopen or delete earlier conversations. Each one lists its token usage and cost.
If Warp is off or not configured, the panel says so and links to the settings page.
When Warp runs out of iterations before it finishes researching, it still answers with what it found and marks the answer as partial. Raise Max iterations if this happens often.

What Warp can look up

Warp uses only these read-only tools: Warp has no tool that changes configuration, sends requests to providers on your behalf, or reads data outside the logs store and governance settings.

Access and scoping

Who can use Warp

Without authentication, anyone who can open the dashboard can use Warp. With RBAC (Enterprise), access is split across two resources: Saving the configuration and running a backfill require an administrator: the local admin, or (with RBAC) a role with Update on Warp. Other callers get 403. When dashboard authentication is turned off, every caller counts as the local admin.

What data Warp reads

Every tool call runs as the person asking. With Enterprise row-level access control, Warp sees exactly the logs that person could see on the Logs page, and semantic search results are filtered the same way. When a question does not say whose traffic it means, Warp chooses a default:
  • A signed-in user with restricted access - their own traffic.
  • An unrestricted caller, such as an administrator - the whole deployment.
  • No user identity, and several teams, customers, or business units to choose from - Warp asks which one you mean.
Naming a scope in the question (“for the payments team”) always overrides the default.

Cost and governance

Warp’s model calls go through the full Bifrost pipeline, so they appear on the Logs page with the app name Warp and the user agent bifrost-warp/1. Calls from one conversation share a session ID equal to the conversation ID. MCP tools are never attached to Warp’s calls. Warp’s traffic is subject to the same governance as any other request. If a budget, rate limit, or model restriction applies to the person asking, Warp reports that its model call was refused and why (budget_exceeded, rate_limited, or model_blocked). Embedding calls made while indexing skip the plugin pipeline, so they do not appear on the Logs page and are not subject to governance. A backfill reports the embedding tokens and cost it used in its status. Warp’s own requests are never added to its log index, so asking about Warp does not pollute semantic search.

Chat history

Conversations are saved in the logs store, so history requires a logs store that supports it. Without one, the history routes are not registered and the panel only keeps the current chat.
  • Ownership - Each conversation belongs to the user who started it. On a deployment without authentication, all conversations share one owner and everyone sees the same history.
  • Retention - An hourly sweep deletes conversations whose last turn is older than Chat history retention (days), 30 by default.
  • Cap - Each owner keeps at most 100 conversations. Past that, the oldest are deleted.
  • Titles - A conversation is titled with its first question, up to 80 characters.
Through the API, GET /api/warp/conversations lists your conversations, GET /api/warp/conversations/{id} returns one with its messages, and DELETE /api/warp/conversations/{id} deletes one.

Chat API

The dashboard talks to Warp through POST /api/warp/chat, which you can also call directly:
A streamed response emits these events: start, delta (answer text), tool_call_start and tool_call_end, question (a clarifying question), error, and done. The done event carries the conversation_id, the finish_reason (partial when Warp ran out of iterations), the iteration count, token usage, and the model and provider used. See the Warp API reference for full request and response schemas.

Troubleshooting

Every /api/warp route returns 404

Cause: The warp feature flag is off. It is off by default in Enterprise. Fix: Enable the feature flag.

The Ask Warp button is missing

Cause: The feature flag is off, the deployment has no logs store, or (with RBAC) you lack View on Warp or WarpSession. Fix: Check each in turn. Without a logs store, Warp has nothing to read and stays hidden.

Chat returns 503

The response body has a reason field:

The Enable Warp switch is disabled

Cause: No vector store is connected. Fix: Configure a vector store. The settings page shows the connection status under Conversation search.

Saving fails with “namespace must change”

Cause: You changed the embedding provider, model, or dimension but kept the old namespace. Fix: Enter a new Log embedding namespace, save, then run a backfill to fill it.

Saving or starting a backfill returns 409

Cause: A backfill is already running. Fix: Wait for it to finish, or cancel it from the settings page or Background jobs.

Semantic search misses recent conversations

Cause: Logs were dropped from the indexing queue during a burst, the logs had content logging turned off, or they were written before Warp was configured. Fix: Run a backfill over the missing window. Logs without content cannot be indexed.

Next steps