Skip to content

Python SDK

FastAgentic provides a Python SDK for interacting with deployed agent endpoints.

Installation

pip install fastagentic

Quick Start

from fastagentic import FastAgenticClient

# Create client
client = FastAgenticClient(
    base_url="http://localhost:8000",
    api_key="your-api-key",
)

# Run an agent endpoint
response = client.run("/chat", input={"message": "Hello!"})
print(response.output)

Configuration

from fastagentic import ClientConfig, FastAgenticClient

config = ClientConfig(
    base_url="http://api.example.com",
    api_key="your-api-key",
    timeout=60.0,           # Request timeout in seconds
    max_retries=3,          # Number of retries on failure
    retry_delay=1.0,        # Initial delay between retries
)

client = FastAgenticClient(config=config)

Synchronous Client

from fastagentic import FastAgenticClient

client = FastAgenticClient(base_url="http://localhost:8000")

# Simple run
response = client.run("/chat", input={"message": "Hello"})

# With options
response = client.run(
    "/chat",
    input={"message": "Hello"},
    timeout=30.0,
    metadata={"user_id": "123"},
)

# Check status
print(response.status)      # RunStatus.COMPLETED
print(response.is_success)  # True
print(response.output)      # {"reply": "Hi there!"}

# Get a specific run
run = client.get_run("run-abc123")

Async Client

import asyncio
from fastagentic import AsyncFastAgenticClient

async def main():
    client = AsyncFastAgenticClient(base_url="http://localhost:8000")

    # Run endpoint
    response = await client.run("/chat", input={"message": "Hello"})
    print(response.output)

    # Close client when done
    await client.close()

asyncio.run(main())

Context Manager

async with AsyncFastAgenticClient(base_url="http://localhost:8000") as client:
    response = await client.run("/chat", input={"message": "Hello"})

Streaming

from fastagentic import FastAgenticClient, StreamEventType

client = FastAgenticClient()

# Stream responses
for event in client.stream("/chat", input={"message": "Tell me a story"}):
    if event.type == StreamEventType.TOKEN:
        print(event.data, end="", flush=True)
    elif event.type == StreamEventType.TOOL_CALL:
        print(f"\n[Tool: {event.data['name']}]")
    elif event.type == StreamEventType.DONE:
        print("\n[Complete]")

Async Streaming

async for event in client.stream("/chat", input={"message": "Hello"}):
    if event.type == StreamEventType.TOKEN:
        print(event.data, end="")

Request/Response Models

RunRequest

from fastagentic import RunRequest

request = RunRequest(
    endpoint="/chat",
    input={"message": "Hello"},
    stream=False,
    timeout=60.0,
    metadata={"session_id": "abc"},
)

RunResponse

from fastagentic import RunResponse, RunStatus

# Response properties
response.run_id         # Unique run identifier
response.status         # RunStatus enum
response.output         # Response data
response.error          # Error message (if failed)
response.usage          # Token usage stats
response.duration_ms    # Request duration

# Status checks
response.is_complete    # True if finished
response.is_success     # True if completed successfully

StreamEvent

from fastagentic import StreamEvent, StreamEventType

# Event types
StreamEventType.TOKEN       # Text token
StreamEventType.TOOL_CALL   # Tool invocation
StreamEventType.TOOL_RESULT # Tool response
StreamEventType.MESSAGE     # Complete message
StreamEventType.ERROR       # Error occurred
StreamEventType.DONE        # Stream complete

Tool Handling

from fastagentic import ToolCall, ToolResult

# Tool call from response
call = ToolCall(
    id="call-123",
    name="search",
    arguments={"query": "weather"},
)

# Tool result to send back
result = ToolResult(
    call_id="call-123",
    result={"temperature": 72},
)

# Or error result
error_result = ToolResult(
    call_id="call-123",
    error="Search service unavailable",
)

Error Handling

from fastagentic import (
    FastAgenticClient,
    FastAgenticError,
    AuthenticationError,
    RateLimitError,
    ValidationError,
    TimeoutError,
    ServerError,
)

client = FastAgenticClient()

try:
    response = client.run("/chat", input={"message": "Hello"})
except AuthenticationError as e:
    print(f"Auth failed: {e}")
except RateLimitError as e:
    print(f"Rate limited. Retry after: {e.retry_after}s")
except ValidationError as e:
    print(f"Invalid input: {e.errors}")
except TimeoutError as e:
    print(f"Request timed out after {e.timeout}s")
except ServerError as e:
    print(f"Server error: {e}")
except FastAgenticError as e:
    print(f"API error: {e}")

Retry Configuration

The client automatically retries failed requests:

from fastagentic import ClientConfig

config = ClientConfig(
    max_retries=3,          # Max retry attempts
    retry_delay=1.0,        # Initial delay (seconds)
    retry_backoff=2.0,      # Exponential backoff multiplier
    retry_codes=[429, 503], # HTTP codes to retry
)

Custom Headers

from fastagentic import ClientConfig

config = ClientConfig(
    api_key="your-key",
    headers={
        "X-Custom-Header": "value",
        "X-Request-ID": "req-123",
    },
)

Usage Statistics

response = client.run("/chat", input={"message": "Hello"})

if response.usage:
    print(f"Input tokens: {response.usage.input_tokens}")
    print(f"Output tokens: {response.usage.output_tokens}")
    print(f"Total tokens: {response.usage.total_tokens}")
    print(f"Cost: ${response.usage.cost:.4f}")
    print(f"Model: {response.usage.model}")