Metadata-Version: 2.4
Name: synth-ai
Version: 0.10.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.10.0-orange synth-ai==0.10.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.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()
```

Canonical backend paths:

- `/v1/containers/*`
- `/v1/tunnels/*`
- `/v1/pools/*`
- `/v1/rollouts/*`

## 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`).
