Skip to main content

Official Python SDK for the Clarive Public API

Project description

clarive-sdk

PyPI

The official Python SDK for the Clarive Public API. Fetch prompt entries, render templates with variable substitution, and let the built-in retry and circuit breaker handle the rest.

Requires Python 3.10+. Two runtime dependencies: httpx and tenacity.

Install

pip install clarive-sdk

Quick start

Both async and sync clients are included. Pick whichever fits your project.

Async:

from uuid import UUID
from clarive import ClariveClient, GenerateRequest

async with ClariveClient(api_key="cl_your_api_key") as client:
    # Fetch a published prompt entry
    entry = await client.get_entry(UUID("3fa85f64-5717-4562-b3fc-2c963f66afa6"))

    # Render it with template variables
    result = await client.generate(entry.id, GenerateRequest(
        fields={"companyName": "Acme Corp", "customerMessage": "I need help with my order"}
    ))

    for prompt in result.rendered_prompts:
        print(prompt.content)

Sync:

from clarive import ClariveClientSync, GenerateRequest

with ClariveClientSync(api_key="cl_your_api_key") as client:
    entry = client.get_entry(entry_id)
    result = client.generate(entry.id, GenerateRequest(fields={"name": "Alice"}))

Both clients support manual lifecycle management too — call await client.aclose() or client.close() instead of using context managers.

Resilience

Retry, circuit breaker, and timeout are enabled by default. The defaults:

Setting Default
Max retries 3
Retry base delay 1 second (exponential backoff + jitter)
Timeout 30 seconds
Circuit breaker threshold 5 consecutive failures
Circuit breaker cooldown 30 seconds

Only transient errors get retried: timeouts, 429 (rate limited), and 5xx responses. Permanent errors like 401, 404, and 422 raise immediately.

Override the defaults:

from clarive import ClariveClient, ClariveOptions, ResilienceOptions

client = ClariveClient(options=ClariveOptions(
    api_key="cl_your_api_key",
    resilience=ResilienceOptions(max_retries=5, timeout=60.0),
))

Or turn it all off:

client = ClariveClient(options=ClariveOptions(
    api_key="cl_your_api_key",
    resilience=ResilienceOptions(enabled=False),
))

Error handling

API errors raise typed exceptions. All API exceptions extend ClariveApiError, which extends ClariveError:

Exception HTTP status When
ClariveAuthenticationError 401 Invalid or missing API key
ClariveNotFoundError 404 Entry doesn't exist or is trashed
ClariveValidationError 422 Bad template field values
ClariveRateLimitError 429 Too many requests (limit: 20/min)

ClariveCircuitOpenError extends ClariveError directly — not ClariveApiError — so catching ClariveApiError won't accidentally swallow circuit breaker errors.

from clarive import ClariveApiError, ClariveValidationError, ClariveCircuitOpenError

try:
    result = await client.generate(entry_id, request)
except ClariveValidationError as e:
    for field, error in e.details.items():
        print(f"{field}: {error}")
except ClariveRateLimitError:
    # Back off and retry
    pass
except ClariveApiError as e:
    print(f"API error {e.error_code}: {e}")
except ClariveCircuitOpenError:
    print("Service unavailable — circuit breaker is open")

API reference

ClariveClient / ClariveClientSync

Method Returns Description
get_entry(entry_id: UUID) PromptEntry Fetches the published version of a prompt entry
generate(entry_id: UUID, request: GenerateRequest) GenerateResponse Renders prompts with template variable substitution

Models

All response models are frozen dataclasses. They're immutable once created.

PromptEntry — a published prompt entry.

  • id (UUID), title (str), version (int), system_message (str | None), prompts (list[Prompt])

Prompt — a single prompt within an entry.

  • content (str), order (int), is_template (bool), template_fields (list[TemplateField] | None)

TemplateField — a {{variable}} placeholder definition.

  • name, type (string/int/float/enum), enum_values, default_value, min, max

GenerateRequest — request body for generate().

  • fields (dict[str, str] | None) — variable names to values

GenerateResponse — rendered output.

  • id, title, version, system_message, rendered_prompts (list[RenderedPrompt])

RenderedPrompt — a prompt with variables replaced.

  • content (str), order (int)

Configuration

ClariveOptions controls SDK behavior:

Property Type Default Description
api_key str "" Your API key (required, starts with cl_)
base_url str https://app.clarive.com Clarive instance URL
allow_insecure_http bool False Permit HTTP URLs (local dev only)
resilience ResilienceOptions Enabled Retry, circuit breaker, and timeout settings

HTTPS is enforced by default. For local development against http://localhost, set allow_insecure_http=True.

The api_key field is excluded from repr() output, so printing or logging a ClariveOptions object won't leak your key.

Build and test

cd sdks/python
uv venv && uv pip install -e ".[dev]"
uv run pytest
uv run ruff check src/ tests/
uv run mypy --strict src/

License

See the repository root for license information.

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

clarive_sdk-0.2.0.tar.gz (57.7 kB view details)

Uploaded Source

Built Distribution

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

clarive_sdk-0.2.0-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file clarive_sdk-0.2.0.tar.gz.

File metadata

  • Download URL: clarive_sdk-0.2.0.tar.gz
  • Upload date:
  • Size: 57.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for clarive_sdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 225b5431f0b0573f1b3e62dbefb3aabd43b691d4ec2c357895423aa1f5ae5e11
MD5 c0ab9d463f1c99066950e77c0361a1fc
BLAKE2b-256 12df17b5f1c165967042bbe070a0a103aac634dd9662c8c531f4d21c3ed0a426

See more details on using hashes here.

File details

Details for the file clarive_sdk-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: clarive_sdk-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for clarive_sdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5fe2eb0760faa3553706f35fc469d9aa2057e73463381e1e1f2ea6c4cd7c01cc
MD5 e2f267e505596f16f8ef7814a93dc9dc
BLAKE2b-256 421cc8eab196e0f273d7770d9b4939e341f2e477b5c614f7bb416acb478f4338

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