Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

BitRouter Python SDK

Python SDK for interacting with BitRouter - the zero-ops LLM gateway for autonomous agents.

Installation

# Core client only
pip install bitrouter

# With Solana support
pip install bitrouter[solana]

# With Ethereum support
pip install bitrouter[evm]

# With OpenAI provider
pip install bitrouter[openai]

# Everything
pip install bitrouter[all]

Usage

Solana (SVM) Example

import asyncio
from solders.keypair import Keypair
import base58

from bitrouter import BitRouterClient, BitRouterClientOptions
from bitrouter.svm import SvmClientSigner, SOLANA_MAINNET_CHAIN_ID


async def main():
    # Create a Solana keypair from your private key
    secret = base58.b58decode("your-base58-private-key")
    keypair = Keypair.from_bytes(secret)

    # Create the client signer
    signer = SvmClientSigner(keypair=keypair, chain_id=SOLANA_MAINNET_CHAIN_ID)

    # Create the BitRouter client
    async with BitRouterClient(BitRouterClientOptions(
        signer=signer,
        base_url="https://app.bitrouter.ai",
    )) as client:
        # Query your session balance
        balance = await client.session_balance()
        print(f"Balance: {balance.balance_usd} USD")

        # Make a chat completion request (OpenAI-compatible)
        response = await client.chat_completions({
            "model": "openai/gpt-4o-mini",
            "messages": [{"role": "user", "content": "Hello, what is BitRouter?"}],
        })

        if response.status_code == 200:
            data = response.json()
            print(data["choices"][0]["message"]["content"])

asyncio.run(main())

Ethereum (EVM) Example

import asyncio
from eth_account import Account

from bitrouter import BitRouterClient, BitRouterClientOptions
from bitrouter.evm import EvmClientSigner, EVM_MAINNET_CHAIN_ID


async def main():
    # Create an EVM account from your private key
    account = Account.from_key("0x...")

    # Create the client signer
    signer = EvmClientSigner(account=account, chain_id=EVM_MAINNET_CHAIN_ID)

    # Create the BitRouter client
    async with BitRouterClient(BitRouterClientOptions(
        signer=signer,
        base_url="https://app.bitrouter.ai",
    )) as client:
        balance = await client.session_balance()
        print(f"Balance: {balance.balance_usd} USD")

asyncio.run(main())

OpenAI Provider

Use BitRouter as a drop-in OpenAI replacement:

import asyncio
from solders.keypair import Keypair
import base58

from bitrouter.svm import SvmClientSigner, SOLANA_MAINNET_CHAIN_ID
from bitrouter.provider import create_openai_client


async def main():
    secret = base58.b58decode("your-base58-private-key")
    keypair = Keypair.from_bytes(secret)
    signer = SvmClientSigner(keypair=keypair, chain_id=SOLANA_MAINNET_CHAIN_ID)

    # Get a standard OpenAI client that authenticates via wallet
    openai_client = create_openai_client(signer)

    response = await openai_client.chat.completions.create(
        model="openai/gpt-4o-mini",
        messages=[{"role": "user", "content": "What is BitRouter?"}],
    )
    print(response.choices[0].message.content)

asyncio.run(main())

Streaming

import asyncio
import json
from bitrouter import BitRouterClient, BitRouterClientOptions
from bitrouter.svm import SvmClientSigner, SOLANA_MAINNET_CHAIN_ID


async def main():
    # ... create signer as above ...

    async with BitRouterClient(BitRouterClientOptions(
        signer=signer,
        base_url="https://app.bitrouter.ai",
    )) as client:
        response = await client.chat_completions({
            "model": "openai/gpt-4o-mini",
            "messages": [{"role": "user", "content": "Tell me a story"}],
            "stream": True,
        })

        async for line in response.aiter_lines():
            if line.startswith("data: ") and line[6:] != "[DONE]":
                chunk = json.loads(line[6:])
                content = chunk["choices"][0]["delta"].get("content", "")
                print(content, end="", flush=True)

asyncio.run(main())

Local Development

client = BitRouterClient(BitRouterClientOptions(
    signer=signer,
    base_url="http://localhost:8000",
    siwx_domain="app.bitrouter.ai",  # Override SIWx signing domain
))

Authentication

The SDK uses SIWx (Sign-In-With-X) for wallet-based authentication. Each request is automatically signed with your wallet.

Payments

The SDK integrates with x402 for seamless micropayments when making API requests that require payment.

License

ISC