@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
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LLMEvaluator } from "@arizeai/phoenix-evals";
|
|
2
|
+
|
|
3
|
+
import { Evaluator } from "../../types/experiments";
|
|
4
|
+
|
|
5
|
+
import { asExperimentEvaluator } from "./asExperimentEvaluator";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A function that acts as a bridge, converting phoenix-evals to be experiment evaluator compatible
|
|
9
|
+
* @param phoenixEvaluator
|
|
10
|
+
* @returns an experiment compatible Evaluator
|
|
11
|
+
*/
|
|
12
|
+
export function fromPhoenixLLMEvaluator<
|
|
13
|
+
RecordType extends Record<string, unknown>,
|
|
14
|
+
>(phoenixLLMEvaluator: LLMEvaluator<RecordType>): Evaluator {
|
|
15
|
+
return asExperimentEvaluator({
|
|
16
|
+
name: phoenixLLMEvaluator.name,
|
|
17
|
+
kind: "LLM",
|
|
18
|
+
evaluate: (example) => {
|
|
19
|
+
// For now blindly coerce the types
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
return phoenixLLMEvaluator.evaluate(example as any);
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { LLMEvaluator } from "@arizeai/phoenix-evals";
|
|
2
|
+
|
|
3
|
+
import { Evaluator } from "../../types/experiments";
|
|
4
|
+
|
|
5
|
+
import { fromPhoenixLLMEvaluator } from "./fromPhoenixLLMEvaluator";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A type guard for LLMEvaluator classes.
|
|
9
|
+
* Note: this is not fool proof, and may need to be updated as phoenix-evals evolves.
|
|
10
|
+
*/
|
|
11
|
+
function isPhoenixLLMEvaluator(
|
|
12
|
+
evaluator: unknown
|
|
13
|
+
): evaluator is LLMEvaluator<Record<string, unknown>> {
|
|
14
|
+
if (
|
|
15
|
+
typeof evaluator !== "object" ||
|
|
16
|
+
evaluator === null ||
|
|
17
|
+
!("evaluate" in evaluator) ||
|
|
18
|
+
typeof evaluator.evaluate !== "function" ||
|
|
19
|
+
!("name" in evaluator) ||
|
|
20
|
+
typeof evaluator.name !== "string" ||
|
|
21
|
+
!("kind" in evaluator) ||
|
|
22
|
+
typeof evaluator.kind !== "string" ||
|
|
23
|
+
evaluator.kind !== "LLM"
|
|
24
|
+
) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Check if it's a class instance (not a plain object)
|
|
29
|
+
// Phoenix evaluators are class instances, plain evaluators are objects
|
|
30
|
+
const isClassInstance =
|
|
31
|
+
evaluator.constructor !== Object && evaluator.constructor !== undefined;
|
|
32
|
+
|
|
33
|
+
// If it's a class instance, it's definitely a phoenix evaluator
|
|
34
|
+
if (isClassInstance) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Otherwise, it's a plain Evaluator object, not a phoenix evaluator
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A type guard for Evaluator objects.
|
|
44
|
+
* Note: this is not fool proof, and may need to be updated as the package evolves
|
|
45
|
+
*/
|
|
46
|
+
function isExperimentEvaluator(evaluator: unknown): evaluator is Evaluator {
|
|
47
|
+
return (
|
|
48
|
+
typeof evaluator === "object" &&
|
|
49
|
+
evaluator !== null &&
|
|
50
|
+
"evaluate" in evaluator &&
|
|
51
|
+
typeof evaluator.evaluate === "function" &&
|
|
52
|
+
"name" in evaluator &&
|
|
53
|
+
typeof evaluator.name === "string" &&
|
|
54
|
+
"kind" in evaluator &&
|
|
55
|
+
typeof evaluator.kind === "string" &&
|
|
56
|
+
(evaluator.kind === "CODE" || evaluator.kind === "LLM")
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* A function that normalizes evaluators to be runnable by experiments. This is a best effort to support a variety of evaluator types.
|
|
62
|
+
*/
|
|
63
|
+
export function getExperimentEvaluators(evaluators: unknown[]): Evaluator[] {
|
|
64
|
+
return evaluators.map((evaluator) => {
|
|
65
|
+
// Check phoenix evaluators first, as they are more specific
|
|
66
|
+
if (isPhoenixLLMEvaluator(evaluator)) {
|
|
67
|
+
return fromPhoenixLLMEvaluator(evaluator);
|
|
68
|
+
}
|
|
69
|
+
if (isExperimentEvaluator(evaluator)) {
|
|
70
|
+
return evaluator;
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`Unsupported evaluator: ${JSON.stringify(evaluator)}`);
|
|
73
|
+
});
|
|
74
|
+
}
|
package/src/experiments/index.ts
CHANGED
|
@@ -2,3 +2,9 @@ export * from "./getExperimentInfo";
|
|
|
2
2
|
export * from "./getExperiment";
|
|
3
3
|
export * from "./getExperimentRuns";
|
|
4
4
|
export * from "./runExperiment";
|
|
5
|
+
export * from "./createExperiment";
|
|
6
|
+
export * from "./listExperiments";
|
|
7
|
+
export * from "./deleteExperiment";
|
|
8
|
+
export * from "./resumeExperiment";
|
|
9
|
+
export * from "./resumeEvaluation";
|
|
10
|
+
export * from "./helpers";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { components } from "../__generated__/api/v1";
|
|
2
|
+
import { createClient } from "../client";
|
|
3
|
+
import { ClientFn } from "../types/core";
|
|
4
|
+
import { ExperimentInfo } from "../types/experiments";
|
|
5
|
+
|
|
6
|
+
import invariant from "tiny-invariant";
|
|
7
|
+
|
|
8
|
+
export type ListExperimentsParams = ClientFn & {
|
|
9
|
+
/**
|
|
10
|
+
* The dataset ID to list experiments for
|
|
11
|
+
*/
|
|
12
|
+
datasetId: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const DEFAULT_PAGE_SIZE = 50;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* List all experiments for a dataset with automatic pagination handling.
|
|
19
|
+
*
|
|
20
|
+
* This function automatically handles pagination behind the scenes and returns
|
|
21
|
+
* a simple list of experiments.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* import { listExperiments } from "@arizeai/phoenix-client/experiments";
|
|
26
|
+
*
|
|
27
|
+
* const experiments = await listExperiments({
|
|
28
|
+
* datasetId: "dataset_123",
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* for (const experiment of experiments) {
|
|
32
|
+
* console.log(`Experiment: ${experiment.id}, Runs: ${experiment.successfulRunCount}`);
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export async function listExperiments({
|
|
37
|
+
client: _client,
|
|
38
|
+
datasetId,
|
|
39
|
+
}: ListExperimentsParams): Promise<ExperimentInfo[]> {
|
|
40
|
+
const client = _client || createClient();
|
|
41
|
+
|
|
42
|
+
const experiments: ExperimentInfo[] = [];
|
|
43
|
+
let cursor: string | null = null;
|
|
44
|
+
|
|
45
|
+
do {
|
|
46
|
+
const res: {
|
|
47
|
+
data?: components["schemas"]["ListExperimentsResponseBody"];
|
|
48
|
+
} = await client.GET("/v1/datasets/{dataset_id}/experiments", {
|
|
49
|
+
params: {
|
|
50
|
+
path: {
|
|
51
|
+
dataset_id: datasetId,
|
|
52
|
+
},
|
|
53
|
+
query: {
|
|
54
|
+
cursor,
|
|
55
|
+
limit: DEFAULT_PAGE_SIZE,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
cursor = res.data?.next_cursor || null;
|
|
61
|
+
const data = res.data?.data;
|
|
62
|
+
invariant(data, "Failed to list experiments");
|
|
63
|
+
|
|
64
|
+
experiments.push(
|
|
65
|
+
...data.map((exp) => ({
|
|
66
|
+
id: exp.id,
|
|
67
|
+
datasetId: exp.dataset_id,
|
|
68
|
+
datasetVersionId: exp.dataset_version_id,
|
|
69
|
+
repetitions: exp.repetitions,
|
|
70
|
+
metadata: exp.metadata || {},
|
|
71
|
+
projectName: exp.project_name || null,
|
|
72
|
+
createdAt: exp.created_at,
|
|
73
|
+
updatedAt: exp.updated_at,
|
|
74
|
+
exampleCount: exp.example_count,
|
|
75
|
+
successfulRunCount: exp.successful_run_count,
|
|
76
|
+
failedRunCount: exp.failed_run_count,
|
|
77
|
+
missingRunCount: exp.missing_run_count,
|
|
78
|
+
}))
|
|
79
|
+
);
|
|
80
|
+
} while (cursor != null);
|
|
81
|
+
|
|
82
|
+
return experiments;
|
|
83
|
+
}
|