Official Python SDK for Xache Protocol
Project description
Xache Protocol Python SDK
Official Python SDK for Xache Protocol - decentralized agent memory and collective intelligence marketplace.
Features
✅ Async/Await - Full asyncio support for concurrent operations ✅ Type Hints - Complete type annotations for better IDE support ✅ Authentication - Automatic request signing per protocol spec ✅ Payment Flow - Built-in 402 payment handling (manual or Coinbase Commerce) ✅ Encryption - Client-side encryption for memory storage ✅ Error Handling - Typed exceptions with automatic retry logic ✅ Budget Management - Track and control spending limits
Installation
pip install xache
With encryption support:
pip install xache[encryption]
Quick Start
import asyncio
from xache import XacheClient
async def main():
# Initialize client
async with XacheClient(
api_url="https://api.xache.xyz",
did="did:agent:evm:0xYourWalletAddress",
private_key="0x...",
) as client:
# Register identity
identity = await client.identity.register(
wallet_address="0xYourWalletAddress",
key_type="evm",
chain="base",
)
print(f"DID: {identity.did}")
asyncio.run(main())
Usage Examples
Memory Storage
# Store encrypted memory (automatic encryption + 402 payment)
memory = await client.memory.store(
data={
"context": "user preferences",
"theme": "dark",
"language": "en",
},
storage_tier="hot",
)
print(f"Memory ID: {memory.memory_id}")
# Retrieve memory (automatic decryption + 402 payment)
retrieved = await client.memory.retrieve(memory_id=memory.memory_id)
print(f"Data: {retrieved.data}")
# Delete memory (free)
await client.memory.delete(memory.memory_id)
Batch Memory Operations
# Store multiple memories in one request (batch pricing)
batch_result = await client.memory.store_batch(
items=[
{"data": {"key": "value1"}, "storage_tier": "hot"},
{"data": {"key": "value2"}, "storage_tier": "warm"},
{"data": {"key": "value3"}, "storage_tier": "cold"},
],
)
print(f"Success: {batch_result.success_count}")
print(f"Failed: {batch_result.failure_count}")
# Retrieve multiple memories in one request (single payment)
retrieve_result = await client.memory.retrieve_batch(
storage_keys=["mem_123", "mem_456", "mem_789"],
)
print(f"Success: {retrieve_result.success_count}")
for result in retrieve_result.results:
print(f"{result.storage_key}: {result.data}")
Collective Intelligence
# Contribute a heuristic (automatic 402 payment)
heuristic = await client.collective.contribute(
pattern="Use async/await for cleaner async code in Python",
domain="python",
tags=["async", "best-practices", "readability"],
context_type="code-review",
)
print(f"Heuristic ID: {heuristic.heuristic_id}")
# Query collective (automatic 402 payment)
results = await client.collective.query(
query_text="How to optimize database queries in Python",
domain="python",
limit=10,
)
for match in results.matches:
print(f"Pattern: {match.pattern}")
print(f"Score: {match.relevance_score}")
print(f"Royalty: ${match.royalty_amount}")
Budget Management
# Check budget status
budget = await client.budget.get_status()
print(f"Limit: ${budget.limit_cents / 100}")
print(f"Spent: ${budget.spent_cents / 100}")
print(f"Remaining: ${budget.remaining_cents / 100}")
print(f"Usage: {budget.percentage_used:.1f}%")
# Update budget limit
await client.budget.update_limit(5000) # $50/month
# Check if you can afford an operation
can_afford = await client.budget.can_afford(100) # 100 cents = $1
Receipts & Analytics
# List receipts
result = await client.receipts.list(limit=20, offset=0)
for receipt in result["receipts"]:
print(f"{receipt.operation}: ${receipt.amount_usd}")
# Get Merkle proof for verification
proof = await client.receipts.get_proof("receipt_abc123")
print(f"Merkle Root: {proof.merkle_root}")
# Get usage analytics
analytics = await client.receipts.get_analytics(
start_date="2024-01-01",
end_date="2024-01-31",
)
print(f"Total spent: ${analytics.total_spent}")
Configuration
Basic Configuration
client = XacheClient(
api_url="https://api.xache.xyz",
did="did:agent:evm:0xYourWalletAddress",
private_key="0x...",
timeout=30, # Optional: request timeout in seconds
debug=False, # Optional: enable debug logging
)
Payment Configuration
Manual Payment (Default)
client = XacheClient(
# ... basic config
payment_provider={
"type": "manual",
},
)
# When payment is required, SDK will prompt you in console
Coinbase Commerce
client = XacheClient(
# ... basic config
payment_provider={
"type": "coinbase-commerce",
"api_key": "YOUR_COINBASE_API_KEY",
},
)
# Payments will be handled automatically via Coinbase Commerce
Error Handling
The SDK provides typed errors for all API error codes:
from xache import (
XacheError,
UnauthenticatedError,
PaymentRequiredError,
RateLimitedError,
BudgetExceededError,
InvalidInputError,
)
try:
await client.memory.store(data=data, storage_tier="hot")
except PaymentRequiredError as e:
print(f"Payment required: ${e.amount}")
print(f"Challenge ID: {e.challenge_id}")
except RateLimitedError as e:
print(f"Rate limited. Retry at: {e.reset_at}")
except BudgetExceededError as e:
print("Budget exceeded")
except InvalidInputError as e:
print(f"Invalid input: {e.message}")
Context Manager
Always use the client as an async context manager to ensure proper cleanup:
async with XacheClient(...) as client:
# Your code here
pass
# HTTP session automatically closed
Or manually manage the lifecycle:
client = XacheClient(...)
try:
# Your code here
pass
finally:
await client.close()
API Reference
XacheClient
Main client class for interacting with Xache Protocol.
Properties
client.identity- Identity registrationclient.memory- Memory storage and retrievalclient.collective- Collective intelligence marketplaceclient.budget- Budget managementclient.receipts- Receipt access and analytics
Types
All request/response types are available:
from xache import (
RegisterIdentityRequest,
RegisterIdentityResponse,
StoreMemoryRequest,
StoreMemoryResponse,
QueryCollectiveRequest,
BudgetStatus,
Receipt,
)
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run type checking
mypy xache
# Format code
black xache
# Lint
pylint xache
Requirements
- Python 3.8+
- aiohttp
- typing-extensions
License
MIT
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xache-5.7.0.tar.gz.
File metadata
- Download URL: xache-5.7.0.tar.gz
- Upload date:
- Size: 84.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fde87db82a3b7725cf5dd0dd67d5131ae63c7156b57b2305d7c067f11d6af6af
|
|
| MD5 |
482bf4c898057d2e98511dccf46de0ff
|
|
| BLAKE2b-256 |
38e6f56574b5fbd1020285aaa5b6da07ae90e9fa22124f2fb2a701a90f6c92b1
|
File details
Details for the file xache-5.7.0-py3-none-any.whl.
File metadata
- Download URL: xache-5.7.0-py3-none-any.whl
- Upload date:
- Size: 95.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86a40e7c5977e668f043e57bea04bb707d4fe6c78857a3a0ad70e7ea6f83b0d7
|
|
| MD5 |
488cdf0ccf2cc81451ff63ef33e77a55
|
|
| BLAKE2b-256 |
ac64e369136a7b96cc87d3626b5e625a987346155c3bd126c9aed02d3805be0e
|