Skip to content

TypeSafe Python SDK

Install the TypeSafe Python SDK and get started with asynchronous or synchronous API calls.

Browse the Python SDK source on GitHub.

Asynchronous and synchronous Python clients for the TypeSafe API. Learn how to use TypeSafe here.

Quickstart

  1. Install the SDK:

    === "uv"

    ```sh
    uv add typesafe-sdk
    ```
    
    pip install typesafe-sdk
    

    Add the http2 extra (typesafe-sdk[http2]) to enable HTTP/2 support.

  2. Set TYPESAFE_API_KEY in your environment (create it here)

  3. Call the System One API:

=== "Async"

With [AsyncTypeSafeClient](api/clients/async.md):

```python
from typesafe_sdk import AsyncTypeSafeClient, Choice, Noul, Score

async def main() -> None:
    async with AsyncTypeSafeClient() as client:
        response = await client.system_one(
            state={"document": "I was charged twice. Please fix this ASAP."},
            questions={
                "billing": Noul(instructions="Is this ticket about billing?"),
                "tone": Choice(
                    instructions="What is the customer's tone?",
                    criteria={"calm": None, "frustrated": None, "angry": None},
                ),
                "urgency": Score(
                    instructions="How urgent is this ticket?",
                    criteria=["can wait", "this week", "today"],
                ),
            },
        )

    print(response.nouls["billing"].noul)
    print(response.choices["tone"].choice)
    print(response.scores["urgency"].score)
```

With TypeSafeClient:

from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

with TypeSafeClient() as client:
    response = client.system_one(
        state={"document": "I was charged twice. Please fix this ASAP."},
        questions={
            "billing": Noul(instructions="Is this ticket about billing?"),
            "tone": Choice(
                instructions="What is the customer's tone?",
                criteria={"calm": None, "frustrated": None, "angry": None},
            ),
            "urgency": Score(
                instructions="How urgent is this ticket?",
                criteria=["can wait", "this week", "today"],
            ),
        },
    )

print(response.nouls["billing"].noul)
print(response.choices["tone"].choice)
print(response.scores["urgency"].score)

What's next

Visit the Usage guide to learn more about patterns such as typed responses, model selection, retries, HTTP/2, or error handling.