Skip to main content

Official Python SDK for the Ensoul API

Project description

Ensoul Python SDK

Python client library for the Ensoul personality simulation API.

Installation

pip install ensoul

Quick Start

from ensoul import Ensoul

client = Ensoul(api_key="your-api-key")

# Create a persona
persona = client.personas.create(name="Alex", domain="my_domain")

# Send a chat message
response = client.chat.send(persona.id, "Hello, who are you?")
print(response.response)

The API key can also be set via the ENSOUL_API_KEY environment variable, in which case no api_key argument is needed.

The client supports context managers for automatic cleanup:

with Ensoul(api_key="your-api-key") as client:
    persona = client.personas.get("persona-id")

Async Usage

import asyncio
from ensoul import AsyncEnsoul

async def main():
    async with AsyncEnsoul(api_key="your-api-key") as client:
        persona = await client.personas.create(name="Jordan", domain="my_domain")
        response = await client.chat.send(persona.id, "Tell me about yourself.")
        print(response.response)

asyncio.run(main())

Streaming

Chat supports server-sent events (SSE) for streaming responses:

from ensoul import Ensoul
from ensoul.streaming import parse_chat_event

client = Ensoul(api_key="your-api-key")

stream = client.chat.stream("persona-id", "What do you think about music?")
for event in stream.events():
    parsed = parse_chat_event(event)
    if not parsed.is_final:
        print(parsed.chunk, end="", flush=True)
    else:
        print()  # newline after stream completes

The async client returns an AsyncSSEStream that works the same way with async for.

Pagination

List endpoints return a SyncPage (or AsyncPage) object. Use .auto_paging_iter() to iterate through all pages automatically:

# Manual page access
page = client.personas.list(per_page=50)
print(page.items)    # current page items
print(page.total)    # total count across all pages

# Automatic pagination — fetches subsequent pages as needed
for persona in client.personas.list().auto_paging_iter():
    print(persona.name)

Async pagination works the same way with async for.

Error Handling

All SDK errors inherit from EnsoulError. HTTP errors are subclasses of APIError:

from ensoul.errors import (
    EnsoulError,
    APIError,
    AuthenticationError,
    AuthorizationError,
    NotFoundError,
    RateLimitError,
    ValidationError,
    ConflictError,
    ServerError,
)

try:
    persona = client.personas.get("nonexistent-id")
except NotFoundError:
    print("Persona not found")
except AuthenticationError:
    print("Invalid or missing API key")
except RateLimitError:
    print("Rate limit exceeded — back off and retry")
except APIError as e:
    print(f"API error {e.status_code}: {e.message}")

Configuration

The client reads two environment variables as defaults:

Variable Purpose
ENSOUL_API_KEY API key (avoids passing api_key= in code)
ENSOUL_BASE_URL API base URL (default: https://api.ensoul-ai.com)

Demo API — the current hosted demo is available at:

export ENSOUL_BASE_URL="https://api.demo.ensoul-ai.com"
export ENSOUL_API_KEY="your-api-key"

With these set, Ensoul() connects to the demo with no constructor arguments.

You can also pass the base URL explicitly:

client = Ensoul(api_key="ens_...", base_url="https://api.demo.ensoul-ai.com")

Authentication

API key (recommended):

client = Ensoul(api_key="ens_...")
# or set ENSOUL_API_KEY in the environment
client = Ensoul()

Bearer token:

client = Ensoul(bearer_token="eyJ...")

OAuth2 token exchange (password flow, form-encoded):

token_response = client.auth.token(
    username="you@example.com",
    password="your-password",
)
authed_client = Ensoul(bearer_token=token_response.access_token)

Resources

Namespace Description
client.personas CRUD, list (paginated), batch create, personality vectors, filters, connections
client.chat Send messages, streaming SSE, conversation history
client.domains Domain configuration management
client.simulations Time-based evolution simulations
client.aggregate Aggregate queries with streaming results
client.memory Persona memory management
client.sessions Hierarchical session orchestration
client.frameworks Framework management
client.auth OAuth2 token exchange and API key management
client.health Service health checks
client.info Server info and configuration

Requirements

  • Python 3.11+
  • httpx — HTTP transport
  • pydantic 2.x — request and response models

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

ensoul-0.2.0.tar.gz (72.6 kB view details)

Uploaded Source

Built Distribution

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

ensoul-0.2.0-py3-none-any.whl (47.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ensoul-0.2.0.tar.gz
Algorithm Hash digest
SHA256 99619a916637efcdfa0bccb6c3ba00cbcd9503927fe67b0e9cded32568cdab98
MD5 efca1cbd8537bbcb443b03afa23af9f6
BLAKE2b-256 4095e0081189cc46320b05102a2d8f42aeada7d46fe3990cad81e058bf8c496a

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for ensoul-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5666a8618e4ffc3596efa92a8c2fec41096b60031f509d9db9d80d3e09ae98a6
MD5 de5785c0d18697ba83182afa762dbd0c
BLAKE2b-256 b1bfd341bd502a48e76f372e4b660dbef684ca8234bf8e9ec253fe037d2ec5b9

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