Skip to main content

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__Token that 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 add QUIX_TOKEN as a secret. Missing vars raise MissingConfigError naming 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 in result.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_id feeds resume=. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quix_ai_sdk-0.2.0.tar.gz (24.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quix_ai_sdk-0.2.0-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

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

Hashes for quix_ai_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e43d49c76e99d165fb8645a21a3c3f87147bd5348e74e69ce8ea9a8c600e5869
MD5 42ca2744c397823623601879c1b68f84
BLAKE2b-256 1d52858ea749792b75ac9d273ed47cb740f2a891326796036da6c30a9b5dc798

See more details on using hashes here.

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

Hashes for quix_ai_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 60986cc091833eaa21a430f8974102a8b78215be3c80d635938de90afa0ed9f6
MD5 a94c864978a917e31088083deefbfffb
BLAKE2b-256 1b6afee2bd691f131bbc486fd7c4104f2251a123eb783ebfebf229decd4c492a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page