Metadata-Version: 2.4
Name: dobby-ai-sdk
Version: 0.1.0
Summary: Official Python SDK for the Dobby AI Platform — Home for your AI agents
Project-URL: Homepage, https://dobby-ai.com
Project-URL: Documentation, https://dobby-ai.com/docs/sdk
Project-URL: Repository, https://github.com/gil-dobby/dobby-sdk-python
Author-email: Dobby AI <dev@dobby-ai.com>
License-Expression: MIT
Keywords: a2a,agents,ai,dobby,gateway,llm,mcp
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Requires-Dist: httpx>=0.25.0
Requires-Dist: openai>=1.0.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: dev
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.3.0; extra == 'dev'
Description-Content-Type: text/markdown

# Dobby SDK for Python

Official Python SDK for the [Dobby AI Platform](https://dobby-ai.com) — Home for your AI agents.

## Installation

```bash
pip install dobby-ai-sdk
```

## Quick Start

```python
from dobby_sdk import DobbyClient

client = DobbyClient(api_key="gk_user_...")

# LLM calls (OpenAI-compatible)
response = client.chat.completions.create(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello from Dobby!"}],
)
print(response.choices[0].message.content)

# Streaming
stream = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Explain AI agents"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")
```

## Task Management

```python
# Create a task
task = client.tasks.create(
    title="Review PR #42",
    priority="high",
    agent_name="dobby-code-reviewer-agent",
)

# List pending tasks
tasks = client.tasks.list(status="pending")

# Approve a task (HITL)
client.approvals.approve(task["id"], comment="Looks good!")
```

## Agent Fleet

```python
# List all agents
agents = client.agents.list()

# Register an external agent
agent = client.agents.register(
    display_name="Research Agent",
    framework="crewai",
    protocol="a2a",
    endpoint_url="https://my-agent.example.com",
)

# Pause/resume
client.agents.pause("agent_abc123")
```

## Cost Tracking

```python
# Organization cost summary
costs = client.costs.summary(period="30d")

# Per-agent breakdown
agent_costs = client.costs.by_agent(period="7d")
```

## Async Support

```python
from dobby_sdk import AsyncDobbyClient

async with AsyncDobbyClient(api_key="gk_user_...") as client:
    response = await client.chat.completions.create(
        model="claude-sonnet-4-20250514",
        messages=[{"role": "user", "content": "Hello async!"}],
    )
```

## Configuration

```python
client = DobbyClient(
    api_key="gk_user_...",         # or DOBBY_API_KEY env var
    base_url="https://dobby-ai.com",  # or DOBBY_BASE_URL
    org_id="org_...",              # or DOBBY_ORG_ID
    tenant_id="tenant_...",        # or DOBBY_TENANT_ID
    timeout=120.0,
    max_retries=2,
)
```

## Error Handling

```python
from dobby_sdk import DobbyAuthError, DobbyRateLimitError, DobbyBudgetExceededError

try:
    response = client.chat.completions.create(...)
except DobbyAuthError:
    print("Invalid or expired API key")
except DobbyRateLimitError as e:
    print(f"Rate limited. Retry after: {e.retry_after}s")
except DobbyBudgetExceededError:
    print("Organization budget limit reached")
```
