Документация

Асинхронный клиент

Используйте AsyncTypeSafeClient, чтобы задавать вопросы, перечислять модели и настраивать асинхронные запросы к API TypeSafe.

typesafe_sdk.AsyncTypeSafeClient

AsyncTypeSafeClient(
    *,
    api_key: str | None = None,
    model: str | None = None,
    retry: RetryPolicy | None = None,
    timeout: float
    | httpx2.Timeout
    | None = None,
    headers: Mapping[str, str] | None = None,
    transport: httpx2.AsyncBaseTransport
    | None = None,
    http_client: httpx2.AsyncClient
    | None = None,
    base_url: str | None = None,
)

Создаёт асинхронный HTTP-клиент для API TypeSafe AI.

Явные параметры имеют приоритет над переменными окружения; пустые значения окружения или значения только из пробелов игнорируются.

Параметры:

  • api_key (str | None, по умолчанию: None ) –

    Обязательный ключ API; его можно задать через переменную окружения TYPESAFE_API_KEY. Начальные и конечные пробелы удаляются. Пустые ключи, внутренние пробелы, управляющие символы и символы, не входящие в ASCII, отклоняются.

  • model (str | None, по умолчанию: None ) –

    Имя модели; его можно задать через переменную окружения TYPESAFE_DEFAULT_MODEL.

  • retry (RetryPolicy | None, по умолчанию: None ) –

    RetryPolicy, управляющий поведением повторов; доступные параметры и их значения по умолчанию см. в RetryPolicy. Передайте RetryPolicy(max_retries=0), чтобы отключить повторы.

  • timeout (float | httpx2.Timeout | None, по умолчанию: None ) –

    Таймаут для операций HTTP. Наследует http_client.timeout, когда он задан, иначе значение по умолчанию из SDK.

  • headers (Mapping[str, str] | None, по умолчанию: None ) –

    Дополнительные заголовки запроса.

  • transport (httpx2.AsyncBaseTransport | None, по умолчанию: None ) –

    Необязательный пользовательский транспорт HTTP; закрывается при закрытии этого клиента SDK.

  • http_client (httpx2.AsyncClient | None, по умолчанию: None ) –

    Необязательный httpx2.AsyncClient; взаимоисключающий с transport. Закрывается при закрытии этого клиента SDK.

  • base_url (str | None, по умолчанию: None ) –

    Корень API; его можно задать через переменную окружения TYPESAFE_BASE_URL.

Исключения:

  • TypeSafeError –

    Ключ API отсутствует или недопустим, либо недопустим таймаут.

  • ValueError –

    Заданы одновременно transport и http_client.

Примеры:

import asyncio

from typesafe_sdk import AsyncTypeSafeClient, Choice, Noul

async def main() -> None:
    async with AsyncTypeSafeClient() as client:
        result = await client.system_one(
            state="I was charged twice. Please help.",
            questions={
                "billing": Noul(instructions="Is this about billing?"),
                "tone": Choice(
                    instructions="What is the tone?",
                    criteria={"calm": None, "angry": None},
                ),
            },
        )
        assert 0 <= result.nouls["billing"].noul <= 1
        assert result.choices["tone"].choice in {"calm", "angry"}

asyncio.run(main())

models

cached property

models: AsyncModels

Аксессор к ресурсу Models API.

Примеры:

async def main() -> None:
    async with AsyncTypeSafeClient() as client:
        models = await client.models.list()

system_one

async

system_one(
    state: JSONContent,
    questions: Mapping[str, Question],
    *,
    model: str | None = None,
    retry: RetryPolicy | None = None,
    timeout: float
    | httpx2.Timeout
    | None = None,
    extra_headers: Mapping[str, str]
    | None = None,
    extra_body: Mapping[str, JSONValue | None]
    | None = None,
    response_model: type[ResponseT]
    | None = None,
) -> SystemOneResponse | ResponseT
system_one(
    state: JSONContent,
    questions: Mapping[str, Question],
    *,
    model: str | None = None,
    retry: RetryPolicy | None = None,
    timeout: float
    | httpx2.Timeout
    | None = None,
    extra_headers: Mapping[str, str]
    | None = None,
    extra_body: Mapping[str, JSONValue | None]
    | None = None,
    response_model: None = None,
) -> SystemOneResponse
system_one(
    state: JSONContent,
    questions: Mapping[str, Question],
    *,
    model: str | None = None,
    retry: RetryPolicy | None = None,
    timeout: float
    | httpx2.Timeout
    | None = None,
    extra_headers: Mapping[str, str]
    | None = None,
    extra_body: Mapping[str, JSONValue | None]
    | None = None,
    response_model: type[ResponseT],
) -> ResponseT

Отвечает на именованные вопросы о тексте или структурированном состоянии.

Подробности см. в System One.

Параметры:

  • state (JSONContent) –

    Текст, объект JSON или массив для оценки. Подробности см. в state.

  • questions (Mapping[str, Question]) –

    Непустое отображение имён на объекты вопросов или необработанные словари.

  • model (str | None, по умолчанию: None ) –

    Переопределение модели; None наследует значение клиента по умолчанию.

  • retry (RetryPolicy | None, по умолчанию: None ) –

    Необязательная политика повторов, переопределяющая значение уровня клиента только для этого вызова.

  • timeout (float | httpx2.Timeout | None, по умолчанию: None ) –

    Необязательный таймаут для операций HTTP, переопределяющий значение уровня клиента только для этого вызова, в секундах.

  • extra_headers (Mapping[str, str] | None, по умолчанию: None ) –

    Дополнительные заголовки запроса.

  • extra_body (Mapping[str, JSONValue | None] | None, по умолчанию: None ) –

    Дополнительные поля тела запроса верхнего уровня, поверхностно накладываемые на тело после того, как заданы state, model и questions. При слиянии побеждает последняя запись: ключ, совпадающий с state, model или questions, переопределяет его, а значения-объекты заменяются, а не сливаются глубоко.

  • response_model (type[ResponseT] | None, по умолчанию: None ) –

    Необязательный тип Pydantic BaseModel, описывающий тело JSON-ответа, включая вложенные модели ответов.

Возвращает:

  • SystemOneResponse | ResponseT –

    Экземпляр response_model или SystemOneResponse с ответами, ключи которых — имена вопросов,

  • SystemOneResponse | ResponseT –

    а также сведения о модели и расходе токенов, когда пользовательская модель не задана.

Исключения:

  • TypeSafeError –

    Список вопросов пуст или список criteria вопроса score пуст.

  • TypeSafeAPIError –

    Сервер возвращает неуспешный HTTP-ответ после всех повторов.

  • TypeSafeAPIConnectionError –

    Запрос не может установить соединение или завершается по таймауту после всех повторов.

  • TypeSafeAPIResponseValidationError –

    Тело ответа не соответствует модели ответа.

Примеры:

Создайте вопросы с именованными аргументами:

async def main() -> None:
    async with AsyncTypeSafeClient() as client:
        result = await client.system_one(
            state="I was charged twice. Please help.",
            questions={
                "billing": Noul(instructions="Is this about billing?"),
                "tone": Choice(
                    instructions="What is the tone?",
                    criteria={"calm": None, "angry": None},
                ),
            },
        )
        assert 0 <= result.nouls["billing"].noul <= 1
        assert result.choices["tone"].choice in {"calm", "angry"}

Передайте вопросы как словари:

async def main() -> None:
    async with AsyncTypeSafeClient() as client:
        result = await client.system_one(
            state={"message": "I was charged twice. Please help."},
            questions={
                "billing": {"type": "noul", "instructions": "Is this about billing?"},
                "tone": {
                    "type": "choice",
                    "instructions": "What is the tone?",
                    "criteria": {"calm": None, "angry": None},
                },
            },
        )
        assert 0 <= result.nouls["billing"].noul <= 1
        assert result.choices["tone"].choice in {"calm", "angry"}

aclose

async

aclose() -> None

Освобождает сетевые ресурсы и закрывает нижележащий HTTP-клиент, в том числе переданный извне.

Ресурс Models

Доступен через AsyncTypeSafeClient.models.

typesafe_sdk.AsyncModels

Доступ к моделям, доступным аккаунту; получается через AsyncTypeSafeClient.models.

list

async

list(
    *,
    retry: RetryPolicy | None = None,
    timeout: float
    | httpx2.Timeout
    | None = None,
    extra_headers: Mapping[str, str]
    | None = None,
) -> ListModelsResponse

Перечисляет модели, доступные аккаунту.

Параметры:

  • retry (RetryPolicy | None, по умолчанию: None ) –

    Необязательная политика повторов, переопределяющая значение уровня клиента только для этого вызова.

  • timeout (float | httpx2.Timeout | None, по умолчанию: None ) –

    Переопределение таймаута для отдельной операции; None наследует настройку клиента.

  • extra_headers (Mapping[str, str] | None, по умолчанию: None ) –

    Переопределения дополнительных заголовков запроса; аутентификация, идентификация SDK и Accept остаются защищёнными.

Возвращает:

Исключения:

  • TypeSafeAPIError –

    Сервер возвращает неуспешный HTTP-ответ после всех повторов.

  • TypeSafeAPIConnectionError –

    Запрос не может установить соединение или завершается по таймауту после всех повторов.

Примеры:

from typesafe_sdk import AsyncTypeSafeClient

async def main() -> None:
    async with AsyncTypeSafeClient() as client:
        models = await client.models.list()