Overview
Iris Control sits between your applications and your LLM providers. Your apps call one OpenAI-compatible endpoint, and Iris Control applies your policy to every call:- Routing and failover: each use case has a primary model and fallbacks. If a provider errors or times out, the next model answers.
- Data scoping: retrieval is limited to the call’s product or tenant.
- Tool limits: each workflow can call only the tools you allow.
- Grounding checks: answers are checked against approved sources. Unsupported answers are flagged or replaced with your handoff message.
- Call log and evals: every prompt, answer, model, and policy decision is logged, and AutoEval grades each output.
How it works
- Your app sends an OpenAI-compatible request. The
modelfield names a use case (for examplesupport-answers), not a model. - Iris Control applies that use case’s policy: scoped retrieval, allowed tools, and the model chain.
- The primary model answers. If its provider fails, the next model in the chain is tried.
- If the use case has grounding checks on, the answer is checked.
- The answer comes back in the standard OpenAI format, with headers showing which model answered and what the policy did. The call is written to the call log.
Integration options
Start with the lightest option. You can move down the table later without redoing setup.Architecture
- Server side only. Call Iris Control from your backend. There is no client-side SDK, and API keys must never ship in client code.
- No SDK to install. The endpoint option uses your existing OpenAI client library. Log import and sample evals need no code.
- Latency. Log import and sample evals add none. The endpoint option adds one network hop plus any policy steps you turn on. Retrieval and grounding checks add the most, so turn them on per use case.
- Deployment. Hosted, or inside your own VPC when prompts and logs can’t leave your environment. Prompts and logs are redacted for PII and secrets before they are stored.
Quickstart
Step 1: Get an API key
Your Iris Control point of contact provides your API key. Use it from your backend only.Step 2: Add your model providers
In the Iris Control dashboard, open Providers and add the ones you use: OpenAI, Anthropic, Google Gemini, Azure OpenAI, AWS Bedrock, or a self-hosted OpenAI-compatible model. Provider keys are stored encrypted and never returned by the API.Step 3: Create a use case
Open Use cases and create one per LLM feature, such assupport-answers or invoice-agent. Set its model chain and, as needed, data scoping, tools, and grounding checks. See Use case policies.
Step 4: Point your client at Iris Control
In your existing OpenAI client, change the base URL and API key. Setmodel to the use case name.
stream: true), tool calling, and structured outputs work as they do with the OpenAI API.
Request headers
Response headers
Use case policies
Each use case has one policy. Edit it in the dashboard, or export and import it as YAML.Models and failover
models.chain lists models in order. Iris Control calls the first. On a provider error, a rate limit, or a timeout longer than attempt_timeout_seconds, it retries on the next one. Each attempt is logged with its model, outcome, and latency.
To change models, edit the chain. Your app code doesn’t change, because it only names the use case.
Data scoping
Whenretrieval.enabled is on, Iris Control searches your connected knowledge and adds matching passages to the request. Knowledge comes from your data sources, such as help centers, Confluence, websites, and uploaded content.
retrieval.scope_by sets which headers limit the search:
product: only knowledge tagged with theX-Iris-Productvalue is searched. Articles can belong to several products.tenant: only knowledge tagged with theX-Iris-Tenantvalue is searched.
retrieval.enabled off and send your passages in iris.sources. Iris Control uses them for the grounding check:
Tool limits
tools.workflows maps each workflow to the tools it may call. For a request with X-Iris-Workflow:
- Tools not on the workflow’s list are removed from the request before the model sees them.
- Calls to tools not on the list are removed from the response.
X-Iris-Tools-Removed and in the call log. A request without X-Iris-Workflow keeps all its tools.
Grounding checks
The grounding check runs after the model answers, against the call’s sources (retrieved by Iris Control or sent iniris.sources):
- Link check: every link in the answer must point to a source. Others are reported as unapproved.
- Claim check: a judge model checks each claim against the sources and returns a verdict, a grounding score from 0 to 5, and any unsupported claims.
grounding.mode sets what happens when an answer fails either check:
Grounding check API
To check answers produced outside Iris Control, call the grounding check directly. Send up to 5 sources per request.Call log
Every call appears under Call log in the dashboard, with:- The use case, product, tenant, workflow, and your
X-Iris-Trace-Id - Each model attempt, with its outcome and latency
- The prompt, the retrieved or supplied sources, and the answer
- Tools removed by policy
- The grounding check result
logging.retention_days, or turn off logging.store_prompts to keep only metadata.
AutoEval
AutoEval grades call log outputs for correctness against their own prompts and against rules you write. You can replay the same inputs on other models and compare grades, cost, and latency before changing a model chain. It reads the call log, so it adds nothing to the request path. See AutoEval.Errors
Errors use the OpenAI error format.
A blocked grounding check is not an error: it returns
200 with the handoff message and X-Iris-Grounding: blocked.
Questions? Contact us at contact@irisagent.com or book an Iris Control demo.