Skip to main content

commb-agent

Official Python SDK for the CommB platform — connects standalone CommB bot engines to the CommB collector dashboard via telemetry tracking and remote config sync.

PyPI version License: MIT

Installation

pip install commb-agent
# or
uv add commb-agent

How it works

CommB collector Dashboard (Supabase)
       ▲▼  commb-agent SDK
CommB Engine (standalone FastAPI bot)
  • CommB calls get_config() to pull system prompt, knowledge docs, and catalog from CommB collector.
  • CommB calls track() after every message/order to push telemetry back.
  • CommB calls sync_conversation() to log 48h active session chat history to CommB collector CRM.
  • FastAPI streaming endpoints use stream_chat() for SSE responses to the Telegram Mini App.

Quick Start (Sync — for scripts & workers)

from commb_agent import CommBClient

client = CommBClient(
    api_key="snx_bot_xxxx",
    host="https://commb.app",
)

Quick Start (Async — for FastAPI)

from commb_agent import AsyncCommBClient

client = AsyncCommBClient(
    api_key="snx_bot_xxxx",
    host="https://commb.app",
)

API Reference

get_config() / await client.get_config() — Pull config from CommB collector

# Sync
config_resp = client.get_config()

# Async
config_resp = await client.get_config()

print(config_resp.config.system_prompt)
print(config_resp.config.model_name)        # "gemini-2.5-flash"
print(len(config_resp.knowledge_docs))      # RAG docs
print(len(config_resp.catalog_items))       # Product catalog

track() / await client.track() — Push telemetry

Non-blocking. Batches and flushes in the background. Never raises.

# Sync (thread-safe, fire-and-forget)
client.track(
    channel="telegram",
    customer_id="tg_123456",
    event="order_created",
    amount=45000.0,
    metadata={"order_id": "ORD-001"},
)

# Async
await client.track(
    channel="whatsapp",
    customer_id="+2348012345678",
    event="message_received",
)

sync_conversation() / await client.sync_conversation() — 48h Chat Transcript Sync

# Sync
client.sync_conversation(
    channel="whatsapp",
    customer_id="+2348012345678",
    messages=[
        {"role": "user", "content": "How much is the blue dress?"},
        {"role": "assistant", "content": "The blue dress is ₦15,000."}
    ]
)

# Async
await client.sync_conversation(
    channel="telegram",
    customer_id="tg_123456",
    messages=[
        {"role": "user", "content": "Is shipping free?"},
        {"role": "assistant", "content": "Yes, on orders above ₦50,000."}
    ]
)

stream_chat() — Stream AI responses (SSE)

# Sync
for chunk in client.stream_chat("What dresses do you have?", user_id="user_123"):
    print(chunk, end="", flush=True)

# Async (FastAPI SSE endpoint)
async for chunk in client.stream_chat("What dresses do you have?", user_id="user_123"):
    yield f"data: {chunk}\n\n"

ping() / await client.ping() — Health check

is_up = client.ping()          # sync
is_up = await client.ping()    # async

get_bot() / await client.get_bot() — Bot identity

bot = client.get_bot()
print(bot.name)      # "Elena Luxe Bot"
print(bot.reseller)  # "Sannex Digital Agency"

FastAPI CommB Engine Integration

# commb_engine/main.py
import os
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from commb_agent import AsyncCommBClient, ChatMessage

commb = AsyncCommBClient(
    api_key=os.environ["BOT_API_KEY"],
    host=os.environ.get("COMMB_COLLECTOR_URL", "https://commb.app"),
)

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Pull config from CommB collector on startup
    config = await commb.get_config()
    app.state.system_prompt = config.config.system_prompt
    app.state.knowledge_docs = config.knowledge_docs
    app.state.catalog_items = config.catalog_items
    yield
    await commb.close()

app = FastAPI(lifespan=lifespan)

@app.post("/v1/chat")
async def chat(message: str, user_id: str):
    async def event_stream():
        async for chunk in commb.stream_chat(message, user_id):
            yield f"data: {chunk}\n\n"
        yield "data: [DONE]\n\n"

    # Track the conversation event
    await commb.track(
        channel="telegram",
        customer_id=user_id,
        event="message_received",
    )

    return StreamingResponse(event_stream(), media_type="text/event-stream")

Context Manager (Sync)

with CommBClient(api_key="snx_bot_xxxx") as client:
    config = client.get_config()
    # ... use client
# auto-flushes and closes on exit

Context Manager (Async)

async with AsyncCommBClient(api_key="snx_bot_xxxx") as client:
    config = await client.get_config()
    # ... use client

Environment Variables

BOT_API_KEY=snx_bot_xxxx              # From CommB collector Bot Settings
COMMB_COLLECTOR_URL=https://commb.app  # CommB collector host

Response Models (Pydantic v2)

All responses are typed Pydantic models:

from commb_agent import CommBConfigResponse, BotConfig, KnowledgeDoc, CatalogItem, BotInfo

License

MIT — Sannex Tech LTD

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

commb_agent-0.3.0.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

commb_agent-0.3.0-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file commb_agent-0.3.0.tar.gz.

File metadata

  • Download URL: commb_agent-0.3.0.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.7

File hashes

Hashes for commb_agent-0.3.0.tar.gz
Algorithm Hash digest
SHA256 7f135ec0330f17e2847b01a46df331ca66c0e66a0303ccf7e2d7463365465ee7
MD5 a5670b0a0ba60f2f024a7c053cab529c
BLAKE2b-256 0c00003932cb0247ee5ef3aa43c3cb2bd5b28a11290291c6e541c21a296b351e

See more details on using hashes here.

File details

Details for the file commb_agent-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: commb_agent-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.7

File hashes

Hashes for commb_agent-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2994ff024e47d1ab7e9c043be43150d726e4197624a1dbd42e3238008a0d1584
MD5 95decd87db4549f5e4b8359371d28f54
BLAKE2b-256 f75928e884af44776595a91f1d849992abf2cf1957ee1678525e5fe2acc7bf61

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 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