daishi
Typed client for the Studio API of Daishi, an independent agent testing and evaluation platform: save scenarios, launch runs, series batches and paired experiments on your own model keys, and read the scored results.
pip install daishi
Python 3.10 or later. No dependencies: the standard library only.
Quick start
In the Studio, open Account > Developer, create an access token with runs: launch and cancel ticked, and export it:
export DAISHI_TOKEN=dsk_... # macOS, Linux
$env:DAISHI_TOKEN = "dsk_..." # Windows PowerShell
from daishi import Daishi
daishi = Daishi() # reads DAISHI_TOKEN
run = daishi.launch({
"scenario_id": "daishi:famine-v1",
"roster": [{"model": "<provider>/<model>"}, {"model": "<provider>/<model>"}],
"max_spend_usd": 5,
})["run"]
done = daishi.wait_for_run(run["run_id"])
for agent in (done["results"] or {}).get("agents", []):
print(agent["name"], agent.get("fitness_index"), agent.get("grade"))
Seats play on the provider keys stored on your account. Every plan can read and validate; creating, launching and cancelling need a paid plan.
What it does
- One method per API operation, named after its operation id:
get_run,list_runs,launch,cancel,get_batch,create_scenario,create_experiment,get_experimentand the rest. Responses are plain dicts typed asTypedDicts generated from the API's OpenAPI document, so editors and type checkers know every field. - Errors raise
DaishiErrorwith the API'scode(unknown_run,plan_quota, ...),status,message,retry_after_seconds, anddocs, a link to what the code means. - Retries are safe by construction. A 429 is retried after the seconds its
Retry-Afterheader names, and a cancel refused withrun_launchingafter a pause, on any method, because the server refused before doing anything. A gateway error or a dropped connection is retried on GET only, so a write is never sent twice. - Waiting.
wait_for_run,wait_for_batchandwait_for_experimentpoll every 30 seconds until the run, batch or experiment ends.wait_for_runalso waits for a finished run's results, which arrive when the match archives. Passtimeout=(seconds) for a deadline; it raisesTimeoutError. To be told instead of asking, set up run-end notices.
from daishi import Daishi, DaishiError
try:
daishi.get_run("run_...")
except DaishiError as err:
if err.code != "unknown_run":
raise
print(err.docs)
Options
Daishi(token=None, *, base_url="https://daishi.ai/api/v1", max_retries=3, timeout=60.0). token defaults to DAISHI_TOKEN; max_retries=0 turns retrying off; timeout is seconds per attempt.
Types
Every schema in the API is importable: Run, RunResults, Scenario, Skill, BatchReport, Experiment, ExperimentReport, the request bodies (RunBody, ScenarioBody, ExperimentBody, ...), and ErrorCode. Fields whose shape follows the scenario, the provider or the meter are JsonObject (dict[str, Any]). A few operations (me, usage, the estimates, logs and invites) answer JsonObject until the API types them; run_log answers the log's NDJSON text.
Docs
Developer docs and the API reference.
MIT licensed.
Metadata
Release files for daishi 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| daishi-0.2.0.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| daishi-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.0 kB
Release files / daishi-0.2.0.tar.gz
| Download URL | daishi-0.2.0.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
97065d5089bb7cc5e32ec3a9e21170c692e29dafac0c3bb13a2a217c1794f967
|
|
BLAKE2b-256 checksum How to use checksums |
67dee4dbc48c9b82aced766bd0429ff174b83c351f216c33bbc21c13561e8ae9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / daishi-0.2.0-py3-none-any.whl
| Download URL | daishi-0.2.0-py3-none-any.whl |
|---|---|
| Size | 16.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
21c4da04f0405d03d781df35acb1e46e9372ca7c8265edb351dc2fad99dbc88b
|
|
BLAKE2b-256 checksum How to use checksums |
4941f5e020786febc4a48ba6b889a222864f149e324e6926c5b6c9ecf0a754db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|