Python SDK

Python SDK

Official Python SDK for Sovant Memory API.

Installation

pip install sovant==1.0.6
# or
poetry add sovant==1.0.6

Initialization

from sovant import Sovant

client = Sovant(
    api_key="sk_live_your_api_key",
    base_url="https://sovant.ai",  # optional, this is default
    timeout=30.0,                   # optional, seconds
    max_retries=3,                  # optional
    debug=False                     # optional
)

Memory Operations

# Create
memory = client.memory.create({
    "content": "User prefers dark mode",
    "type": "preference",
    "tags": ["ui", "settings"],
    "metadata": {"source": "onboarding"}
})

# Get
mem = client.memory.get("mem_123")

# Update
updated = client.memory.update("mem_123", {
    "tags": ["ui", "settings", "theme"]
})

# Delete
client.memory.delete("mem_123")

# List
memories = client.memory.list({
    "limit": 20,
    "offset": 0,
    "type": "preference",
    "tags": ["settings"]
})

# Search
results = client.memory.search({
    "query": "user preferences",
    "limit": 10
})

Chat Support

# Note: Full chat streaming support coming in v1.1.0
# For now, use the REST API directly or JavaScript SDK

import requests

# Create session
response = requests.post(
    "https://sovant.ai/api/v1/chat/sessions",
    headers={"x-sovant-api-key": api_key},
    json={"title": "Support chat"}
)
session = response.json()

# Send message (non-streaming)
response = requests.post(
    f"https://sovant.ai/api/v1/chat/sessions/{session['id']}/messages",
    headers={"x-sovant-api-key": api_key},
    json={
        "message": "Hello",
        "provider": "openai",
        "model": "gpt-4o-mini",
        "stream": False
    }
)

Batch Operations

batch = client.memory.batch({
    "operations": [
        {
            "op": "create",
            "data": {
                "content": "Batch memory 1",
                "type": "observation"
            }
        },
        {
            "op": "update",
            "id": "mem_123",
            "data": {"tags": ["updated"]}
        },
        {
            "op": "delete",
            "id": "mem_456"
        }
    ]
})

print(batch["summary"])
# {"total": 3, "successful": 3, "failed": 0}

Thread Management

# Create thread
thread = client.threads.create({
    "title": "Customer Support",
    "metadata": {"ticket_id": "12345"}
})

# Link memory to thread
client.threads.link_memory(thread["id"], memory["id"])

# List memories in thread
thread_memories = client.memory.list({
    "thread_id": thread["id"]
})

Error Handling

from sovant import (
    SovantError,
    AuthError,
    RateLimitError,
    NetworkError,
    TimeoutError
)

try:
    memory = client.memory.get("invalid")
except AuthError as e:
    print(f"Authentication failed: {e}")
except RateLimitError as e:
    print(f"Rate limited. Retry after: {e.retry_after}")
except NetworkError as e:
    print(f"Network error: {e}")
except TimeoutError as e:
    print(f"Request timed out: {e}")
except SovantError as e:
    print(f"API Error {e.status}: {e.message}")
    print(f"Request ID: {e.request_id}")

API Key Management

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

# Create new key
new_key = client.keys.create({"name": "Production"})
print(new_key["key"])  # Save this - only shown once!

# Update key
client.keys.update(key_id, {"name": "Staging"})

# Revoke key
client.keys.revoke(key_id)

Changelog

See PyPI history for version history.

Current stable: v1.0.6 (Documentation update)