Skip to main content

Official Python SDK for ChatRoutes API - Conversation branching and multi-model AI chat

Project description

ChatRoutes Python SDK

PyPI Python Open In Colab

Official Python SDK for the ChatRoutes API - A powerful conversation management platform with advanced branching capabilities.

⚠️ Beta Release: ChatRoutes is currently in beta. The API may change without maintaining backward compatibility. Please use with caution in production environments.

🚀 Try It Now!

Quickstart (5-10 minutes)

Want to try ChatRoutes immediately? Click the badge below to open an interactive notebook in Google Colab:

Open In Colab

No installation required - just run the cells and start experimenting!

Complete Feature Demo (20-30 minutes)

Want to see ALL features in action? Watch branching, checkpoints, tree visualization, and immutability:

Open In Colab

Perfect for sales demos, presentations, and comprehensive exploration!

Installation

pip install chatroutes

Getting Started

1. Get Your API Key

IMPORTANT: Before you can use ChatRoutes, you must obtain an API key:

  1. Visit chatroutes.com
  2. Sign up for a free account
  3. Go to Dashboard → Navigate to the API section
  4. Generate your API key
  5. Copy and save your API key securely

2. Quick Start

from chatroutes import ChatRoutes

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

conversation = client.conversations.create({
    'title': 'My First Conversation',
    'model': 'gpt-5'  # or 'claude-opus-4-1', 'claude-sonnet-4-5', etc.
})

response = client.messages.send(
    conversation['id'],
    {
        'content': 'Hello, how are you?',
        'model': 'gpt-5'
    }
)

print(response['message']['content'])

Supported Models

ChatRoutes currently supports the following AI models:

OpenAI:

  • gpt-5 (default) - OpenAI's GPT-5

Anthropic Claude 4:

  • claude-opus-4-1 - Claude Opus 4.1 (most capable)
  • claude-opus-4 - Claude Opus 4
  • claude-opus-4-0 - Claude Opus 4.0
  • claude-sonnet-4-5 - Claude Sonnet 4.5 (best for coding)
  • claude-sonnet-4-0 - Claude Sonnet 4.0

Anthropic Claude 3:

  • claude-3-7-sonnet-latest - Claude 3.7 Sonnet (latest)
  • claude-3-5-haiku-latest - Claude 3.5 Haiku (fastest)

Important: Use these exact model names. Other model names (e.g., gpt-4o, gpt-4o-mini, claude-sonnet-4) are not supported and will result in an error.

Features

  • Conversation Management: Create, list, update, and delete conversations
  • Message Handling: Send messages with support for streaming responses
  • Branch Operations: Create and manage conversation branches for exploring alternatives
  • Checkpoint Management: Save and restore conversation context at specific points
  • Type Safety: Full type hints using TypedDict for better IDE support
  • Error Handling: Comprehensive exception hierarchy for different error scenarios
  • Retry Logic: Built-in exponential backoff retry mechanism

Usage Examples

Creating a Conversation

conversation = client.conversations.create({
    'title': 'Product Discussion',
    'model': 'gpt-5'
})

Sending Messages

response = client.messages.send(
    conversation_id='conv_123',
    data={
        'content': 'What are the key features?',
        'model': 'gpt-5',
        'temperature': 0.7
    }
)

print(response['message']['content'])  # AI response
print(f"Tokens used: {response['usage']['totalTokens']}")

Streaming Responses

def on_chunk(chunk):
    if chunk.get('type') == 'content' and chunk.get('content'):
        print(chunk['content'], end='', flush=True)

def on_complete(message):
    print(f"\n\nMessage ID: {message['id']}")

client.messages.stream(
    conversation_id='conv_123',
    data={'content': 'Tell me a story'},
    on_chunk=on_chunk,
    on_complete=on_complete
)

Working with Branches

branch = client.branches.create(
    conversation_id='conv_123',
    data={
        'title': 'Alternative Response',
        'contextMode': 'FULL'
    }
)

fork = client.branches.fork(
    conversation_id='conv_123',
    data={
        'forkPointMessageId': 'msg_456',
        'title': 'Exploring Different Approach'
    }
)

Listing Conversations

result = client.conversations.list({
    'page': 1,
    'limit': 10,
    'filter': 'all'
})

for conv in result['data']:
    print(f"{conv['title']} - {conv['createdAt']}")

Managing Checkpoints

Checkpoints allow you to save conversation context at specific points and manage long conversations efficiently:

branches = client.branches.list(conversation_id='conv_123')
main_branch = next(b for b in branches if b['isMain'])

checkpoint = client.checkpoints.create(
    conversation_id='conv_123',
    branch_id=main_branch['id'],
    anchor_message_id='msg_456'
)

print(f"Checkpoint created: {checkpoint['id']}")
print(f"Summary: {checkpoint['summary']}")
print(f"Token count: {checkpoint['token_count']}")

checkpoints = client.checkpoints.list('conv_123')
for cp in checkpoints:
    print(f"{cp['id']}: {cp['summary']}")

response = client.messages.send(
    conversation_id='conv_123',
    data={'content': 'Continue the conversation'}
)

metadata = response['message'].get('metadata', {})
if metadata.get('checkpoint_used'):
    print(f"Checkpoint was used for this response")
    print(f"Context messages: {metadata.get('context_message_count')}")

Error Handling

The SDK provides specific exception types for different error scenarios:

from chatroutes import (
    ChatRoutesError,
    AuthenticationError,
    RateLimitError,
    ValidationError,
    NotFoundError,
    ServerError
)

try:
    conversation = client.conversations.get('conv_123')
except AuthenticationError:
    print("Invalid API key")
except NotFoundError:
    print("Conversation not found")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after} seconds")
except ChatRoutesError as e:
    print(f"Error: {e.message}")

API Reference

ChatRoutes Client

client = ChatRoutes(
    api_key="your-api-key",
    base_url="https://api.chatroutes.com/api/v1",  # optional
    timeout=30,  # optional, in seconds
    retry_attempts=3,  # optional
    retry_delay=1.0  # optional, in seconds
)

Conversations Resource

  • create(data: CreateConversationRequest) -> Conversation
  • list(params: ListConversationsParams) -> PaginatedResponse
  • get(conversation_id: str) -> Conversation
  • update(conversation_id: str, data: dict) -> Conversation
  • delete(conversation_id: str) -> None
  • get_tree(conversation_id: str) -> ConversationTree

Messages Resource

  • send(conversation_id: str, data: SendMessageRequest) -> SendMessageResponse
  • stream(conversation_id: str, data: SendMessageRequest, on_chunk: Callable, on_complete: Callable) -> None
  • list(conversation_id: str, branch_id: str) -> List[Message]
  • update(message_id: str, content: str) -> Message
  • delete(message_id: str) -> None

Branches Resource

  • list(conversation_id: str) -> List[Branch]
  • create(conversation_id: str, data: CreateBranchRequest) -> Branch
  • fork(conversation_id: str, data: ForkConversationRequest) -> Branch
  • update(conversation_id: str, branch_id: str, data: dict) -> Branch
  • delete(conversation_id: str, branch_id: str) -> None
  • get_messages(conversation_id: str, branch_id: str) -> List[Message]
  • merge(conversation_id: str, branch_id: str) -> Branch

Checkpoints Resource

  • list(conversation_id: str, branch_id: Optional[str] = None) -> List[Checkpoint]
  • create(conversation_id: str, branch_id: str, anchor_message_id: str) -> Checkpoint
  • delete(checkpoint_id: str) -> None
  • recreate(checkpoint_id: str) -> Checkpoint

Type Definitions

The SDK includes comprehensive type definitions using TypedDict:

  • Conversation
  • Message
  • MessageMetadata (includes checkpoint-related fields)
  • Branch
  • Checkpoint
  • CreateConversationRequest
  • SendMessageRequest
  • SendMessageResponse
  • CreateBranchRequest
  • ForkConversationRequest
  • CheckpointCreateRequest
  • CheckpointListResponse
  • ConversationTree
  • TreeNode
  • ListConversationsParams
  • PaginatedResponse
  • StreamChunk

Development

Setup

git clone https://github.com/chatroutes/chatroutes-python-sdk.git
cd chatroutes-python-sdk
pip install -e ".[dev]"

Running Tests

pytest

Type Checking

mypy chatroutes

Code Formatting

black chatroutes

License

MIT License - see LICENSE file for details

Support

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

chatroutes-0.2.2.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

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

chatroutes-0.2.2-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file chatroutes-0.2.2.tar.gz.

File metadata

  • Download URL: chatroutes-0.2.2.tar.gz
  • Upload date:
  • Size: 14.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for chatroutes-0.2.2.tar.gz
Algorithm Hash digest
SHA256 06212688c687308deb892368586d8f7087dc98bb8a3ff2ef7c6c6c524e1a1a90
MD5 8ec50470bc4329ee1286a85a5fe66a3a
BLAKE2b-256 87fe924607100f4da1f18b6673cfb8759270f262e8b9ad8a03f1169e1bdeb16d

See more details on using hashes here.

File details

Details for the file chatroutes-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: chatroutes-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 14.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for chatroutes-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 362a69d2c52e8a62e4c51c34420783fa85428ee85c015941b2d2ebdc39596755
MD5 9a2cbd0d6aa28631664bf746dfd73f24
BLAKE2b-256 01b55c6f87eedfda080e03497c571b90d1242d61a00cdd09d04374af73e4af67

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