Skip to main content

Official Python SDK for the Cortex LLM Gateway API by InfiniteMonkeys

Project description

Cortex Python SDK

Python client for the Cortex LLM Gateway and Admin API.

Installation

pip install cortex-sdk

Quick Start

from cortex_sdk import CortexClient

client = CortexClient(api_key="sk-cortex-...")

# Chat completions
response = client.chat.completions.create(
    model="default",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)

client.close()

Async Usage

import asyncio
from cortex_sdk import AsyncCortexClient

async def main():
    async with AsyncCortexClient(api_key="sk-cortex-...") as client:
        response = await client.chat.completions.create(
            model="default",
            messages=[{"role": "user", "content": "Hello!"}],
        )
        print(response.choices[0].message.content)

asyncio.run(main())

Streaming

# Sync streaming
stream = client.chat.completions.create(
    model="default",
    messages=[{"role": "user", "content": "Tell me a story"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

# Async streaming
stream = await async_client.chat.completions.create(
    model="default",
    messages=[{"role": "user", "content": "Tell me a story"}],
    stream=True,
)
async for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Configuration

client = CortexClient(
    api_key="sk-cortex-...",
    llm_base_url="https://cortexapi.nfinitmonkeys.com/v1",   # LLM gateway
    admin_base_url="https://admin.nfinitmonkeys.com",         # Admin API
    timeout=30.0,               # Request timeout (seconds)
    streaming_timeout=300.0,    # Streaming timeout (seconds)
    max_retries=3,              # Retry count for transient errors
    extra_headers={"X-Custom": "value"},
)

LLM Gateway

Chat Completions

response = client.chat.completions.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is Python?"},
    ],
    temperature=0.7,
    max_tokens=500,
)

Text Completions

response = client.completions.create(
    model="gpt-3.5-turbo-instruct",
    prompt="Once upon a time",
    max_tokens=100,
)
print(response.choices[0].text)

Embeddings

response = client.embeddings.create(
    model="text-embedding-ada-002",
    input="Hello world",
)
print(response.data[0].embedding)

Models

models = client.models.list()
for model in models.data:
    print(model.id)

Admin API

API Keys

# List keys
keys = client.keys.list()

# Create key
key = client.keys.create(name="Production", scopes=["chat", "embeddings"])

# Delete key
client.keys.delete("key-id")

Teams

# List / create / get / delete teams
teams = client.teams.list()
team = client.teams.create(name="Engineering")
team = client.teams.get("team-id")
client.teams.delete("team-id")

# Members
member = client.teams.add_member("team-id", email="alice@example.com", role="admin")
client.teams.update_member("team-id", "member-id", role="viewer")
client.teams.remove_member("team-id", "member-id")

Usage & Performance

stats = client.usage.get(params={"start_date": "2024-01-01"})
limits = client.usage.limits()
metrics = client.performance.get()

Conversations

convos = client.conversations.list()
convo = client.conversations.create(title="My Chat", model="gpt-4")
convo = client.conversations.get("conv-id")
convo = client.conversations.update("conv-id", title="New Title")
client.conversations.delete("conv-id")

# Stream messages (SSE)
for msg in client.conversations.messages("conv-id"):
    print(msg.content)

Iris (Document Extraction)

job = client.iris.extract(
    document_url="https://example.com/invoice.pdf",
    schema_id="invoice-schema",
)
jobs = client.iris.list_jobs(limit=10)
schemas = client.iris.list_schemas()

Other Resources

# Plugins & Optimizations
plugins = client.plugins.list()
opts = client.optimizations.get()

# Admin models config
models = client.admin_models.list()

# PDF generation
pdf = client.pdf.generate(content="# Report", template="default")

# Web search
results = client.web_search.search(query="Python programming", num_results=5)

Error Handling

from cortex_sdk import (
    CortexError,
    AuthenticationError,
    RateLimitError,
    NotFoundError,
    InternalServerError,
)

try:
    response = client.chat.completions.create(...)
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after}s")
except NotFoundError:
    print("Resource not found")
except InternalServerError:
    print("Server error — will be retried automatically")
except CortexError as e:
    print(f"SDK error: {e.message}")

Retry Behavior

The SDK automatically retries on HTTP 429, 500, 502, 503, and 504 with exponential backoff and jitter. The Retry-After header is respected when present. Configure with max_retries (default: 3).

Development

pip install -e ".[dev]"
pytest

License

MIT

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

nfinitmonkeys_cortex_sdk-1.1.0.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

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

nfinitmonkeys_cortex_sdk-1.1.0-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file nfinitmonkeys_cortex_sdk-1.1.0.tar.gz.

File metadata

  • Download URL: nfinitmonkeys_cortex_sdk-1.1.0.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for nfinitmonkeys_cortex_sdk-1.1.0.tar.gz
Algorithm Hash digest
SHA256 f50a7b142a85b42db8cdfd56dbb103a11506b37c627eac6869e98bfee25ff97e
MD5 420f5a88527ba78defe86b5b0318366f
BLAKE2b-256 2d07f00d7a1a66effee24c6d84fa15c6396382c9323bbcdc4a35796de799e8d5

See more details on using hashes here.

File details

Details for the file nfinitmonkeys_cortex_sdk-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nfinitmonkeys_cortex_sdk-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 76ac5def082ade581fd33f0c4ad5b54ae58e13840dac913fcc2989df2797e38b
MD5 33952c436e338c344bf5702a3b87e783
BLAKE2b-256 a3f8b2f6a94330b828a4d059ee7717a530520b50d9949ac245af6f2e3a43cdd7

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