Skip to main content

Official Python SDK for the Ciralgo Platform API

Project description

Ciralgo Python SDK

Official Python SDK for the Ciralgo Platform API.

Version: 1.1.0 (mirrors openapi.json info.version).

Install

pip install ciralgo

Requires Python 3.9+.

Quickstart

from ciralgo import Client

client = Client(api_key="sk-cg-...")  # or set CIRALGO_API_KEY in your env

response = client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Say hello."}],
)
print(response["choices"][0]["message"]["content"])

Authentication

The SDK reads the API key from (in order):

  1. The api_key= argument to Client(...) or AsyncClient(...).
  2. The CIRALGO_API_KEY environment variable.

If neither is set, AuthenticationError is raised at construction time.

The optional CIRALGO_BASE_URL env var overrides the default https://api.ciralgo.com. This is useful for staging or for self-hosted Ciralgo deployments.

Endpoints

The four public proxy operations from the Ciralgo OpenAPI spec (v1.1.0):

Chat completions

response = client.chat.completions.create(
    model="anthropic/claude-sonnet-4-6",
    messages=[
        {"role": "system", "content": "You are a finance compliance assistant."},
        {"role": "user", "content": "Summarise EU AI Act Article 15."},
    ],
    temperature=0.2,
    max_tokens=400,
    tags={"project": "ai-act-summariser", "env": "prod"},
)

Streaming chat completions

for chunk in client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Stream me a haiku."}],
    stream=True,
):
    delta = chunk["choices"][0]["delta"].get("content", "")
    print(delta, end="", flush=True)

Embeddings

embedding = client.embeddings.create(
    model="openai/text-embedding-3-small",
    input="EU AI Act Article 15 covers accuracy, robustness and cybersecurity.",
)
print(len(embedding["data"][0]["embedding"]))  # → vector dimension

Usage

usage = client.usage.get(from_date="2026-06-01", to_date="2026-06-30")
print(usage["total_cost_usd"], usage["calls"])

Anthropic Messages

response = client.anthropic.messages_create(
    model="anthropic/claude-sonnet-4-6",
    max_tokens=400,
    system="You are an EU compliance assistant.",
    messages=[{"role": "user", "content": "What is GDPR Article 32?"}],
)
print(response["content"][0]["text"])

Error handling

The SDK maps HTTP status codes to typed exceptions. Catch the specific class:

from ciralgo import Client
from ciralgo.errors import RateLimitError, UpstreamError, AuthenticationError

try:
    response = client.chat.completions.create(...)
except RateLimitError as e:
    time.sleep(e.retry_after or 5)
    # retry
except UpstreamError as e:
    # upstream LLM provider 5xx, pick a different model
    ...
except AuthenticationError:
    # rotate / re-issue the key
    raise

Every exception carries:

  • code: stable string error code from the API envelope (e.g. rate_limit_exceeded)
  • message: human-readable
  • trace_id: pass this to Ciralgo support to look up the request server-side
  • status_code: HTTP status
  • retry_after: only set on 429

Async

import asyncio
from ciralgo import AsyncClient

async def main():
    async with AsyncClient() as client:
        # NOTE: async surface in v1.1.0 is the client construction +
        # close lifecycle. Full async parity for chat / embeddings ships
        # in v1.2.0.
        pass

asyncio.run(main())

Migration to a codegen client

The current client is hand-written. A codegen-based replacement is viable using openapi-python-client against the published Ciralgo OpenAPI spec. The hand-written client gives us control over:

  • Streaming semantics (stream=True returning an iterator).
  • The X-Ciralgo-Tags header marshalling.
  • The typed exception hierarchy (codegen produces a single error class).

A future major bump (v2.0.0) can switch to codegen if the trade-offs change.

Development

From the SDK repo root:

pip install -e ".[dev]"
pytest
ruff check src
mypy src

Publishing

Publishing to PyPI is handled by a GitHub Actions workflow triggered on tags of the form sdk-py-v*. The workflow uses PyPI Trusted Publishing (OIDC). No long-lived API token is stored in CI secrets.

The engineer-facing release runbook (version bump, tag push, environment approval, troubleshooting) is at docs/publish-runbook.md.

License

Apache-2.0

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

ciralgo-1.1.2.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

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

ciralgo-1.1.2-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file ciralgo-1.1.2.tar.gz.

File metadata

  • Download URL: ciralgo-1.1.2.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ciralgo-1.1.2.tar.gz
Algorithm Hash digest
SHA256 26f416662732c71cc18ff0eac39e582b6c7da75f29580c2b17c7b73d10a19110
MD5 68c718f11c79c046e7154de28b2c1ba1
BLAKE2b-256 656a5e12d5b16e6760764a5f4943f953fd7c5182bc6d2bb7d5e94aca6da81cb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciralgo-1.1.2.tar.gz:

Publisher: sdk-python.yml on Ciralgo/ciralgo-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ciralgo-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: ciralgo-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ciralgo-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8383a49943124c71b2c9aa3aeab823e6fb0701ee23efaf8837b539496d616e4c
MD5 cb9713e8dea6de06493b578cccc2fd94
BLAKE2b-256 80ee495158279f3eb8a08c5f4d9b11ac4941d2253f5aaa2bc95cfbd04dd5de46

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciralgo-1.1.2-py3-none-any.whl:

Publisher: sdk-python.yml on Ciralgo/ciralgo-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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