Prompt in, analysis out — Python SDK for Quix.AI data-analysis runs
Project description
quix-ai-sdk
Prompt in, analysis out. One method launches a Quix.AI agent session: a sandboxed sub-agent writes fresh analysis code for your prompt, queries the lakehouse, and streams conclusions back.
from quix_ai_sdk import run
result = run("Compare sector times between the two fastest laps of the last session")
print(result) # the agent's conclusions
result.activities # typed log: tools called, code generated, queries run
result.session_id # resume handle + audit id
Install
uv add quix-ai-sdk # or: pip install quix-ai-sdk
Configuration (env only)
| variable | meaning |
|---|---|
Quix__Portal__Api |
portal base URL |
Quix__Workspace__Id |
workspace scope for the analysis sandbox |
QUIX_TOKEN |
a user PAT — see below |
QUIX_TOKEN must be a user PAT. Quix.AI sessions are user-owned — opening one requires a real user's PAT. The
Quix__Sdk__Tokenthat deployments auto-inject is a service token and cannot run Quix.AI sessions. Deployments that run analyses (e.g. automated post-race summaries) must therefore addQUIX_TOKENas a secret. Missing vars raiseMissingConfigErrornaming the variable.
Acting as a user
Web apps forwarding a logged-in user's token pass token= to run() or stream():
result = run("Summarize", token=request.user.quix_token)
The env QUIX_TOKEN is the default; token= is the only per-call override.
When a real user triggers the run, pass their token — fall back to env
QUIX_TOKEN only for headless/automated runs (attribution and permissions
follow the token). Never log the token value or call args containing it.
Streaming
import asyncio
from quix_ai_sdk import stream, TextChunk, Done
async def main():
async for event in stream("Find anomalies in brake temperature"):
if isinstance(event, TextChunk):
print(event.text, end="")
elif isinstance(event, Done):
print(f"\nsession: {event.session_id}")
asyncio.run(main())
Distilled events: TextChunk, ToolCalled, CodeGenerated, QueryRan,
Progress, Failed, Done. Pass raw=True for wire-level SSE dicts.
Follow-ups
first = run("Summarize the session")
more = run("Expand on the tyre wear point", resume=first.session_id)
Provisioning (0.2): agents / knowledge / mcp
One-time setup of the AI resources your analyses run on. These live in
submodules (agents, knowledge, mcp), not in the root namespace. Every
write needs an org-admin user PAT (token= per call or env QUIX_TOKEN).
from quix_ai_sdk import agents, runs
agent_id = agents.ensure_analysis_agent(token=ORG_ADMIN_PAT) # once per org
result = runs.run(f"Analyze test {test_id} ...", agent_id=agent_id)
ensure_analysis_agent() creates (or updates) an org agent with a curated,
versioned system prompt shipped in-package: lakehouse query discipline, the
delegate_task sandbox workflow, honest handling of missing data. Append
app-specific rules with extra_prompt=. All ensure_* functions are
idempotent and support dry_run=True previews. Full guide: docs/admin.md.
Failure model
- Agent outcome → in the result:
result.status == "failed", detail inresult.error. Never raises. - Infrastructure → typed exceptions under
QuixAIError:MissingConfigError,AuthError,RunTimeout,StreamInterrupted. - A dropped stream cancels the run server-side (platform behavior). The
session survives:
StreamInterrupted.session_idfeedsresume=. The SDK never auto-retries — a retried run duplicates cost and side effects.
Logging
The SDK logs to stdlib logging under the quix_ai_sdk logger and never
configures handlers. Suggested app-side setup:
import logging
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)-8s] [%(name)s] %(message)s"))
logging.getLogger("quix_ai_sdk").setLevel(logging.INFO)
logging.getLogger("quix_ai_sdk").addHandler(handler)
More runnable examples in examples/. Module docs in docs/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quix_ai_sdk-0.2.0.tar.gz.
File metadata
- Download URL: quix_ai_sdk-0.2.0.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e43d49c76e99d165fb8645a21a3c3f87147bd5348e74e69ce8ea9a8c600e5869
|
|
| MD5 |
42ca2744c397823623601879c1b68f84
|
|
| BLAKE2b-256 |
1d52858ea749792b75ac9d273ed47cb740f2a891326796036da6c30a9b5dc798
|
File details
Details for the file quix_ai_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: quix_ai_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 29.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60986cc091833eaa21a430f8974102a8b78215be3c80d635938de90afa0ed9f6
|
|
| MD5 |
a94c864978a917e31088083deefbfffb
|
|
| BLAKE2b-256 |
1b6afee2bd691f131bbc486fd7c4104f2251a123eb783ebfebf229decd4c492a
|