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.1.tar.gz (8.3 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.1-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ciralgo-1.1.1.tar.gz
  • Upload date:
  • Size: 8.3 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.1.tar.gz
Algorithm Hash digest
SHA256 476721df49665cc2415ad41a972276cdf37774a6828701158bcf8bcef6c0629f
MD5 d867e38d911c8b87921a2620d41c0e3f
BLAKE2b-256 e8d52d27afa83af40031482c0802c5a9fd4812319cd22ac58a3484cf322b7eb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciralgo-1.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: ciralgo-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6075e501b5abb29b284f5f77c2bd492b7c88cc587a739a2446f3570bf31c39bc
MD5 23c2b3137bd0772f722d3865bd940edb
BLAKE2b-256 30471f0f0db94acff56d06a37be610a964cb80564044385a5da49fb22bac4a1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciralgo-1.1.1-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