Metadata-Version: 2.4
Name: synth-ai
Version: 0.11.0
Summary: Python-only SDK for Synth containers, tunnels, and container pools
Author-email: Synth AI <josh@usesynth.ai>
License-Expression: MIT
Project-URL: Homepage, https://github.com/synth-laboratories/synth-ai
Project-URL: Repository, https://github.com/synth-laboratories/synth-ai
Project-URL: Issues, https://github.com/synth-laboratories/synth-ai/issues
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic>=2.0.0
Requires-Dist: pynacl>=1.5.0
Requires-Dist: click<8.2,>=8.1.7
Requires-Dist: httpx>=0.28.1
Provides-Extra: schemas
Provides-Extra: providers
Requires-Dist: anthropic>=0.42.0; extra == "providers"
Requires-Dist: groq>=0.30.0; extra == "providers"
Requires-Dist: google-genai>=1.26.0; extra == "providers"
Provides-Extra: dev
Requires-Dist: build>=1.2.2.post1; extra == "dev"
Requires-Dist: fastapi>=0.115.12; extra == "dev"
Requires-Dist: uvicorn>=0.34.2; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Requires-Dist: keyring>=24.0.0; extra == "dev"
Requires-Dist: pytest>=8.3.3; extra == "dev"
Requires-Dist: pytest-xdist>=3.6.1; extra == "dev"
Requires-Dist: pytest-timeout>=2.3.1; extra == "dev"
Requires-Dist: pytest-asyncio>=0.24.0; extra == "dev"
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
Requires-Dist: coverage[toml]>=7.3.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: papermill>=2.6.0; extra == "dev"
Requires-Dist: nest_asyncio>=1.6.0; extra == "dev"
Provides-Extra: all
Requires-Dist: anthropic>=0.42.0; extra == "all"
Requires-Dist: groq>=0.30.0; extra == "all"
Requires-Dist: google-genai>=1.26.0; extra == "all"
Provides-Extra: analytics
Requires-Dist: pandas>=2.2.3; extra == "analytics"
Dynamic: license-file

# Synth AI

<!-- CI release pins: PyPI-0.11.0-orange synth-ai==0.11.0 -->

[![image](https://img.shields.io/pypi/v/synth-ai.svg)](https://pypi.org/project/synth-ai/)
[![image](https://img.shields.io/pypi/l/synth-ai.svg)](https://pypi.org/project/synth-ai/)
[![image](https://img.shields.io/pypi/pyversions/synth-ai.svg)](https://pypi.org/project/synth-ai/)

Python-only SDK and CLI for Synth's containers platform.

The stable surface is intentionally narrow:

- `synth_ai.sdk.containers`
- `synth_ai.sdk.tunnels`
- `synth_ai.sdk.pools`
- `synth_ai.sdk.horizons_private`
- `synth_ai.sdk.managed_agents_anthropic`
- `synth_ai.client.SynthClient`

Legacy optimization, inference, graphs, verifiers, managed-research, and Rust-backed
modules have been archived under `../research/old/synth_ai` and are no longer part of the
supported import surface.

## Stable API

```python
from synth_ai import SynthClient

client = SynthClient(api_key="sk_...")
client.containers.list()
client.tunnels.list()
client.pools.list()
client.horizons_private.create_runtime({"name": "hp-runtime"})
client.managed_agents.health()
```

Canonical backend paths:

- `/v1/containers/*`
- `/v1/tunnels/*`
- `/v1/pools/*`
- `/v1/rollouts/*`
- `/api/managed-agents/anthropic/v1/*`

## Product surfaces

Use this split to pick the right client quickly:

| Surface | Client | Backend path family | Use when |
| --- | --- | --- | --- |
| Pools / Rhodes | `client.pools` and `client.horizons_private` | `/v1/pools/*`, `/v1/rollouts/*` | You need repeatable pool/task/rollout execution and rollout artifacts/usage. |
| Managed Agents (Anthropic view) | `client.managed_agents` | `/api/managed-agents/anthropic/v1/*` | You need live managed-agents session APIs through backend BFF proxy. |

## Local development

```bash
uv sync --group dev
uv run ruff format --check .
uv run ruff check .
# ty: use the same command as `.github/workflows/ci.yml` → job `type-check` (Lefthook runs it on staged files).
uv run ty check
```

Use **`uv run`** for Python tools (not bare **`python`** / **`python3`**). **Ruff** handles both formatting and linting for `synth_ai/`; **ty** type-checks `synth_ai/` (`[tool.ty.src]` in `pyproject.toml`). A plain `ty check` may be stricter than CI; match CI when debugging PR failures.

Optional: install [Lefthook](https://github.com/evilmartians/lefthook) and run **`lefthook install`** to run **`uv run ruff format`**, **`uv run ruff check`**, and **`uv run ty check`** on staged `.py` files (see `lefthook.yml`).
