Skip to main content

Contex Python SDK

Official Python client for Contex - Semantic context routing for AI agents.

Installation

pip install contex-python

Quick Start

from contex import ContexAsyncClient

async def main():
    async with ContexAsyncClient(
        url="http://localhost:8001",
        api_key="ck_your_api_key_here"
    ) as client:
        # Publish data
        await client.publish(
            project_id="my-app",
            data_key="coding_standards",
            data={
                "style": "PEP 8",
                "max_line_length": 100,
                "quotes": "double"
            }
        )
        
        # Register agent
        response = await client.register_agent(
            agent_id="code-reviewer",
            project_id="my-app",
            data_needs=[
                "coding standards and style guidelines",
                "testing requirements and coverage goals"
            ]
        )
        
        print(f"Matched needs: {response.matched_needs}")
        print(f"Notification channel: {response.notification_channel}")
        
        # Query for data
        results = await client.query(
            project_id="my-app",
            query="authentication configuration"
        )
        
        for result in results.results:
            print(f"{result.data_key}: {result.data}")

import asyncio
asyncio.run(main())

Sync Client

from contex import ContexClient

client = ContexClient(
    url="http://localhost:8001",
    api_key="ck_your_api_key_here"
)

# Publish data
client.publish(
    project_id="my-app",
    data_key="config",
    data={"env": "prod", "debug": False}
)

# Register agent
response = client.register_agent(
    agent_id="my-agent",
    project_id="my-app",
    data_needs=["configuration", "secrets"]
)

Features

  • ✅ Async & Sync: Both async and synchronous interfaces
  • ✅ Type Hints: Full type annotations with Pydantic models
  • ✅ Error Handling: Comprehensive exception hierarchy
  • ✅ Retry Logic: Automatic retries with exponential backoff
  • ✅ Rate Limiting: Built-in rate limit handling
  • ✅ Authentication: API key authentication support

API Reference

Client Initialization

client = ContexAsyncClient(
    url="http://localhost:8001",  # Contex server URL
    api_key="ck_...",              # API key for authentication
    timeout=30.0,                  # Request timeout in seconds
    max_retries=3,                 # Maximum number of retries
)

Publishing Data

await client.publish(
    project_id="my-app",           # Project identifier
    data_key="unique-key",         # Unique key for this data
    data={"any": "json"},          # Data payload
    data_format="json",            # Format: json, yaml, toml, text
    metadata={"tags": ["prod"]},   # Optional metadata
)

Registering Agents

response = await client.register_agent(
    agent_id="agent-1",                    # Unique agent ID
    project_id="my-app",                   # Project ID
    data_needs=["config", "secrets"],      # Data needs (natural language)
    notification_method="redis",           # redis or webhook
    webhook_url="https://...",             # Optional webhook URL
    webhook_secret="secret",               # Optional webhook secret
    last_seen_sequence="0",                # Last seen sequence
)

Querying Data

results = await client.query(
    project_id="my-app",
    query="authentication settings",
    max_results=10,
)

for result in results.results:
    print(f"{result.data_key}: {result.similarity_score}")

API Key Management

# Create API key
key_response = await client.create_api_key(name="production-key")
print(f"API Key: {key_response.key}")  # Store this securely!

# List keys
keys = await client.list_api_keys()

# Revoke key
await client.revoke_api_key(key_id="key-123")

Health Checks

# Comprehensive health
health = await client.health()

# Readiness check
ready = await client.ready()

# Rate limit status
rate_limit = await client.rate_limit_status()
print(f"Remaining: {rate_limit.remaining}/{rate_limit.limit}")

Exception Handling

from contex import (
    ContexError,
    AuthenticationError,
    RateLimitError,
    ValidationError,
    NotFoundError,
    ServerError,
)

try:
    await client.publish(...)
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after} seconds")
except ValidationError as e:
    print(f"Validation error: {e}")
except NotFoundError:
    print("Resource not found")
except ServerError:
    print("Server error")
except ContexError as e:
    print(f"Contex error: {e}")

Development

Setup

cd sdk/python
pip install -e ".[dev]"

Running Tests

pytest

Code Formatting

black contex/
ruff check contex/
mypy contex/

Examples

See the examples directory for more usage examples:

  • basic_usage.py - Basic publish and query
  • agent_registration.py - Agent registration and updates
  • webhook_agent.py - Webhook-based agent
  • error_handling.py - Error handling patterns
  • batch_operations.py - Batch publishing

License

MIT License - see LICENSE for details.

Metadata

Release files for contex-python 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for contex-python 0.2.4
File Size Uploaded
contex_python-0.2.4.tar.gz 19.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for contex-python 0.2.4
File Interpreter ABI Platform
contex_python-0.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 30.6 kB

Release files / contex_python-0.2.4.tar.gz

Download URL contex_python-0.2.4.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0f487d0cd983e0191f7d0e6d006f68782353bc3100a703142bcf123a24ceb631
BLAKE2b-256 checksum
How to use checksums
b9ff59e35f9473514bc1f7a85be2a4b254563b30488e62622004240ecc72724b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / contex_python-0.2.4-py3-none-any.whl

Download URL contex_python-0.2.4-py3-none-any.whl
Size 11.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e24009fed0b3d61d4e21719a6b5ac713eae1bdc0d41752c3fc0aa50e034e05e0
BLAKE2b-256 checksum
How to use checksums
1c079695c9bc9853ae1c4e8ab39eea61828eab82e99c9fbb3e768b57685eb907
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.5

2 release files

This release

0.2.4 This release

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.0

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page