AgentQ Limits
AgentQ enforces limits at multiple layers to ensure fair usage, predictable costs, and platform stability. This page documents every constraint with exact values.
Rate Limits
Rate limiting is applied per authenticated user using a token bucket algorithm.
| Limit | Default |
|---|---|
| Requests per minute | 10 |
| Concurrent streaming sessions | 2 |
Exceeding either limit returns HTTP 429 Too Many Requests. The budget is shared: the full-page chat, the floating chat, both dialog assistants, and direct calls to the chat API all draw on the same allowance. The AI description suggestions and the quality score recommendations are not counted against it.
Tokens and Usage
Every user message can trigger multiple LLM calls as the agent reasons, calls tools, and processes results. Token counts accumulate across all LLM calls within a single execution.
What consumes tokens in a single execution:
- System prompt. Loaded once per execution.
- Tool schemas. One short description per active tool.
- Conversation history. All prior messages, subject to compression for long sessions.
- Tool inputs. Parameters sent to each tool call.
- Tool outputs. Results from each tool, bounded by the per-page row ceilings described under Tool Result Size Management.
- LLM response. Text and reasoning generated on each step, capped at 4,000 tokens per individual LLM call.
Per-execution limits:
| Limit | Value |
|---|---|
| LLM API requests per execution | 500 |
| Input tokens per execution | 25,000,000 |
| Output tokens per execution | 25,000,000 |
| Total tokens per execution | 50,500,000 |
| Max tokens per individual LLM call | 4,000 |
These limits apply per user message (or per API call). Exceeding them returns an error indicating which limit was reached.
Timeouts
Timeouts are layered for defense-in-depth:
| Layer | Timeout | Description |
|---|---|---|
| Individual LLM API request | 120 seconds | Per call to the LLM provider |
| Agent execution | 300 seconds (5 min) | Full execution of a non-streaming request, including all tool calls |
| HTTP route handler | 360 seconds (6 min) | Outer safety net on non-streaming HTTP requests |
| Streaming inactivity watchdog | 1,800 seconds (30 min) | Ends a streaming chat session that has stopped producing output entirely |
If the agent execution timeout is reached, the agent stops and returns whatever it produced up to that point. For long-running tasks, break them into smaller sequential requests.
The streaming chat endpoint is not bounded by the 5-minute execution timeout. A long chat turn that is still streaming text or calling tools is never interrupted; the inactivity watchdog only ends a session that has produced no output or tool activity for the full idle window.
Tool Result Size Management
Tool results are kept bounded at the source: every tool that lists platform assets caps how many rows a single call may return, sized so that one listing cannot dominate the model's context window.
| Listing type | Rows per call (max) | Applies to |
|---|---|---|
| Lightweight listings | 250 | Datastores, containers, fields, global search |
| Detailed listings | 75 | Quality checks, templates, anomalies, operations, schedules, tags |
| Per-item detail listings | 100 | Comments, an anomaly's history, an anomaly's failed checks, quality scores |
These are page limits, not completeness limits. Results report the true total match count, and the datastore, container, and field listings accept an offset so AgentQ can work through the full set across several calls. Global search is the exception: it returns the top matches only, so a capped global search is narrowed with a more specific search term instead.
Paging a capped listing more than once does change how the answer is labeled: the reply is marked as a derived answer, and it carries a note that the result is not exhaustive whenever a source tool reported more results than it returned. Asking for an exhaustive pass over a large listing is also one of the analyses AgentQ confirms with you before running. See Answer Basis and Confirmation Before Best-Effort Analyses.
As an emergency backstop, an oversized result can still be trimmed (largest lists first, with a note appended so AgentQ knows data was cut off), but this is not applied in normal operation.
History truncation:
Tool calls and their results from turns older than the most recent 4 are removed from the model's context and replaced with a brief placeholder note. This prevents large outputs from earlier in the conversation from re-consuming tokens on every subsequent turn.
The saved chat history keeps a shortened copy of each tool output (up to 500 characters) so older sessions reload quickly.
Conversation Context and Compression
| Parameter | Value |
|---|---|
| Recent turns kept verbatim | 4 turns (user + assistant pairs) |
| LLM summary trigger | 10 messages |
| Summary length | Around 500 words |
Compression works in two stages:
- Older tool activity is dropped. Beyond the most recent 4 turns, tool calls and their results are removed and replaced with a brief placeholder note. Your messages and AgentQ's replies stay intact.
- LLM-generated summary. Once a session reaches 10 messages, the LLM generates a structured summary (around 500 words) stored with the session and included on all subsequent turns.
Starting a new session resets the context window entirely. This is the most reliable option for very long or unrelated workflows.
SQL Constraints
The query preview and the Computed Table query only accept SELECT statements and CTEs (WITH clauses). Computed Files, Computed Joins, and computed fields are built from transformation clauses rather than a free-form statement, so they do not take a query to screen.
Blocked statements:
| Statement | Blocked |
|---|---|
INSERT |
Yes |
UPDATE |
Yes |
DELETE |
Yes |
DROP |
Yes |
CREATE |
Yes |
ALTER |
Yes |
TRUNCATE |
Yes |
These are rejected before anything runs, regardless of what the LLM generates.
Non-deterministic function warnings:
AgentQ generates a warning (but does not block) when SQL contains non-deterministic functions such as NOW(), CURRENT_TIMESTAMP, RANDOM(), and similar. This is because computed assets are expected to produce consistent, reproducible results.
Query execution timeout: 30 seconds by default (range: 5–150 seconds).
Scope Constraints
Datastore types for computed assets:
| Asset Type | Supported Datastores |
|---|---|
| Computed Table | JDBC datastores (PostgreSQL, Snowflake, BigQuery, MySQL, etc.) |
| Computed File | DFS datastores (S3, ADLS, GCS) |
| Computed Join | Any combination of JDBC and/or DFS |
RBAC enforcement:
AgentQ operates within the requesting user's Qualytics permissions. Its tools cannot access datastores, containers, or fields that the user is not authorized to access, and cannot trigger operations (profile, scan, export) beyond the user's permission scope.
A few capabilities also require a platform role above Member, because they affect assets shared across the whole workspace. Creating, updating, or deleting check templates and tags, and listing or using notification and ticketing integrations, all require the Manager or Admin role. AgentQ declines those requests for anyone below that and explains why.
Turning AgentQ on and off:
AgentQ is controlled as a whole, through the AI provider configured under Settings > Integrations. Connecting a provider turns on every AgentQ surface at once: the full-page chat, the floating chat, the assistants inside the quality check and check template dialogs, the AI description suggestions on authoring forms, and the quality score recommendations. Removing the provider turns all of them off together. There is no setting that leaves one of those surfaces on while switching another off.
With no provider connected, the assistant panel in a check or template dialog does not disappear. When you create a check or template it opens on an AgentQ Not Configured message, with a Go to Integrations button beneath it. When you edit an existing check or template the panel stays closed until you open it, and shows the same message. The button is shown to everyone, but only the Admin and Manager roles can open Settings > Integrations; other roles are sent back to the datastore list.
What each surface can do is fixed by the surface itself rather than configured:
- The chat works with the full set of tools, always inside the requesting user's permissions.
- The Check Assistant and Template Assistant work with a reduced, read-only set: they look up rule types, datastores, containers, and fields, search this guide, and return a proposal. The Template Assistant can also list the templates that already exist. They never create, update, or delete anything, which is why a proposal has to be applied to the form and saved by you.
User Guide search:
AgentQ searches a copy of this User Guide that ships with your Qualytics release, so the answers always match the version you are running. It does not provide general web search. Each search returns up to 4 of the most relevant sections, with links to the guide hosted alongside your deployment.
Session ownership:
Users can only access their own chat sessions, and the Admin role is not an exception: an administrator's history lists their own conversations only, in the app and through the API alike.
Discovery and Listing Limits
These are the default limits for tool calls that list platform assets. They can be adjusted within the allowed range per call.
| Tool | Default Limit | Max |
|---|---|---|
list_datastores |
50 | 250 |
list_containers |
100 | 250 |
list_fields |
200 | 250 |
global_search |
20 | 250 |
| Detailed listings (checks, templates, anomalies, operations, schedules, tags) | varies | 75 |
| Comments, anomaly history, failed checks, quality scores | 20 | 100 |
| Containers fetched for suggestions | 5 | n/a |
Input Limits
| Parameter | Value |
|---|---|
| Paste threshold (triggers attachment mode) | 1,000 characters |
| Max file attachment size | 20 MB |
| Max file attachments per message | 1 |
Very short follow-ups like "yes" or "that one" are recognized as continuations of the conversation and skip the topic check.
Pastes of 1,000 characters or more into the input are captured as an attachment panel rather than inserted inline.
File attachments are accepted only when the active LLM provider supports file uploads. A provider can also be limited to a subset of the formats: the Qualytics-managed provider reads PDF, Word .docx, Excel .xlsx, and text-based files, but not the legacy .doc and .xls formats, PowerPoint, or images. See Attach a File for the supported formats and provider list.
Error Reference
| Error | Cause |
|---|---|
HTTP 429 Too Many Requests |
Exceeded 10 requests/min or 2 concurrent sessions |
Usage limit exceeded |
Hit 500 LLM requests, 25M input tokens, 25M output tokens, or 50.5M total tokens in a single execution |
Prompt execution timed out |
A non-streaming agent request ran for more than 5 minutes. The reply names the limit it passed |
HTTP 504 Gateway Timeout |
A non-streaming request was still running after 6 minutes. Try again, or split the request into smaller ones |
Query must be a SELECT statement or CTE / Query contains prohibited statement |
The query did not start with SELECT or WITH, or it contained INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, or TRUNCATE |
Unsupported file format |
The active LLM provider cannot read the attached file (typically a binary Office document sent to a model without binary support). The error arrives as an event in the chat stream, so the response itself is still HTTP 200. The message names the configured model and suggests converting the file to CSV or switching to a supported model. |
<Provider> cannot read this file |
The provider accepts attachments but not this format, which is the case for the legacy .doc and .xls formats, PowerPoint, and images on the Qualytics-managed provider. The file is turned away before any request reaches the provider, so no tokens are consumed. The message names the file and its format, lists the formats that do work, and suggests saving the file as .docx, .xlsx, CSV, or PDF, or pasting the content as text. Retrying the same file cannot help, so no retry is offered. In the chat this error is rarely seen, because the app filters the file picker to the formats the provider accepts and refuses a dragged-in file before sending it. |
HTTP 400 Bad Request |
When calling the agent-chat API directly, the request body was empty, not valid JSON, or not a JSON object. Send a valid JSON object. |
HTTP 422 Unprocessable Content |
The request body was valid JSON but failed schema validation (for example, wrong field types, missing required fields, or an unreachable provider during LLM configuration). The response body lists which field(s) failed. |