@arizeai/phoenix-client 5.2.1 → 5.4.0
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.
- package/README.md +3 -3
- package/dist/esm/__generated__/api/v1.d.ts +321 -9
- package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
- package/dist/esm/experiments/createExperiment.d.ts +39 -0
- package/dist/esm/experiments/createExperiment.d.ts.map +1 -0
- package/dist/esm/experiments/createExperiment.js +43 -0
- package/dist/esm/experiments/createExperiment.js.map +1 -0
- package/dist/esm/experiments/deleteExperiment.d.ts +36 -0
- package/dist/esm/experiments/deleteExperiment.d.ts.map +1 -0
- package/dist/esm/experiments/deleteExperiment.js +49 -0
- package/dist/esm/experiments/deleteExperiment.js.map +1 -0
- package/dist/esm/experiments/getExperimentInfo.d.ts.map +1 -1
- package/dist/esm/experiments/getExperimentInfo.js +9 -2
- package/dist/esm/experiments/getExperimentInfo.js.map +1 -1
- package/dist/esm/experiments/helpers/asExperimentEvaluator.d.ts +19 -0
- package/dist/esm/experiments/helpers/asExperimentEvaluator.d.ts.map +1 -0
- package/dist/esm/experiments/helpers/asExperimentEvaluator.js +19 -0
- package/dist/esm/experiments/helpers/asExperimentEvaluator.js.map +1 -0
- package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.d.ts +9 -0
- package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.d.ts.map +1 -0
- package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.js +18 -0
- package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.js.map +1 -0
- package/dist/esm/experiments/helpers/getExperimentEvaluators.d.ts +6 -0
- package/dist/esm/experiments/helpers/getExperimentEvaluators.d.ts.map +1 -0
- package/dist/esm/experiments/helpers/getExperimentEvaluators.js +58 -0
- package/dist/esm/experiments/helpers/getExperimentEvaluators.js.map +1 -0
- package/dist/esm/experiments/helpers/index.d.ts +4 -0
- package/dist/esm/experiments/helpers/index.d.ts.map +1 -0
- package/dist/esm/experiments/helpers/index.js +4 -0
- package/dist/esm/experiments/helpers/index.js.map +1 -0
- package/dist/esm/experiments/index.d.ts +6 -0
- package/dist/esm/experiments/index.d.ts.map +1 -1
- package/dist/esm/experiments/index.js +6 -0
- package/dist/esm/experiments/index.js.map +1 -1
- package/dist/esm/experiments/listExperiments.d.ts +29 -0
- package/dist/esm/experiments/listExperiments.d.ts.map +1 -0
- package/dist/esm/experiments/listExperiments.js +59 -0
- package/dist/esm/experiments/listExperiments.js.map +1 -0
- package/dist/esm/experiments/resumeEvaluation.d.ts +105 -0
- package/dist/esm/experiments/resumeEvaluation.d.ts.map +1 -0
- package/dist/esm/experiments/resumeEvaluation.js +559 -0
- package/dist/esm/experiments/resumeEvaluation.js.map +1 -0
- package/dist/esm/experiments/resumeExperiment.d.ts +102 -0
- package/dist/esm/experiments/resumeExperiment.d.ts.map +1 -0
- package/dist/esm/experiments/resumeExperiment.js +517 -0
- package/dist/esm/experiments/resumeExperiment.js.map +1 -0
- package/dist/esm/experiments/runExperiment.d.ts +4 -3
- package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
- package/dist/esm/experiments/runExperiment.js +32 -3
- package/dist/esm/experiments/runExperiment.js.map +1 -1
- package/dist/esm/prompts/createPrompt.d.ts +19 -1
- package/dist/esm/prompts/createPrompt.d.ts.map +1 -1
- package/dist/esm/prompts/createPrompt.js +14 -1
- package/dist/esm/prompts/createPrompt.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types/experiments.d.ts +66 -3
- package/dist/esm/types/experiments.d.ts.map +1 -1
- package/dist/esm/utils/channel.d.ts +229 -0
- package/dist/esm/utils/channel.d.ts.map +1 -0
- package/dist/esm/utils/channel.js +352 -0
- package/dist/esm/utils/channel.js.map +1 -0
- package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
- package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
- package/dist/esm/utils/isHttpError.d.ts +21 -0
- package/dist/esm/utils/isHttpError.d.ts.map +1 -0
- package/dist/esm/utils/isHttpError.js +33 -0
- package/dist/esm/utils/isHttpError.js.map +1 -0
- package/dist/src/__generated__/api/v1.d.ts +321 -9
- package/dist/src/__generated__/api/v1.d.ts.map +1 -1
- package/dist/src/experiments/createExperiment.d.ts +39 -0
- package/dist/src/experiments/createExperiment.d.ts.map +1 -0
- package/dist/src/experiments/createExperiment.js +43 -0
- package/dist/src/experiments/createExperiment.js.map +1 -0
- package/dist/src/experiments/deleteExperiment.d.ts +36 -0
- package/dist/src/experiments/deleteExperiment.d.ts.map +1 -0
- package/dist/src/experiments/deleteExperiment.js +52 -0
- package/dist/src/experiments/deleteExperiment.js.map +1 -0
- package/dist/src/experiments/getExperimentInfo.d.ts.map +1 -1
- package/dist/src/experiments/getExperimentInfo.js +9 -2
- package/dist/src/experiments/getExperimentInfo.js.map +1 -1
- package/dist/src/experiments/helpers/asExperimentEvaluator.d.ts +19 -0
- package/dist/src/experiments/helpers/asExperimentEvaluator.d.ts.map +1 -0
- package/dist/src/experiments/helpers/asExperimentEvaluator.js +22 -0
- package/dist/src/experiments/helpers/asExperimentEvaluator.js.map +1 -0
- package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.d.ts +9 -0
- package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.d.ts.map +1 -0
- package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.js +21 -0
- package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.js.map +1 -0
- package/dist/src/experiments/helpers/getExperimentEvaluators.d.ts +6 -0
- package/dist/src/experiments/helpers/getExperimentEvaluators.d.ts.map +1 -0
- package/dist/src/experiments/helpers/getExperimentEvaluators.js +61 -0
- package/dist/src/experiments/helpers/getExperimentEvaluators.js.map +1 -0
- package/dist/src/experiments/helpers/index.d.ts +4 -0
- package/dist/src/experiments/helpers/index.d.ts.map +1 -0
- package/dist/src/experiments/helpers/index.js +20 -0
- package/dist/src/experiments/helpers/index.js.map +1 -0
- package/dist/src/experiments/index.d.ts +6 -0
- package/dist/src/experiments/index.d.ts.map +1 -1
- package/dist/src/experiments/index.js +6 -0
- package/dist/src/experiments/index.js.map +1 -1
- package/dist/src/experiments/listExperiments.d.ts +29 -0
- package/dist/src/experiments/listExperiments.d.ts.map +1 -0
- package/dist/src/experiments/listExperiments.js +66 -0
- package/dist/src/experiments/listExperiments.js.map +1 -0
- package/dist/src/experiments/resumeEvaluation.d.ts +105 -0
- package/dist/src/experiments/resumeEvaluation.d.ts.map +1 -0
- package/dist/src/experiments/resumeEvaluation.js +585 -0
- package/dist/src/experiments/resumeEvaluation.js.map +1 -0
- package/dist/src/experiments/resumeExperiment.d.ts +102 -0
- package/dist/src/experiments/resumeExperiment.d.ts.map +1 -0
- package/dist/src/experiments/resumeExperiment.js +540 -0
- package/dist/src/experiments/resumeExperiment.js.map +1 -0
- package/dist/src/experiments/runExperiment.d.ts +4 -3
- package/dist/src/experiments/runExperiment.d.ts.map +1 -1
- package/dist/src/experiments/runExperiment.js +32 -3
- package/dist/src/experiments/runExperiment.js.map +1 -1
- package/dist/src/prompts/createPrompt.d.ts +19 -1
- package/dist/src/prompts/createPrompt.d.ts.map +1 -1
- package/dist/src/prompts/createPrompt.js +14 -1
- package/dist/src/prompts/createPrompt.js.map +1 -1
- package/dist/src/types/experiments.d.ts +66 -3
- package/dist/src/types/experiments.d.ts.map +1 -1
- package/dist/src/utils/channel.d.ts +229 -0
- package/dist/src/utils/channel.d.ts.map +1 -0
- package/dist/src/utils/channel.js +385 -0
- package/dist/src/utils/channel.js.map +1 -0
- package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
- package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
- package/dist/src/utils/isHttpError.d.ts +21 -0
- package/dist/src/utils/isHttpError.d.ts.map +1 -0
- package/dist/src/utils/isHttpError.js +37 -0
- package/dist/src/utils/isHttpError.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/src/__generated__/api/v1.ts +321 -9
- package/src/experiments/createExperiment.ts +90 -0
- package/src/experiments/deleteExperiment.ts +67 -0
- package/src/experiments/getExperimentInfo.ts +9 -2
- package/src/experiments/helpers/asExperimentEvaluator.ts +29 -0
- package/src/experiments/helpers/fromPhoenixLLMEvaluator.ts +24 -0
- package/src/experiments/helpers/getExperimentEvaluators.ts +74 -0
- package/src/experiments/helpers/index.ts +3 -0
- package/src/experiments/index.ts +6 -0
- package/src/experiments/listExperiments.ts +83 -0
- package/src/experiments/resumeEvaluation.ts +804 -0
- package/src/experiments/resumeExperiment.ts +745 -0
- package/src/experiments/runExperiment.ts +37 -5
- package/src/prompts/createPrompt.ts +19 -1
- package/src/types/experiments.ts +72 -3
- package/src/utils/channel.ts +397 -0
- package/src/utils/isHttpError.ts +45 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arizeai/phoenix-client",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.0",
|
|
4
4
|
"description": "A client for the Phoenix API",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"openapi-typescript": "^7.6.1",
|
|
67
67
|
"tsx": "^4.19.3",
|
|
68
68
|
"typescript": "^5.8.2",
|
|
69
|
-
"vitest": "^
|
|
70
|
-
"@arizeai/phoenix-evals": "0.
|
|
69
|
+
"vitest": "^4.0.10",
|
|
70
|
+
"@arizeai/phoenix-evals": "0.4.0"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@arizeai/openinference-semantic-conventions": "^1.1.0",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"async": "^3.2.6",
|
|
76
76
|
"openapi-fetch": "^0.12.5",
|
|
77
77
|
"tiny-invariant": "^1.3.3",
|
|
78
|
-
"zod": "^3.24.
|
|
78
|
+
"zod": "^3.24.3",
|
|
79
79
|
"zod-to-json-schema": "^3.24.3",
|
|
80
80
|
"@arizeai/phoenix-otel": "0.3.0"
|
|
81
81
|
},
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"build": "tsc --build tsconfig.json tsconfig.esm.json && tsc-alias -p tsconfig.esm.json",
|
|
95
95
|
"postbuild": "echo '{\"type\": \"module\"}' > ./dist/esm/package.json",
|
|
96
96
|
"type:check": "tsc --noEmit",
|
|
97
|
-
"test": "vitest
|
|
97
|
+
"test": "vitest run",
|
|
98
|
+
"test:watch": "vitest watch"
|
|
98
99
|
}
|
|
99
100
|
}
|
|
@@ -255,7 +255,10 @@ export interface paths {
|
|
|
255
255
|
path?: never;
|
|
256
256
|
cookie?: never;
|
|
257
257
|
};
|
|
258
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* List experiments by dataset
|
|
260
|
+
* @description Retrieve a paginated list of experiments for the specified dataset.
|
|
261
|
+
*/
|
|
259
262
|
get: operations["listExperiments"];
|
|
260
263
|
put?: never;
|
|
261
264
|
/** Create experiment on a dataset */
|
|
@@ -277,6 +280,39 @@ export interface paths {
|
|
|
277
280
|
get: operations["getExperiment"];
|
|
278
281
|
put?: never;
|
|
279
282
|
post?: never;
|
|
283
|
+
/** Delete experiment by ID */
|
|
284
|
+
delete: operations["deleteExperiment"];
|
|
285
|
+
options?: never;
|
|
286
|
+
head?: never;
|
|
287
|
+
patch?: never;
|
|
288
|
+
trace?: never;
|
|
289
|
+
};
|
|
290
|
+
"/v1/experiments/{experiment_id}/incomplete-runs": {
|
|
291
|
+
parameters: {
|
|
292
|
+
query?: never;
|
|
293
|
+
header?: never;
|
|
294
|
+
path?: never;
|
|
295
|
+
cookie?: never;
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* Get incomplete runs for an experiment
|
|
299
|
+
* @description Get runs that need to be completed for this experiment.
|
|
300
|
+
*
|
|
301
|
+
* Returns all incomplete runs, including both missing runs (not yet attempted)
|
|
302
|
+
* and failed runs (attempted but have errors).
|
|
303
|
+
*
|
|
304
|
+
* Args:
|
|
305
|
+
* experiment_id: The ID of the experiment
|
|
306
|
+
* cursor: Cursor for pagination
|
|
307
|
+
* limit: Maximum number of results to return
|
|
308
|
+
*
|
|
309
|
+
* Returns:
|
|
310
|
+
* Paginated list of incomplete runs grouped by dataset example,
|
|
311
|
+
* with repetition numbers that need to be run
|
|
312
|
+
*/
|
|
313
|
+
get: operations["getIncompleteExperimentRuns"];
|
|
314
|
+
put?: never;
|
|
315
|
+
post?: never;
|
|
280
316
|
delete?: never;
|
|
281
317
|
options?: never;
|
|
282
318
|
head?: never;
|
|
@@ -338,6 +374,39 @@ export interface paths {
|
|
|
338
374
|
patch?: never;
|
|
339
375
|
trace?: never;
|
|
340
376
|
};
|
|
377
|
+
"/v1/experiments/{experiment_id}/incomplete-evaluations": {
|
|
378
|
+
parameters: {
|
|
379
|
+
query?: never;
|
|
380
|
+
header?: never;
|
|
381
|
+
path?: never;
|
|
382
|
+
cookie?: never;
|
|
383
|
+
};
|
|
384
|
+
/**
|
|
385
|
+
* Get incomplete evaluations for an experiment
|
|
386
|
+
* @description Get experiment runs that have incomplete evaluations.
|
|
387
|
+
*
|
|
388
|
+
* Returns runs with:
|
|
389
|
+
* - Missing evaluations (evaluator has not been run)
|
|
390
|
+
* - Failed evaluations (evaluator ran but has errors)
|
|
391
|
+
*
|
|
392
|
+
* Args:
|
|
393
|
+
* experiment_id: The ID of the experiment
|
|
394
|
+
* evaluation_name: List of evaluation names to check (required, at least one)
|
|
395
|
+
* cursor: Cursor for pagination
|
|
396
|
+
* limit: Maximum number of results to return
|
|
397
|
+
*
|
|
398
|
+
* Returns:
|
|
399
|
+
* Paginated list of runs with incomplete evaluations
|
|
400
|
+
*/
|
|
401
|
+
get: operations["getIncompleteExperimentEvaluations"];
|
|
402
|
+
put?: never;
|
|
403
|
+
post?: never;
|
|
404
|
+
delete?: never;
|
|
405
|
+
options?: never;
|
|
406
|
+
head?: never;
|
|
407
|
+
patch?: never;
|
|
408
|
+
trace?: never;
|
|
409
|
+
};
|
|
341
410
|
"/v1/experiment_evaluations": {
|
|
342
411
|
parameters: {
|
|
343
412
|
query?: never;
|
|
@@ -1199,6 +1268,26 @@ export interface components {
|
|
|
1199
1268
|
* @description The last update timestamp of the experiment
|
|
1200
1269
|
*/
|
|
1201
1270
|
updated_at: string;
|
|
1271
|
+
/**
|
|
1272
|
+
* Example Count
|
|
1273
|
+
* @description Number of examples in the experiment
|
|
1274
|
+
*/
|
|
1275
|
+
example_count: number;
|
|
1276
|
+
/**
|
|
1277
|
+
* Successful Run Count
|
|
1278
|
+
* @description Number of successful runs in the experiment
|
|
1279
|
+
*/
|
|
1280
|
+
successful_run_count: number;
|
|
1281
|
+
/**
|
|
1282
|
+
* Failed Run Count
|
|
1283
|
+
* @description Number of failed runs in the experiment
|
|
1284
|
+
*/
|
|
1285
|
+
failed_run_count: number;
|
|
1286
|
+
/**
|
|
1287
|
+
* Missing Run Count
|
|
1288
|
+
* @description Number of missing (not yet executed) runs in the experiment
|
|
1289
|
+
*/
|
|
1290
|
+
missing_run_count: number;
|
|
1202
1291
|
};
|
|
1203
1292
|
/** ExperimentEvaluationResult */
|
|
1204
1293
|
ExperimentEvaluationResult: {
|
|
@@ -1218,8 +1307,8 @@ export interface components {
|
|
|
1218
1307
|
*/
|
|
1219
1308
|
explanation?: string | null;
|
|
1220
1309
|
};
|
|
1221
|
-
/**
|
|
1222
|
-
|
|
1310
|
+
/** ExperimentRun */
|
|
1311
|
+
ExperimentRun: {
|
|
1223
1312
|
/**
|
|
1224
1313
|
* Dataset Example Id
|
|
1225
1314
|
* @description The ID of the dataset example used in the experiment run
|
|
@@ -1314,6 +1403,20 @@ export interface components {
|
|
|
1314
1403
|
GetExperimentResponseBody: {
|
|
1315
1404
|
data: components["schemas"]["Experiment"];
|
|
1316
1405
|
};
|
|
1406
|
+
/** GetIncompleteEvaluationsResponseBody */
|
|
1407
|
+
GetIncompleteEvaluationsResponseBody: {
|
|
1408
|
+
/** Data */
|
|
1409
|
+
data: components["schemas"]["IncompleteExperimentEvaluation"][];
|
|
1410
|
+
/** Next Cursor */
|
|
1411
|
+
next_cursor: string | null;
|
|
1412
|
+
};
|
|
1413
|
+
/** GetIncompleteExperimentRunsResponseBody */
|
|
1414
|
+
GetIncompleteExperimentRunsResponseBody: {
|
|
1415
|
+
/** Data */
|
|
1416
|
+
data: components["schemas"]["IncompleteExperimentRun"][];
|
|
1417
|
+
/** Next Cursor */
|
|
1418
|
+
next_cursor: string | null;
|
|
1419
|
+
};
|
|
1317
1420
|
/** GetProjectResponseBody */
|
|
1318
1421
|
GetProjectResponseBody: {
|
|
1319
1422
|
data: components["schemas"]["Project"];
|
|
@@ -1364,6 +1467,34 @@ export interface components {
|
|
|
1364
1467
|
};
|
|
1365
1468
|
/** Identifier */
|
|
1366
1469
|
Identifier: string;
|
|
1470
|
+
/**
|
|
1471
|
+
* IncompleteExperimentEvaluation
|
|
1472
|
+
* @description Information about an experiment run with incomplete evaluations
|
|
1473
|
+
*/
|
|
1474
|
+
IncompleteExperimentEvaluation: {
|
|
1475
|
+
/** @description The experiment run */
|
|
1476
|
+
experiment_run: components["schemas"]["ExperimentRun"];
|
|
1477
|
+
/** @description The dataset example */
|
|
1478
|
+
dataset_example: components["schemas"]["DatasetExample"];
|
|
1479
|
+
/**
|
|
1480
|
+
* Evaluation Names
|
|
1481
|
+
* @description List of evaluation names that are incomplete (either missing or failed)
|
|
1482
|
+
*/
|
|
1483
|
+
evaluation_names: string[];
|
|
1484
|
+
};
|
|
1485
|
+
/**
|
|
1486
|
+
* IncompleteExperimentRun
|
|
1487
|
+
* @description Information about incomplete runs for a dataset example
|
|
1488
|
+
*/
|
|
1489
|
+
IncompleteExperimentRun: {
|
|
1490
|
+
/** @description The dataset example */
|
|
1491
|
+
dataset_example: components["schemas"]["DatasetExample"];
|
|
1492
|
+
/**
|
|
1493
|
+
* Repetition Numbers
|
|
1494
|
+
* @description List of repetition numbers that need to be run
|
|
1495
|
+
*/
|
|
1496
|
+
repetition_numbers: number[];
|
|
1497
|
+
};
|
|
1367
1498
|
/** InsertedSessionAnnotation */
|
|
1368
1499
|
InsertedSessionAnnotation: {
|
|
1369
1500
|
/**
|
|
@@ -1428,7 +1559,7 @@ export interface components {
|
|
|
1428
1559
|
/** ListExperimentRunsResponseBody */
|
|
1429
1560
|
ListExperimentRunsResponseBody: {
|
|
1430
1561
|
/** Data */
|
|
1431
|
-
data: components["schemas"]["
|
|
1562
|
+
data: components["schemas"]["ExperimentRun"][];
|
|
1432
1563
|
/** Next Cursor */
|
|
1433
1564
|
next_cursor: string | null;
|
|
1434
1565
|
};
|
|
@@ -1436,6 +1567,8 @@ export interface components {
|
|
|
1436
1567
|
ListExperimentsResponseBody: {
|
|
1437
1568
|
/** Data */
|
|
1438
1569
|
data: components["schemas"]["Experiment"][];
|
|
1570
|
+
/** Next Cursor */
|
|
1571
|
+
next_cursor: string | null;
|
|
1439
1572
|
};
|
|
1440
1573
|
/** LocalUser */
|
|
1441
1574
|
LocalUser: {
|
|
@@ -1774,6 +1907,10 @@ export interface components {
|
|
|
1774
1907
|
description?: string | null;
|
|
1775
1908
|
/** Source Prompt Id */
|
|
1776
1909
|
source_prompt_id?: string | null;
|
|
1910
|
+
/** Metadata */
|
|
1911
|
+
metadata?: {
|
|
1912
|
+
[key: string]: unknown;
|
|
1913
|
+
} | null;
|
|
1777
1914
|
/** Id */
|
|
1778
1915
|
id: string;
|
|
1779
1916
|
};
|
|
@@ -1883,6 +2020,10 @@ export interface components {
|
|
|
1883
2020
|
description?: string | null;
|
|
1884
2021
|
/** Source Prompt Id */
|
|
1885
2022
|
source_prompt_id?: string | null;
|
|
2023
|
+
/** Metadata */
|
|
2024
|
+
metadata?: {
|
|
2025
|
+
[key: string]: unknown;
|
|
2026
|
+
} | null;
|
|
1886
2027
|
};
|
|
1887
2028
|
/** PromptDeepSeekInvocationParameters */
|
|
1888
2029
|
PromptDeepSeekInvocationParameters: {
|
|
@@ -3628,7 +3769,12 @@ export interface operations {
|
|
|
3628
3769
|
};
|
|
3629
3770
|
listExperiments: {
|
|
3630
3771
|
parameters: {
|
|
3631
|
-
query?:
|
|
3772
|
+
query?: {
|
|
3773
|
+
/** @description Cursor for pagination (base64-encoded experiment ID) */
|
|
3774
|
+
cursor?: string | null;
|
|
3775
|
+
/** @description The max number of experiments to return at a time. */
|
|
3776
|
+
limit?: number;
|
|
3777
|
+
};
|
|
3632
3778
|
header?: never;
|
|
3633
3779
|
path: {
|
|
3634
3780
|
dataset_id: string;
|
|
@@ -3637,7 +3783,7 @@ export interface operations {
|
|
|
3637
3783
|
};
|
|
3638
3784
|
requestBody?: never;
|
|
3639
3785
|
responses: {
|
|
3640
|
-
/** @description
|
|
3786
|
+
/** @description Paginated list of experiments for the dataset */
|
|
3641
3787
|
200: {
|
|
3642
3788
|
headers: {
|
|
3643
3789
|
[name: string]: unknown;
|
|
@@ -3655,13 +3801,13 @@ export interface operations {
|
|
|
3655
3801
|
"text/plain": string;
|
|
3656
3802
|
};
|
|
3657
3803
|
};
|
|
3658
|
-
/** @description
|
|
3804
|
+
/** @description Unprocessable Entity */
|
|
3659
3805
|
422: {
|
|
3660
3806
|
headers: {
|
|
3661
3807
|
[name: string]: unknown;
|
|
3662
3808
|
};
|
|
3663
3809
|
content: {
|
|
3664
|
-
"
|
|
3810
|
+
"text/plain": string;
|
|
3665
3811
|
};
|
|
3666
3812
|
};
|
|
3667
3813
|
};
|
|
@@ -3768,6 +3914,107 @@ export interface operations {
|
|
|
3768
3914
|
};
|
|
3769
3915
|
};
|
|
3770
3916
|
};
|
|
3917
|
+
deleteExperiment: {
|
|
3918
|
+
parameters: {
|
|
3919
|
+
query?: never;
|
|
3920
|
+
header?: never;
|
|
3921
|
+
path: {
|
|
3922
|
+
experiment_id: string;
|
|
3923
|
+
};
|
|
3924
|
+
cookie?: never;
|
|
3925
|
+
};
|
|
3926
|
+
requestBody?: never;
|
|
3927
|
+
responses: {
|
|
3928
|
+
/** @description Experiment deleted successfully */
|
|
3929
|
+
204: {
|
|
3930
|
+
headers: {
|
|
3931
|
+
[name: string]: unknown;
|
|
3932
|
+
};
|
|
3933
|
+
content?: never;
|
|
3934
|
+
};
|
|
3935
|
+
/** @description Forbidden */
|
|
3936
|
+
403: {
|
|
3937
|
+
headers: {
|
|
3938
|
+
[name: string]: unknown;
|
|
3939
|
+
};
|
|
3940
|
+
content: {
|
|
3941
|
+
"text/plain": string;
|
|
3942
|
+
};
|
|
3943
|
+
};
|
|
3944
|
+
/** @description Experiment not found */
|
|
3945
|
+
404: {
|
|
3946
|
+
headers: {
|
|
3947
|
+
[name: string]: unknown;
|
|
3948
|
+
};
|
|
3949
|
+
content: {
|
|
3950
|
+
"text/plain": string;
|
|
3951
|
+
};
|
|
3952
|
+
};
|
|
3953
|
+
/** @description Validation Error */
|
|
3954
|
+
422: {
|
|
3955
|
+
headers: {
|
|
3956
|
+
[name: string]: unknown;
|
|
3957
|
+
};
|
|
3958
|
+
content: {
|
|
3959
|
+
"application/json": components["schemas"]["HTTPValidationError"];
|
|
3960
|
+
};
|
|
3961
|
+
};
|
|
3962
|
+
};
|
|
3963
|
+
};
|
|
3964
|
+
getIncompleteExperimentRuns: {
|
|
3965
|
+
parameters: {
|
|
3966
|
+
query?: {
|
|
3967
|
+
/** @description Cursor for pagination */
|
|
3968
|
+
cursor?: string | null;
|
|
3969
|
+
/** @description Maximum number of examples with incomplete runs to return */
|
|
3970
|
+
limit?: number;
|
|
3971
|
+
};
|
|
3972
|
+
header?: never;
|
|
3973
|
+
path: {
|
|
3974
|
+
experiment_id: string;
|
|
3975
|
+
};
|
|
3976
|
+
cookie?: never;
|
|
3977
|
+
};
|
|
3978
|
+
requestBody?: never;
|
|
3979
|
+
responses: {
|
|
3980
|
+
/** @description Incomplete runs retrieved successfully */
|
|
3981
|
+
200: {
|
|
3982
|
+
headers: {
|
|
3983
|
+
[name: string]: unknown;
|
|
3984
|
+
};
|
|
3985
|
+
content: {
|
|
3986
|
+
"application/json": components["schemas"]["GetIncompleteExperimentRunsResponseBody"];
|
|
3987
|
+
};
|
|
3988
|
+
};
|
|
3989
|
+
/** @description Forbidden */
|
|
3990
|
+
403: {
|
|
3991
|
+
headers: {
|
|
3992
|
+
[name: string]: unknown;
|
|
3993
|
+
};
|
|
3994
|
+
content: {
|
|
3995
|
+
"text/plain": string;
|
|
3996
|
+
};
|
|
3997
|
+
};
|
|
3998
|
+
/** @description Experiment not found */
|
|
3999
|
+
404: {
|
|
4000
|
+
headers: {
|
|
4001
|
+
[name: string]: unknown;
|
|
4002
|
+
};
|
|
4003
|
+
content: {
|
|
4004
|
+
"text/plain": string;
|
|
4005
|
+
};
|
|
4006
|
+
};
|
|
4007
|
+
/** @description Invalid cursor format */
|
|
4008
|
+
422: {
|
|
4009
|
+
headers: {
|
|
4010
|
+
[name: string]: unknown;
|
|
4011
|
+
};
|
|
4012
|
+
content: {
|
|
4013
|
+
"text/plain": string;
|
|
4014
|
+
};
|
|
4015
|
+
};
|
|
4016
|
+
};
|
|
4017
|
+
};
|
|
3771
4018
|
getExperimentJSON: {
|
|
3772
4019
|
parameters: {
|
|
3773
4020
|
query?: never;
|
|
@@ -3954,7 +4201,7 @@ export interface operations {
|
|
|
3954
4201
|
"text/plain": string;
|
|
3955
4202
|
};
|
|
3956
4203
|
};
|
|
3957
|
-
/** @description
|
|
4204
|
+
/** @description Experiment run already exists with a successful result and cannot be updated */
|
|
3958
4205
|
409: {
|
|
3959
4206
|
headers: {
|
|
3960
4207
|
[name: string]: unknown;
|
|
@@ -3974,6 +4221,71 @@ export interface operations {
|
|
|
3974
4221
|
};
|
|
3975
4222
|
};
|
|
3976
4223
|
};
|
|
4224
|
+
getIncompleteExperimentEvaluations: {
|
|
4225
|
+
parameters: {
|
|
4226
|
+
query?: {
|
|
4227
|
+
/** @description Evaluation names to check */
|
|
4228
|
+
evaluation_name?: string[];
|
|
4229
|
+
/** @description Cursor for pagination */
|
|
4230
|
+
cursor?: string | null;
|
|
4231
|
+
/** @description Maximum number of runs with incomplete evaluations to return */
|
|
4232
|
+
limit?: number;
|
|
4233
|
+
};
|
|
4234
|
+
header?: never;
|
|
4235
|
+
path: {
|
|
4236
|
+
experiment_id: string;
|
|
4237
|
+
};
|
|
4238
|
+
cookie?: never;
|
|
4239
|
+
};
|
|
4240
|
+
requestBody?: never;
|
|
4241
|
+
responses: {
|
|
4242
|
+
/** @description Incomplete evaluations retrieved successfully */
|
|
4243
|
+
200: {
|
|
4244
|
+
headers: {
|
|
4245
|
+
[name: string]: unknown;
|
|
4246
|
+
};
|
|
4247
|
+
content: {
|
|
4248
|
+
"application/json": components["schemas"]["GetIncompleteEvaluationsResponseBody"];
|
|
4249
|
+
};
|
|
4250
|
+
};
|
|
4251
|
+
/** @description No evaluator names provided */
|
|
4252
|
+
400: {
|
|
4253
|
+
headers: {
|
|
4254
|
+
[name: string]: unknown;
|
|
4255
|
+
};
|
|
4256
|
+
content: {
|
|
4257
|
+
"text/plain": string;
|
|
4258
|
+
};
|
|
4259
|
+
};
|
|
4260
|
+
/** @description Forbidden */
|
|
4261
|
+
403: {
|
|
4262
|
+
headers: {
|
|
4263
|
+
[name: string]: unknown;
|
|
4264
|
+
};
|
|
4265
|
+
content: {
|
|
4266
|
+
"text/plain": string;
|
|
4267
|
+
};
|
|
4268
|
+
};
|
|
4269
|
+
/** @description Experiment not found */
|
|
4270
|
+
404: {
|
|
4271
|
+
headers: {
|
|
4272
|
+
[name: string]: unknown;
|
|
4273
|
+
};
|
|
4274
|
+
content: {
|
|
4275
|
+
"text/plain": string;
|
|
4276
|
+
};
|
|
4277
|
+
};
|
|
4278
|
+
/** @description Invalid cursor format */
|
|
4279
|
+
422: {
|
|
4280
|
+
headers: {
|
|
4281
|
+
[name: string]: unknown;
|
|
4282
|
+
};
|
|
4283
|
+
content: {
|
|
4284
|
+
"text/plain": string;
|
|
4285
|
+
};
|
|
4286
|
+
};
|
|
4287
|
+
};
|
|
4288
|
+
};
|
|
3977
4289
|
upsertExperimentEvaluation: {
|
|
3978
4290
|
parameters: {
|
|
3979
4291
|
query?: never;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createClient } from "../client";
|
|
2
|
+
import { ClientFn } from "../types/core";
|
|
3
|
+
import { ExperimentInfo } from "../types/experiments";
|
|
4
|
+
|
|
5
|
+
import invariant from "tiny-invariant";
|
|
6
|
+
|
|
7
|
+
export type CreateExperimentParams = ClientFn & {
|
|
8
|
+
/**
|
|
9
|
+
* The dataset ID to create the experiment for
|
|
10
|
+
*/
|
|
11
|
+
datasetId: string;
|
|
12
|
+
/**
|
|
13
|
+
* The dataset version ID (if omitted, the latest version will be used)
|
|
14
|
+
*/
|
|
15
|
+
datasetVersionId?: string;
|
|
16
|
+
/**
|
|
17
|
+
* The name of the experiment (if omitted, a random name will be generated)
|
|
18
|
+
*/
|
|
19
|
+
experimentName?: string;
|
|
20
|
+
/**
|
|
21
|
+
* An optional description of the experiment
|
|
22
|
+
*/
|
|
23
|
+
experimentDescription?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Metadata for the experiment
|
|
26
|
+
*/
|
|
27
|
+
experimentMetadata?: Record<string, unknown>;
|
|
28
|
+
/**
|
|
29
|
+
* List of dataset split identifiers (GlobalIDs or names) to filter by
|
|
30
|
+
*/
|
|
31
|
+
splits?: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* Number of times the experiment should be repeated for each example
|
|
34
|
+
* @default 1
|
|
35
|
+
*/
|
|
36
|
+
repetitions?: number;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create a new experiment without running it.
|
|
41
|
+
* This creates an experiment record that can later be executed using resumeExperiment.
|
|
42
|
+
*/
|
|
43
|
+
export async function createExperiment({
|
|
44
|
+
client: _client,
|
|
45
|
+
datasetId,
|
|
46
|
+
datasetVersionId,
|
|
47
|
+
experimentName,
|
|
48
|
+
experimentDescription,
|
|
49
|
+
experimentMetadata = {},
|
|
50
|
+
splits,
|
|
51
|
+
repetitions = 1,
|
|
52
|
+
}: CreateExperimentParams): Promise<ExperimentInfo> {
|
|
53
|
+
const client = _client || createClient();
|
|
54
|
+
|
|
55
|
+
const experimentResponse = await client
|
|
56
|
+
.POST("/v1/datasets/{dataset_id}/experiments", {
|
|
57
|
+
params: {
|
|
58
|
+
path: {
|
|
59
|
+
dataset_id: datasetId,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
body: {
|
|
63
|
+
name: experimentName,
|
|
64
|
+
description: experimentDescription,
|
|
65
|
+
metadata: experimentMetadata,
|
|
66
|
+
repetitions,
|
|
67
|
+
...(datasetVersionId ? { version_id: datasetVersionId } : {}),
|
|
68
|
+
...(splits ? { splits: [...splits] } : {}),
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
.then((res) => res.data?.data);
|
|
72
|
+
|
|
73
|
+
invariant(experimentResponse, `Failed to create experiment`);
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
id: experimentResponse.id,
|
|
77
|
+
datasetId: experimentResponse.dataset_id,
|
|
78
|
+
datasetVersionId: experimentResponse.dataset_version_id,
|
|
79
|
+
datasetSplits: splits ? [...splits] : [],
|
|
80
|
+
repetitions: experimentResponse.repetitions,
|
|
81
|
+
metadata: experimentResponse.metadata || {},
|
|
82
|
+
projectName: experimentResponse.project_name ?? null,
|
|
83
|
+
createdAt: experimentResponse.created_at,
|
|
84
|
+
updatedAt: experimentResponse.updated_at,
|
|
85
|
+
exampleCount: experimentResponse.example_count,
|
|
86
|
+
successfulRunCount: experimentResponse.successful_run_count,
|
|
87
|
+
failedRunCount: experimentResponse.failed_run_count,
|
|
88
|
+
missingRunCount: experimentResponse.missing_run_count,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { createClient } from "../client";
|
|
2
|
+
import { ClientFn } from "../types/core";
|
|
3
|
+
import { ensureString } from "../utils/ensureString";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parameters to delete an experiment
|
|
7
|
+
*/
|
|
8
|
+
export interface DeleteExperimentParams extends ClientFn {
|
|
9
|
+
/**
|
|
10
|
+
* The ID of the experiment to delete
|
|
11
|
+
*/
|
|
12
|
+
experimentId: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Delete an experiment by ID.
|
|
17
|
+
*
|
|
18
|
+
* **Important**: This operation permanently deletes the experiment and all its associated
|
|
19
|
+
* runs, evaluations, and annotations.
|
|
20
|
+
*
|
|
21
|
+
* Behavior:
|
|
22
|
+
* - Deletes the experiment and all its data
|
|
23
|
+
* - Returns successfully if experiment is found and deleted
|
|
24
|
+
* - Throws error if experiment is not found (404) or other errors occur
|
|
25
|
+
*
|
|
26
|
+
* @param params - The parameters to delete an experiment
|
|
27
|
+
* @returns Promise that resolves when the experiment is successfully deleted
|
|
28
|
+
* @throws Error if the experiment is not found or deletion fails
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { deleteExperiment } from "@arizeai/phoenix-client/experiments";
|
|
33
|
+
*
|
|
34
|
+
* await deleteExperiment({
|
|
35
|
+
* experimentId: "exp_123",
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export async function deleteExperiment({
|
|
40
|
+
client: _client,
|
|
41
|
+
experimentId,
|
|
42
|
+
}: DeleteExperimentParams): Promise<void> {
|
|
43
|
+
const client = _client ?? createClient();
|
|
44
|
+
|
|
45
|
+
const { error } = await client.DELETE("/v1/experiments/{experiment_id}", {
|
|
46
|
+
params: {
|
|
47
|
+
path: {
|
|
48
|
+
experiment_id: experimentId,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
if (error) {
|
|
54
|
+
const isNotFound =
|
|
55
|
+
typeof error === "object" &&
|
|
56
|
+
error !== null &&
|
|
57
|
+
"status" in error &&
|
|
58
|
+
error.status === 404;
|
|
59
|
+
if (isNotFound) {
|
|
60
|
+
throw new Error(`Experiment not found: ${experimentId}`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Extract meaningful error information
|
|
64
|
+
const errorMessage = ensureString(error);
|
|
65
|
+
throw new Error(`Failed to delete experiment: ${errorMessage}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -32,7 +32,14 @@ export async function getExperimentInfo({
|
|
|
32
32
|
id: experimentData.id,
|
|
33
33
|
datasetId: experimentData.dataset_id,
|
|
34
34
|
datasetVersionId: experimentData.dataset_version_id,
|
|
35
|
-
|
|
36
|
-
metadata: experimentData.metadata,
|
|
35
|
+
repetitions: experimentData.repetitions,
|
|
36
|
+
metadata: experimentData.metadata || {},
|
|
37
|
+
projectName: experimentData.project_name || null,
|
|
38
|
+
createdAt: experimentData.created_at,
|
|
39
|
+
updatedAt: experimentData.updated_at,
|
|
40
|
+
exampleCount: experimentData.example_count,
|
|
41
|
+
successfulRunCount: experimentData.successful_run_count,
|
|
42
|
+
failedRunCount: experimentData.failed_run_count,
|
|
43
|
+
missingRunCount: experimentData.missing_run_count,
|
|
37
44
|
};
|
|
38
45
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { AnnotatorKind } from "../../types/annotations";
|
|
2
|
+
import { Evaluator } from "../../types/experiments";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Wrap an evaluator function in an object with a name property.
|
|
6
|
+
*
|
|
7
|
+
* @experimental This feature is not complete, and will change in the future.
|
|
8
|
+
*
|
|
9
|
+
* @param params - The parameters for creating the evaluator
|
|
10
|
+
* @param params.name - The name of the evaluator.
|
|
11
|
+
* @param params.kind - The kind of evaluator (e.g., "CODE", "LLM")
|
|
12
|
+
* @param params.evaluate - The evaluator function.
|
|
13
|
+
* @returns The evaluator object.
|
|
14
|
+
*/
|
|
15
|
+
export function asExperimentEvaluator({
|
|
16
|
+
name,
|
|
17
|
+
kind,
|
|
18
|
+
evaluate,
|
|
19
|
+
}: {
|
|
20
|
+
name: string;
|
|
21
|
+
kind: AnnotatorKind;
|
|
22
|
+
evaluate: Evaluator["evaluate"];
|
|
23
|
+
}): Evaluator {
|
|
24
|
+
return {
|
|
25
|
+
name,
|
|
26
|
+
kind,
|
|
27
|
+
evaluate,
|
|
28
|
+
};
|
|
29
|
+
}
|