daishi-sdk 0.2.15 → 0.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ export type JsonObject = {
5
5
  /** The API version these types describe. */
6
6
  export declare const API_VERSION = "1.0.0";
7
7
  /** Every error code the API documents. */
8
- export type ErrorCode = 'token_required' | 'scope_required' | 'plan_api' | 'rate_limited' | 'handover' | 'bad_request' | 'bad_scenario' | 'bad_replicates' | 'profile_required' | 'bad_season_ticks' | 'bad_frame' | 'bad_env' | 'too_many_scenarios' | 'unknown_scenario' | 'bad_skill' | 'too_many_skills' | 'unknown_skill' | 'bad_roster' | 'bad_model' | 'bad_name' | 'bad_provider' | 'provider_key_required' | 'openrouter_key_required' | 'openrouter_balance_low' | 'billing_frozen' | 'email_unverified' | 'bad_trials' | 'bad_spend_cap' | 'plan_seats' | 'plan_ticks' | 'plan_series' | 'plan_quota' | 'too_many_runs' | 'run_history_full' | 'seed_not_allowed' | 'unknown_run' | 'unknown_batch' | 'unknown_experiment' | 'experiment_trial' | 'experiment_not_running' | 'experiment_arms' | 'bad_experiment' | 'experiment_scenario' | 'bad_game' | 'bad_arena' | 'experiment_world_only' | 'experiment_same_arms' | 'experiment_env_seed' | 'experiment_stopping' | 'bad_metric' | 'bad_design' | 'design_final' | 'design_late' | 'no_design' | 'experiment_effort_roster' | 'experiment_no_probe' | 'experiment_too_few_seats' | 'plan_experiment_arms' | 'plan_rerun' | 'unknown_log' | 'plan_invites' | 'invite_world' | 'invite_series' | 'too_many_open_worlds' | 'no_invite' | 'invite_fixed' | 'bad_invite' | 'never_played' | 'run_playing' | 'study_playing' | 'bad_note' | 'note_too_long' | 'unknown_set' | 'unknown_setup' | 'bad_set' | 'set_full' | 'series_trial' | 'in_another_set' | 'guest_seats' | 'set_empty' | 'run_launching' | 'internal_error';
8
+ export type ErrorCode = 'token_required' | 'scope_required' | 'plan_api' | 'rate_limited' | 'handover' | 'bad_request' | 'bad_scenario' | 'bad_replicates' | 'profile_required' | 'bad_season_ticks' | 'bad_frame' | 'bad_env' | 'too_many_scenarios' | 'unknown_scenario' | 'bad_skill' | 'too_many_skills' | 'unknown_skill' | 'bad_roster' | 'bad_model' | 'bad_name' | 'bad_provider' | 'provider_key_required' | 'openrouter_key_required' | 'openrouter_balance_low' | 'billing_frozen' | 'email_unverified' | 'bad_trials' | 'bad_spend_cap' | 'plan_seats' | 'plan_ticks' | 'plan_series' | 'plan_quota' | 'too_many_runs' | 'run_history_full' | 'seed_not_allowed' | 'unknown_run' | 'unknown_batch' | 'unknown_experiment' | 'experiment_trial' | 'experiment_not_running' | 'experiment_running' | 'bad_cancel_reason' | 'cancel_reason_fixed' | 'bad_replaced_by' | 'experiment_arms' | 'bad_experiment' | 'experiment_scenario' | 'bad_game' | 'bad_arena' | 'experiment_world_only' | 'experiment_same_arms' | 'experiment_env_seed' | 'experiment_stopping' | 'bad_metric' | 'bad_design' | 'design_final' | 'design_launching' | 'design_late' | 'no_design' | 'no_creation_record' | 'experiment_effort_roster' | 'experiment_no_probe' | 'experiment_too_few_seats' | 'plan_experiment_arms' | 'plan_rerun' | 'unknown_log' | 'plan_invites' | 'invite_world' | 'invite_series' | 'too_many_open_worlds' | 'no_invite' | 'invite_fixed' | 'bad_invite' | 'never_played' | 'run_playing' | 'study_playing' | 'bad_note' | 'note_too_long' | 'unknown_set' | 'unknown_setup' | 'bad_set' | 'set_full' | 'series_trial' | 'in_another_set' | 'guest_seats' | 'set_empty' | 'run_launching' | 'internal_error';
9
9
  export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE';
10
10
  export interface RequestParts {
11
11
  query?: Record<string, string | number | boolean | undefined | null>;
@@ -121,10 +121,15 @@ export interface Experiment {
121
121
  name: string;
122
122
  status: 'queued' | 'running' | 'finished' | 'cancelled';
123
123
  stop_reason: string | null;
124
+ cancel_reason: 'fault' | 'design' | 'budget' | 'results' | 'other' | null;
125
+ replaced_by: string | null;
124
126
  scenario_id: string;
125
127
  trials: number;
126
128
  seed_mode: 'vary' | 'pinned';
127
129
  aa_check: boolean;
130
+ pilot: boolean;
131
+ name_commit_min_hex: number;
132
+ creation_sha256: string | null;
128
133
  metric: 'fitness_index' | 'rank' | 'survived' | 'index_survival' | 'index_economy' | 'index_social' | 'index_adaptation' | 'index_competitiveness' | 'aggression_per_100_rounds' | 'trades_per_100_rounds' | 'messages_per_100_rounds' | 'map_coverage' | 'witness_sensitivity' | 'compliance_rate' | 'compliance_latency' | 'injection_resistance' | 'output_tokens_per_turn' | 'said_evaluated' | 'aggression_between_seats_per_100_rounds' | 'trades_between_seats_per_100_rounds' | 'betrayals_per_100_rounds' | 'ring_share';
129
134
  secondary_metrics: Array<'fitness_index' | 'rank' | 'survived' | 'index_survival' | 'index_economy' | 'index_social' | 'index_adaptation' | 'index_competitiveness' | 'aggression_per_100_rounds' | 'trades_per_100_rounds' | 'messages_per_100_rounds' | 'map_coverage' | 'witness_sensitivity' | 'compliance_rate' | 'compliance_latency' | 'injection_resistance' | 'output_tokens_per_turn' | 'said_evaluated' | 'aggression_between_seats_per_100_rounds' | 'trades_between_seats_per_100_rounds' | 'betrayals_per_100_rounds' | 'ring_share'>;
130
135
  rule: StoppingRule;
@@ -137,7 +142,8 @@ export interface Experiment {
137
142
  replicates: StudyRerun | null;
138
143
  note: string | null;
139
144
  note_at_ms: number | null;
140
- /** The design document as the server received it: the SHA-256 of its UTF-8 bytes, its size, when it arrived, and its standing read from those times: `declared` (it arrived with the creation or before the first trial started, after which it cannot be replaced), `named` (it arrived later, and the experiment’s name, fixed at creation, carries `name_prefix`, the first 12 or more hex digits of its digest), or `after` (neither). The text is its own read. */
145
+ notes?: ExperimentNoteEntry[];
146
+ /** The design document as the server received it: the SHA-256 of its UTF-8 bytes, its size, when it arrived, and its standing read from those times: `declared` (it arrived with the creation or before the first trial started, after which it cannot be replaced), `named` (it arrived later, and the experiment’s name, fixed at creation, carries `name_prefix`, at least `name_commit_min_hex` hex digits of its digest: 32 on an experiment created since the rule rose, 12 before), or `after` (neither). The text is its own read. */
141
147
  design: ExperimentDesign | null;
142
148
  }
143
149
  /** A paired experiment scored now: each arm, every pair, the comparisons against the control, and the decision. */
@@ -146,6 +152,8 @@ export interface ExperimentReport {
146
152
  name: string;
147
153
  status: 'queued' | 'running' | 'finished' | 'cancelled';
148
154
  stop_reason: string | null;
155
+ cancel_reason: 'fault' | 'design' | 'budget' | 'results' | 'other' | null;
156
+ replaced_by: string | null;
149
157
  created_at_ms: number;
150
158
  started_at_ms: number | null;
151
159
  ended_at_ms: number | null;
@@ -153,6 +161,9 @@ export interface ExperimentReport {
153
161
  trials: number;
154
162
  seed_mode: 'vary' | 'pinned';
155
163
  aa_check: boolean;
164
+ pilot: boolean;
165
+ name_commit_min_hex: number;
166
+ creation_sha256: string | null;
156
167
  metric: 'fitness_index' | 'rank' | 'survived' | 'index_survival' | 'index_economy' | 'index_social' | 'index_adaptation' | 'index_competitiveness' | 'aggression_per_100_rounds' | 'trades_per_100_rounds' | 'messages_per_100_rounds' | 'map_coverage' | 'witness_sensitivity' | 'compliance_rate' | 'compliance_latency' | 'injection_resistance' | 'output_tokens_per_turn' | 'said_evaluated' | 'aggression_between_seats_per_100_rounds' | 'trades_between_seats_per_100_rounds' | 'betrayals_per_100_rounds' | 'ring_share';
157
168
  analysis_scale: 'metric' | 'negative_rank' | 'log';
158
169
  rule: StoppingRule;
@@ -169,7 +180,8 @@ export interface ExperimentReport {
169
180
  cost: Cost;
170
181
  note: string | null;
171
182
  note_at_ms: number | null;
172
- /** The design document as the server received it: the SHA-256 of its UTF-8 bytes, its size, when it arrived, and its standing read from those times: `declared` (it arrived with the creation or before the first trial started, after which it cannot be replaced), `named` (it arrived later, and the experiment’s name, fixed at creation, carries `name_prefix`, the first 12 or more hex digits of its digest), or `after` (neither). The text is its own read. */
183
+ notes?: ExperimentNoteEntry[];
184
+ /** The design document as the server received it: the SHA-256 of its UTF-8 bytes, its size, when it arrived, and its standing read from those times: `declared` (it arrived with the creation or before the first trial started, after which it cannot be replaced), `named` (it arrived later, and the experiment’s name, fixed at creation, carries `name_prefix`, at least `name_commit_min_hex` hex digits of its digest: 32 on an experiment created since the rule rose, 12 before), or `after` (neither). The text is its own read. */
173
185
  design: ExperimentDesign | null;
174
186
  }
175
187
  /** A run set: several of the account’s finished runs, standalone runs and whole series batches, published on its profile as one card, each filed under a setup the owner named. The card prints per setup the design’s standing, the harness versions, the models, the settings that differ between the setups, the seats’ own text, built-in skills and custom instructions (word for word when `show_seat_text` is on, else each text’s hash tag and size; a seat carrying one of the account’s own skills shows its tag and size only) and the counts of what the seats did; no score, no verdict, no per-model row, and the set’s runs leave the profile’s per-model table. `profile_url` and `study_url` are where the card is once published and the account has a handle, null otherwise. */
@@ -267,6 +279,8 @@ export interface ExperimentBody {
267
279
  target_half_width?: number;
268
280
  /** true declares an A/A check: every arm plays the control’s configuration on purpose, so the report measures the noise between identical arms (labels may still differ). Without it, an arm identical to the control is refused (experiment_same_arms); with it, an arm that differs is refused (bad_experiment). The report and the list carry it as aa_check, and the verdict says that any difference is noise. Default false. */
269
281
  aa_check?: boolean;
282
+ /** true declares a pilot: a dry run whose result is not to be read as a finding, said here and never after, so a result cannot be relabelled a pilot once seen. The record, the study’s card and, on Daishi’s own account, the declared-studies ledger carry it as pilot. Default false. */
283
+ pilot?: boolean;
270
284
  /** The id (exp_...) of one of your own experiments whose observed spread sizes this design’s detectable_gap until five of its own pairs are in: it must have played the same scenario, declared this body’s metric as its metric or a secondary outcome, and have five or more pairs with a value in both arms that did not all come out alike; the standard deviation of its paired differences on that metric (arm minus control, on the analysis scale) is the spread. An A/A check is the natural source, and the receipt says whether the one named was one (detectable_gap.reference.aa_check); any other qualifying experiment is taken, its spread then holding whatever effect it carried. The estimate and the report print the gap with source: "reference" and reference naming the experiment, its name, its pairs and the spread read off it; once this experiment has five pairs of its own, its own spread takes over as it always does. Anything else (another account’s experiment, another scenario, a metric it did not declare, fewer than five such pairs) answers bad_experiment. Default none: the prior where one exists, else no gap until five pairs. */
271
285
  spread_from?: string;
272
286
  /** Where to POST the signed experiment.ended notice: https, a public host, no credentials, at most 512 characters. Omitted: the account’s webhook setting, if any. */
@@ -386,15 +400,31 @@ export interface GetExperimentResponse {
386
400
  experiment: ExperimentReport;
387
401
  runs: Run[][];
388
402
  }
403
+ export interface CancelExperimentBody {
404
+ /** Why you are stopping it, in your own word: fault (a seat, a route, a key or the platform failed, and the trials played are not usable), design (a flaw in the design or the arms), budget (spend or time), results (what the trials so far showed), or other. Kept on the record as cancel_reason. */
405
+ reason: 'fault' | 'design' | 'budget' | 'results' | 'other';
406
+ /** The id (exp_...) of your experiment that replaces this one, if any. It must be yours and not this one. */
407
+ replaced_by?: string;
408
+ }
389
409
  export interface CancelExperimentResponse {
390
410
  ok: boolean;
391
411
  experiment: Experiment;
392
412
  }
393
- export interface SetExperimentNoteBody {
394
- /** The note, counted after trimming. "" or null: no note. */
395
- note: string | null;
413
+ export interface SetExperimentStopReasonBody {
414
+ /** The reason, as a cancel takes it; only on an experiment that ended cancelled and carries none yet. */
415
+ reason?: 'fault' | 'design' | 'budget' | 'results' | 'other';
416
+ /** The id (exp_...) of your experiment that replaced this one; null clears it. */
417
+ replaced_by?: string | null;
418
+ }
419
+ export interface SetExperimentStopReasonResponse {
420
+ ok: boolean;
421
+ experiment: Experiment;
422
+ }
423
+ export interface AddExperimentNoteBody {
424
+ /** The entry to add, counted after trimming; an empty one is refused, since there is nothing to clear. */
425
+ note: string;
396
426
  }
397
- export interface SetExperimentNoteResponse {
427
+ export interface AddExperimentNoteResponse {
398
428
  ok: boolean;
399
429
  experiment: Experiment;
400
430
  }
@@ -413,8 +443,17 @@ export interface GetExperimentDesignResponse {
413
443
  at_ms: number;
414
444
  standing: 'declared' | 'named' | 'after';
415
445
  name_prefix: string | null;
446
+ witnesses: DesignWitness[];
447
+ versions: ExperimentDesignVersion[];
416
448
  text: string;
417
449
  }
450
+ export interface GetExperimentCreationResponse {
451
+ experiment_id: string;
452
+ created_at_ms: number;
453
+ sha256: string;
454
+ record: string;
455
+ witnesses: DesignWitness[];
456
+ }
418
457
  export interface CancelResponse {
419
458
  ok: boolean;
420
459
  run: Run;
@@ -434,7 +473,7 @@ export interface UnpublishRunResponse {
434
473
  profile_url: string | null;
435
474
  }
436
475
  export interface PublishExperimentBody {
437
- /** The study’s note, your declared result. Omitted: the experiment keeps the note it has. "" or null: no note. */
476
+ /** An entry added to the study’s note first: your declared result, in your words. Omitted, "" or null: nothing added; entries are never removed. */
438
477
  note?: string | null;
439
478
  }
440
479
  export interface PublishExperimentResponse {
@@ -544,6 +583,7 @@ export interface GetSetDesignResponse {
544
583
  at_ms: number;
545
584
  standing: 'declared' | 'named' | 'after';
546
585
  name_prefix: string | null;
586
+ witnesses: DesignWitness[];
547
587
  text: string;
548
588
  }
549
589
  export interface PublishSetResponse {
@@ -727,7 +767,12 @@ export interface StudyRerun {
727
767
  exact: boolean;
728
768
  differences: string[];
729
769
  }
730
- /** The design document as the server received it: the SHA-256 of its UTF-8 bytes, its size, when it arrived, and its standing read from those times: `declared` (it arrived with the creation or before the first trial started, after which it cannot be replaced), `named` (it arrived later, and the experiment’s name, fixed at creation, carries `name_prefix`, the first 12 or more hex digits of its digest), or `after` (neither). The text is its own read. */
770
+ export interface ExperimentNoteEntry {
771
+ seq: number;
772
+ text: string;
773
+ at_ms: number;
774
+ }
775
+ /** The design document as the server received it: the SHA-256 of its UTF-8 bytes, its size, when it arrived, and its standing read from those times: `declared` (it arrived with the creation or before the first trial started, after which it cannot be replaced), `named` (it arrived later, and the experiment’s name, fixed at creation, carries `name_prefix`, at least `name_commit_min_hex` hex digits of its digest: 32 on an experiment created since the rule rose, 12 before), or `after` (neither). The text is its own read. */
731
776
  export interface ExperimentDesign {
732
777
  sha256: string;
733
778
  bytes: number;
@@ -976,6 +1021,23 @@ export interface LaunchResponseBatch {
976
1021
  trials: number;
977
1022
  seed_mode: 'vary' | 'pinned';
978
1023
  }
1024
+ /** A party outside Daishi that was handed the design’s SHA-256 (never the text) when the design was stored: `rfc3161`, a timestamp authority whose signed reply states the time (`attested_at_ms`, from its own clock), or `opentimestamps`, the public calendars, whose proof is `pending` until a Bitcoin block includes it and then `anchored` in `bitcoin_block`. `created_at_ms` is when this server received the proof. Once a trial is published, the design’s public page links each proof file (`.tsr` or `.ots`, as `proof_format` says) for checking with `openssl ts -verify` or `ots verify`. */
1025
+ export interface DesignWitness {
1026
+ kind: 'opentimestamps' | 'rfc3161';
1027
+ target: string;
1028
+ state: 'signed' | 'pending' | 'anchored';
1029
+ attested_at_ms: number | null;
1030
+ bitcoin_block: number | null;
1031
+ created_at_ms: number;
1032
+ proof_format: 'tsr' | 'ots';
1033
+ }
1034
+ export interface ExperimentDesignVersion {
1035
+ version: number;
1036
+ sha256: string;
1037
+ bytes: number;
1038
+ at_ms: number;
1039
+ witnesses: DesignWitness[];
1040
+ }
979
1041
  export interface Study {
980
1042
  kind: 'experiment' | 'series';
981
1043
  id: string;
@@ -1242,19 +1304,27 @@ export declare abstract class Operations {
1242
1304
  /**
1243
1305
  * Cancel an experiment.
1244
1306
  *
1245
- * Stop a queued or running experiment: every unfinished trial of every arm, then the record.
1307
+ * Stop a queued or running experiment: every unfinished trial of every arm, then the record, with your reason on it.
1246
1308
  *
1247
1309
  * @see https://daishi.ai/docs/developer/rest#ep-cancel-experiment
1248
1310
  */
1249
- cancelExperiment(id: string): Promise<CancelExperimentResponse>;
1311
+ cancelExperiment(id: string, body: CancelExperimentBody): Promise<CancelExperimentResponse>;
1312
+ /**
1313
+ * Say why an ended experiment stopped.
1314
+ *
1315
+ * On an experiment that has ended: give the reason, once, where none was asked, or name the experiment that replaced it.
1316
+ *
1317
+ * @see https://daishi.ai/docs/developer/rest#ep-set-experiment-stop-reason
1318
+ */
1319
+ setExperimentStopReason(id: string, body: SetExperimentStopReasonBody): Promise<SetExperimentStopReasonResponse>;
1250
1320
  /**
1251
- * Set an experiment’s note.
1321
+ * Add to an experiment’s note.
1252
1322
  *
1253
- * Write or clear your note on one of your experiments: its declared result, in your words.
1323
+ * Add a dated entry to your note on one of your experiments: its declared result, in your words, then what you add later.
1254
1324
  *
1255
- * @see https://daishi.ai/docs/developer/rest#ep-set-experiment-note
1325
+ * @see https://daishi.ai/docs/developer/rest#ep-add-experiment-note
1256
1326
  */
1257
- setExperimentNote(id: string, body: SetExperimentNoteBody): Promise<SetExperimentNoteResponse>;
1327
+ addExperimentNote(id: string, body: AddExperimentNoteBody): Promise<AddExperimentNoteResponse>;
1258
1328
  /**
1259
1329
  * Attach an experiment’s design.
1260
1330
  *
@@ -1271,6 +1341,14 @@ export declare abstract class Operations {
1271
1341
  * @see https://daishi.ai/docs/developer/rest#ep-get-experiment-design
1272
1342
  */
1273
1343
  getExperimentDesign(id: string): Promise<GetExperimentDesignResponse>;
1344
+ /**
1345
+ * Get an experiment’s creation record.
1346
+ *
1347
+ * The record the outside witnesses were handed the moment one of your experiments was created, with its digest and their proofs.
1348
+ *
1349
+ * @see https://daishi.ai/docs/developer/rest#ep-get-experiment-creation
1350
+ */
1351
+ getExperimentCreation(id: string): Promise<GetExperimentCreationResponse>;
1274
1352
  /**
1275
1353
  * Cancel a run.
1276
1354
  *
package/dist/generated.js CHANGED
@@ -307,21 +307,31 @@ export class Operations {
307
307
  /**
308
308
  * Cancel an experiment.
309
309
  *
310
- * Stop a queued or running experiment: every unfinished trial of every arm, then the record.
310
+ * Stop a queued or running experiment: every unfinished trial of every arm, then the record, with your reason on it.
311
311
  *
312
312
  * @see https://daishi.ai/docs/developer/rest#ep-cancel-experiment
313
313
  */
314
- cancelExperiment(id) {
315
- return this.request('POST', `/experiments/${encodeURIComponent(id)}/cancel`);
314
+ cancelExperiment(id, body) {
315
+ return this.request('POST', `/experiments/${encodeURIComponent(id)}/cancel`, { body });
316
316
  }
317
317
  /**
318
- * Set an experiment’s note.
318
+ * Say why an ended experiment stopped.
319
319
  *
320
- * Write or clear your note on one of your experiments: its declared result, in your words.
320
+ * On an experiment that has ended: give the reason, once, where none was asked, or name the experiment that replaced it.
321
321
  *
322
- * @see https://daishi.ai/docs/developer/rest#ep-set-experiment-note
322
+ * @see https://daishi.ai/docs/developer/rest#ep-set-experiment-stop-reason
323
323
  */
324
- setExperimentNote(id, body) {
324
+ setExperimentStopReason(id, body) {
325
+ return this.request('POST', `/experiments/${encodeURIComponent(id)}/stop-reason`, { body });
326
+ }
327
+ /**
328
+ * Add to an experiment’s note.
329
+ *
330
+ * Add a dated entry to your note on one of your experiments: its declared result, in your words, then what you add later.
331
+ *
332
+ * @see https://daishi.ai/docs/developer/rest#ep-add-experiment-note
333
+ */
334
+ addExperimentNote(id, body) {
325
335
  return this.request('POST', `/experiments/${encodeURIComponent(id)}/note`, { body });
326
336
  }
327
337
  /**
@@ -344,6 +354,16 @@ export class Operations {
344
354
  getExperimentDesign(id) {
345
355
  return this.request('GET', `/experiments/${encodeURIComponent(id)}/design`);
346
356
  }
357
+ /**
358
+ * Get an experiment’s creation record.
359
+ *
360
+ * The record the outside witnesses were handed the moment one of your experiments was created, with its digest and their proofs.
361
+ *
362
+ * @see https://daishi.ai/docs/developer/rest#ep-get-experiment-creation
363
+ */
364
+ getExperimentCreation(id) {
365
+ return this.request('GET', `/experiments/${encodeURIComponent(id)}/creation`);
366
+ }
347
367
  /**
348
368
  * Cancel a run.
349
369
  *
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Operations, type ErrorCode, type GetBatchResponse, type GetExperimentResponse, type GetRunResponse, type Method, type RequestParts } from './generated.js';
2
2
  export * from './generated.js';
3
- export declare const VERSION = "0.2.15";
3
+ export declare const VERSION = "0.2.17";
4
4
  export declare const DEFAULT_BASE_URL = "https://daishi.ai/api/v1";
5
5
  export interface DaishiOptions {
6
6
  /** A Studio access token (`dsk_...`). Default: the `DAISHI_TOKEN` environment variable. */
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Operations } from './generated.js';
2
2
  export * from './generated.js';
3
- export const VERSION = '0.2.15';
3
+ export const VERSION = '0.2.17';
4
4
  export const DEFAULT_BASE_URL = 'https://daishi.ai/api/v1';
5
5
  /** A refusal from the API, or a transport failure after the retries ran out. */
6
6
  export class DaishiError extends Error {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daishi-sdk",
3
- "version": "0.2.15",
3
+ "version": "0.2.17",
4
4
  "description": "Typed client for the Daishi Studio API: scenarios, runs, series batches and paired experiments, with retries and waiting helpers.",
5
5
  "keywords": [
6
6
  "daishi",