Skip to main content

insideai

Python client for the InsideAI API.

pip install insideai

Quickstart

import os

from insideai import InsideAI, create_chat, wait_for_chat

iai = InsideAI(api_key=os.environ["INSIDEAI_API_KEY"])

chat = create_chat(iai, "Summarize last quarter's findings.")
print(wait_for_chat(iai, chat["id"])["answer_text"])

InsideAI(...) holds your key, base URL and a pooled HTTP session. Build it once and pass it as the first argument to everything else.

InsideAI answers asynchronously, so create_chat returns straight away. wait_for_chat polls for you; call get_chat yourself if you would rather drive the loop (a job queue, a webhook, a UI that shows progress).

Examples

Complete, runnable scripts ship in the source distribution under examples/, and are the fastest way to see the shape of an integration:

Example Shows
examples/ask_a_question.py The smallest end-to-end call: ask, wait, print.
examples/act_as_a_user.py Asking on behalf of one of your own users, and confirming act-as took effect before you do.
examples/run_a_library_prompt.py Looking a prompt up by safe_name so its text stays editable in InsideAI.
examples/continue_a_conversation.py Follow-up questions in one thread.
examples/embed_session_endpoint.py The one backend endpoint embedded chat needs — and why it mints for the signed-in user only.
export INSIDEAI_API_KEY=iaiak_…
python examples/ask_a_question.py "What changed this week?"

API keys

Keys never expire and are revoked from the InsideAI admin UI. They come in two kinds:

  • Client-wide — acts as your organization's API service account, and may act as any member of your org by passing act_as=<their email>.
  • User-specific — always acts as one person. Passing act_as to one of these is an error rather than a silent no-op, so a misconfigured integration fails loudly.
me(iai)  # the service account
me(iai, act_as="alice@example.com")  # Alice, with Alice's permissions

Acting as someone means exactly that: their org, their permissions, their row-level access, and anything created shows up in their own InsideAI history. You can only act as an active member of the key's organization.

Never send a key to a browser. For embedded chat, mint a one-time code server-side with embed_session and hand that to the frontend — see examples/embed_session_endpoint.py and @cpcyber/insideai.

Functions

Every function takes the client first and an optional act_as=.

Function Returns
me(iai) {"email", "display_name", "client", "acting_as", "key"}
prompts(iai, safe_name=None) Visible prompt-library prompts, fully paged. safe_name is the stable slug to key config off, and filtering on it returns at most one.
create_chat(iai, ask, conversation=None, project=None) The new chat. InsideAI answers asynchronously — poll it. Omit conversation to start a new thread.
get_chat(iai, chat_id) {"id", "ask", "answer_text", "answer_blocks", "done", "ts_asked", "ts_answered", "conversation", "eta"}
wait_for_chat(iai, chat_id, interval=2, timeout=120) The same chat once done. Raises InsideAITimeoutError rather than handing back a half-answered one.
chats(iai, conversation=None) Every chat the acting user can see.
embed_session(iai, email=None) {"enabled", "code", "chat_url", "mini_url", "expires_in"} for mounting embedded chat.

answer_text is the answer flattened to plain text. answer_blocks is the original display-block list ({display, params}) if you want to render charts and images yourself.

Errors

InsideAIError for anything that isn't a 2xx, carrying .status and .payload. Two subclasses are worth catching on their own: InsideAIAuthError for 401/403 — a rejected key never becomes valid on a retry — and InsideAITimeoutError when wait_for_chat gives up on a chat that is still being answered. GETs retry twice on connection failures and 502/503/504; nothing else is retried, since a 4xx is an answer.

from insideai import InsideAIAuthError, InsideAIError

try:
    chat = create_chat(iai, "hello")
except InsideAIAuthError:
    ...  # key revoked, or acting as someone you may not
except InsideAIError as exc:
    log.warning("InsideAI %s: %s", exc.status, exc.payload)

Other environments

base_url defaults to production. Point it elsewhere if InsideAI gave you a different endpoint:

iai = InsideAI(api_key=..., base_url="https://your-insideai-endpoint/")

Layout

Import everything from the package root — from insideai import create_chat — which is the surface this package keeps stable. Underneath:

Module What it owns
client.py InsideAI(): the key, the base URL, the pooled session and its retry policy.
api.py Everything that knows about HTTP — URL building, the act-as header, pagination, turning a failure into an exception. The endpoint modules never touch requests.
endpoints/ One module per /api/v1/ resource: chats.py, prompts.py, identity.py, embed.py. Each knows its path and its arguments, nothing more.
errors.py The exception classes, and the mapping from a status code onto one.
constants.py The strings both halves share: default base URL, API prefix, auth scheme, act-as header.

Metadata

Release files for insideai 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for insideai 0.2.0
File Size Uploaded Provenance
insideai-0.2.0.tar.gz 13.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for insideai 0.2.0
File Interpreter ABI Platform
insideai-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 24.9 kB

Release files / insideai-0.2.0.tar.gz

Download URL insideai-0.2.0.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c05858d2bbd375cd9ef0de404317503f2f2d9b13ba930e78957a01f53a3ccbd8
BLAKE2b-256 checksum
How to use checksums
185b3b3ef1513724234ac89b8ddbd0097a3894fab622a9862a7ea016a49abac8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Release files / insideai-0.2.0-py3-none-any.whl

Download URL insideai-0.2.0-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
996eaaea88a4d8e5fd8fc8a2cc5341928a411636a30d08583becf3ef6fb09850
BLAKE2b-256 checksum
How to use checksums
05521193dabc6a1ff27dc9ab7599cf1e6c9cab3c4ea058747d2c709acb9145cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.15

Security for insideai 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page