System One Adapter
A drop-in replacement for typesafe_sdk's system_one evaluation API, backed by LLM
APIs instead of TypeSafe.
Useful for comparing TypeSafe against an LLM on cost/speed/intelligence.
Install
The provider SDKs are optional extras — install the one(s) you use:
pip install 'system-one-adapter[openai]' # OpenAI-compatible providers
pip install 'system-one-adapter[anthropic]' # native Anthropic
Usage
Unlike TypeSafeClient, the client is configured with how the LLM should answer, and
each call names a provider alongside the model:
from system_one_adapter import SystemOneAdapterClient, Noul, Score, Choice
client = SystemOneAdapterClient(
structured_outputs=True, # use the provider's native structured-output mode
llm_answer_mode="probabilities", # or "discrete"
normalize_probabilities=True,
)
response = client.system_one(
state="This book was a delight to read.",
questions={"positive": Noul(instructions="The book review is positive.")},
provider="openai", # "openai" or "anthropic"
model="gpt-4o-mini",
)
provider and model may also be set on the constructor as defaults. provider
is required unless model is a provider instance (e.g. a custom OpenAI-compatible
endpoint):
from system_one_adapter.providers.openai import OpenAIProvider
client.system_one(state, questions, model=OpenAIProvider("grok-4", base_url="https://api.x.ai/v1"))
OpenAI's endpoint uses the Responses API, with strict JSON Schema for structured
output and JSON mode for prompted output. Custom endpoints (including
OPENAI_BASE_URL) default to Chat Completions. Pass api="responses" or
api="chat_completions" to OpenAIProvider / AsyncOpenAIProvider to select
explicitly, for example when using an OpenAI proxy. Responses are requested with
store=False; corrective retries send the conversation history with each request.
For larger Anthropic evaluations, configure the output token limit on the provider (default: 4,096 tokens):
from system_one_adapter.providers.anthropic import AnthropicProvider
client.system_one(state, questions, model=AnthropicProvider("claude-haiku-4-5", max_tokens=8192))
AsyncAnthropicProvider accepts the same option. A response that reaches the limit
raises typesafe_sdk.TypeSafeError with instructions to increase max_tokens or
request fewer questions; it does not consume malformed-output retries.
Response
The response is a typesafe_sdk.SystemOneResponse subclass — same answers and typed
views — with two additions:
response.usageaddsinput_tokens_total/output_tokens_total(across retries),n_retries,n_retries_malformed_structure, andlatency.response.debugholdsllm_attempts,retry_reasons, and probability-normalization diagnostics.
llm_attempts records every provider call in order, including transient failures and
malformed responses. Each entry contains a snapshot of messages,
model_request_parameters (schema and structured), llm_response, and debug_info
with the model, provider, and any error. The built-in providers also include the exact
SDK request arguments, the full provider response in llm_response, and the API and
finish reason in debug_info. Custom providers return their text and token counts in
llm_response. Calls that fail before returning a model response leave it as None.
Terminal TypeSafeError exceptions expose the same attempt history in error.debug.
To replay an attempt through the same configured provider (use await for async):
from system_one_adapter.providers import Message
attempt = response.debug["llm_attempts"][0]
result = provider.request(
[Message(**message) for message in attempt["messages"]],
**attempt["model_request_parameters"],
)
It is a msgspec.Struct like every SDK response, so serialize it the same way (there is
no model_dump):
import msgspec
print(msgspec.json.encode(response).decode())
Async
AsyncSystemOneAdapterClient mirrors the sync client with await client.system_one(...)
and async with.
Options
| Option | Meaning |
|---|---|
structured_outputs |
Use the provider's native structured output, else prompt for JSON and validate client-side (works with any chat model). |
llm_answer_mode |
"probabilities" (per-label distribution) or "discrete" (one value per question). |
normalize_probabilities |
Rescale invalid LLM probability distributions to sum to 1. |
n_retry_malformed_structure |
Corrective retries when the model's output fails schema validation. |
retry |
typesafe_sdk.RetryPolicy for transient provider failures. |
The transient retry count and time budget apply separately to each provider request.
Corrective requests share the evaluation's n_retry_malformed_structure allowance
and preserve the earlier responses and correction messages.
Release files for system-one-adapter 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| system_one_adapter-0.1.3.tar.gz | 20.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| system_one_adapter-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.6 kB
Release files / system_one_adapter-0.1.3.tar.gz
| Download URL | system_one_adapter-0.1.3.tar.gz |
|---|---|
| Size | 20.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eccb766faa2a21b983aa5aaf7111e55f75eab7f489f3904f4935d1eb5ee3ff1d
|
|
BLAKE2b-256 checksum How to use checksums |
0b3d2391eef7371eedadde8bf8a49fd0073bc315096f724c0f566dba1f571aae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency logRelease files / system_one_adapter-0.1.3-py3-none-any.whl
| Download URL | system_one_adapter-0.1.3-py3-none-any.whl |
|---|---|
| Size | 26.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d0d75848851bb436c63db31e105717ff407f8018fbca8144a128c5d31e77e50e
|
|
BLAKE2b-256 checksum How to use checksums |
3472ad87ecb0c4f914e9c5273ada91cd85207ecb2084cbce9338b2f876445ce6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 15, 2026.
Transparency log