@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.
Files changed (151) hide show
  1. package/README.md +3 -3
  2. package/dist/esm/__generated__/api/v1.d.ts +321 -9
  3. package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
  4. package/dist/esm/experiments/createExperiment.d.ts +39 -0
  5. package/dist/esm/experiments/createExperiment.d.ts.map +1 -0
  6. package/dist/esm/experiments/createExperiment.js +43 -0
  7. package/dist/esm/experiments/createExperiment.js.map +1 -0
  8. package/dist/esm/experiments/deleteExperiment.d.ts +36 -0
  9. package/dist/esm/experiments/deleteExperiment.d.ts.map +1 -0
  10. package/dist/esm/experiments/deleteExperiment.js +49 -0
  11. package/dist/esm/experiments/deleteExperiment.js.map +1 -0
  12. package/dist/esm/experiments/getExperimentInfo.d.ts.map +1 -1
  13. package/dist/esm/experiments/getExperimentInfo.js +9 -2
  14. package/dist/esm/experiments/getExperimentInfo.js.map +1 -1
  15. package/dist/esm/experiments/helpers/asExperimentEvaluator.d.ts +19 -0
  16. package/dist/esm/experiments/helpers/asExperimentEvaluator.d.ts.map +1 -0
  17. package/dist/esm/experiments/helpers/asExperimentEvaluator.js +19 -0
  18. package/dist/esm/experiments/helpers/asExperimentEvaluator.js.map +1 -0
  19. package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.d.ts +9 -0
  20. package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.d.ts.map +1 -0
  21. package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.js +18 -0
  22. package/dist/esm/experiments/helpers/fromPhoenixLLMEvaluator.js.map +1 -0
  23. package/dist/esm/experiments/helpers/getExperimentEvaluators.d.ts +6 -0
  24. package/dist/esm/experiments/helpers/getExperimentEvaluators.d.ts.map +1 -0
  25. package/dist/esm/experiments/helpers/getExperimentEvaluators.js +58 -0
  26. package/dist/esm/experiments/helpers/getExperimentEvaluators.js.map +1 -0
  27. package/dist/esm/experiments/helpers/index.d.ts +4 -0
  28. package/dist/esm/experiments/helpers/index.d.ts.map +1 -0
  29. package/dist/esm/experiments/helpers/index.js +4 -0
  30. package/dist/esm/experiments/helpers/index.js.map +1 -0
  31. package/dist/esm/experiments/index.d.ts +6 -0
  32. package/dist/esm/experiments/index.d.ts.map +1 -1
  33. package/dist/esm/experiments/index.js +6 -0
  34. package/dist/esm/experiments/index.js.map +1 -1
  35. package/dist/esm/experiments/listExperiments.d.ts +29 -0
  36. package/dist/esm/experiments/listExperiments.d.ts.map +1 -0
  37. package/dist/esm/experiments/listExperiments.js +59 -0
  38. package/dist/esm/experiments/listExperiments.js.map +1 -0
  39. package/dist/esm/experiments/resumeEvaluation.d.ts +105 -0
  40. package/dist/esm/experiments/resumeEvaluation.d.ts.map +1 -0
  41. package/dist/esm/experiments/resumeEvaluation.js +559 -0
  42. package/dist/esm/experiments/resumeEvaluation.js.map +1 -0
  43. package/dist/esm/experiments/resumeExperiment.d.ts +102 -0
  44. package/dist/esm/experiments/resumeExperiment.d.ts.map +1 -0
  45. package/dist/esm/experiments/resumeExperiment.js +517 -0
  46. package/dist/esm/experiments/resumeExperiment.js.map +1 -0
  47. package/dist/esm/experiments/runExperiment.d.ts +4 -3
  48. package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
  49. package/dist/esm/experiments/runExperiment.js +32 -3
  50. package/dist/esm/experiments/runExperiment.js.map +1 -1
  51. package/dist/esm/prompts/createPrompt.d.ts +19 -1
  52. package/dist/esm/prompts/createPrompt.d.ts.map +1 -1
  53. package/dist/esm/prompts/createPrompt.js +14 -1
  54. package/dist/esm/prompts/createPrompt.js.map +1 -1
  55. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  56. package/dist/esm/types/experiments.d.ts +66 -3
  57. package/dist/esm/types/experiments.d.ts.map +1 -1
  58. package/dist/esm/utils/channel.d.ts +229 -0
  59. package/dist/esm/utils/channel.d.ts.map +1 -0
  60. package/dist/esm/utils/channel.js +352 -0
  61. package/dist/esm/utils/channel.js.map +1 -0
  62. package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
  63. package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
  64. package/dist/esm/utils/isHttpError.d.ts +21 -0
  65. package/dist/esm/utils/isHttpError.d.ts.map +1 -0
  66. package/dist/esm/utils/isHttpError.js +33 -0
  67. package/dist/esm/utils/isHttpError.js.map +1 -0
  68. package/dist/src/__generated__/api/v1.d.ts +321 -9
  69. package/dist/src/__generated__/api/v1.d.ts.map +1 -1
  70. package/dist/src/experiments/createExperiment.d.ts +39 -0
  71. package/dist/src/experiments/createExperiment.d.ts.map +1 -0
  72. package/dist/src/experiments/createExperiment.js +43 -0
  73. package/dist/src/experiments/createExperiment.js.map +1 -0
  74. package/dist/src/experiments/deleteExperiment.d.ts +36 -0
  75. package/dist/src/experiments/deleteExperiment.d.ts.map +1 -0
  76. package/dist/src/experiments/deleteExperiment.js +52 -0
  77. package/dist/src/experiments/deleteExperiment.js.map +1 -0
  78. package/dist/src/experiments/getExperimentInfo.d.ts.map +1 -1
  79. package/dist/src/experiments/getExperimentInfo.js +9 -2
  80. package/dist/src/experiments/getExperimentInfo.js.map +1 -1
  81. package/dist/src/experiments/helpers/asExperimentEvaluator.d.ts +19 -0
  82. package/dist/src/experiments/helpers/asExperimentEvaluator.d.ts.map +1 -0
  83. package/dist/src/experiments/helpers/asExperimentEvaluator.js +22 -0
  84. package/dist/src/experiments/helpers/asExperimentEvaluator.js.map +1 -0
  85. package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.d.ts +9 -0
  86. package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.d.ts.map +1 -0
  87. package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.js +21 -0
  88. package/dist/src/experiments/helpers/fromPhoenixLLMEvaluator.js.map +1 -0
  89. package/dist/src/experiments/helpers/getExperimentEvaluators.d.ts +6 -0
  90. package/dist/src/experiments/helpers/getExperimentEvaluators.d.ts.map +1 -0
  91. package/dist/src/experiments/helpers/getExperimentEvaluators.js +61 -0
  92. package/dist/src/experiments/helpers/getExperimentEvaluators.js.map +1 -0
  93. package/dist/src/experiments/helpers/index.d.ts +4 -0
  94. package/dist/src/experiments/helpers/index.d.ts.map +1 -0
  95. package/dist/src/experiments/helpers/index.js +20 -0
  96. package/dist/src/experiments/helpers/index.js.map +1 -0
  97. package/dist/src/experiments/index.d.ts +6 -0
  98. package/dist/src/experiments/index.d.ts.map +1 -1
  99. package/dist/src/experiments/index.js +6 -0
  100. package/dist/src/experiments/index.js.map +1 -1
  101. package/dist/src/experiments/listExperiments.d.ts +29 -0
  102. package/dist/src/experiments/listExperiments.d.ts.map +1 -0
  103. package/dist/src/experiments/listExperiments.js +66 -0
  104. package/dist/src/experiments/listExperiments.js.map +1 -0
  105. package/dist/src/experiments/resumeEvaluation.d.ts +105 -0
  106. package/dist/src/experiments/resumeEvaluation.d.ts.map +1 -0
  107. package/dist/src/experiments/resumeEvaluation.js +585 -0
  108. package/dist/src/experiments/resumeEvaluation.js.map +1 -0
  109. package/dist/src/experiments/resumeExperiment.d.ts +102 -0
  110. package/dist/src/experiments/resumeExperiment.d.ts.map +1 -0
  111. package/dist/src/experiments/resumeExperiment.js +540 -0
  112. package/dist/src/experiments/resumeExperiment.js.map +1 -0
  113. package/dist/src/experiments/runExperiment.d.ts +4 -3
  114. package/dist/src/experiments/runExperiment.d.ts.map +1 -1
  115. package/dist/src/experiments/runExperiment.js +32 -3
  116. package/dist/src/experiments/runExperiment.js.map +1 -1
  117. package/dist/src/prompts/createPrompt.d.ts +19 -1
  118. package/dist/src/prompts/createPrompt.d.ts.map +1 -1
  119. package/dist/src/prompts/createPrompt.js +14 -1
  120. package/dist/src/prompts/createPrompt.js.map +1 -1
  121. package/dist/src/types/experiments.d.ts +66 -3
  122. package/dist/src/types/experiments.d.ts.map +1 -1
  123. package/dist/src/utils/channel.d.ts +229 -0
  124. package/dist/src/utils/channel.d.ts.map +1 -0
  125. package/dist/src/utils/channel.js +385 -0
  126. package/dist/src/utils/channel.js.map +1 -0
  127. package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
  128. package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
  129. package/dist/src/utils/isHttpError.d.ts +21 -0
  130. package/dist/src/utils/isHttpError.d.ts.map +1 -0
  131. package/dist/src/utils/isHttpError.js +37 -0
  132. package/dist/src/utils/isHttpError.js.map +1 -0
  133. package/dist/tsconfig.tsbuildinfo +1 -1
  134. package/package.json +6 -5
  135. package/src/__generated__/api/v1.ts +321 -9
  136. package/src/experiments/createExperiment.ts +90 -0
  137. package/src/experiments/deleteExperiment.ts +67 -0
  138. package/src/experiments/getExperimentInfo.ts +9 -2
  139. package/src/experiments/helpers/asExperimentEvaluator.ts +29 -0
  140. package/src/experiments/helpers/fromPhoenixLLMEvaluator.ts +24 -0
  141. package/src/experiments/helpers/getExperimentEvaluators.ts +74 -0
  142. package/src/experiments/helpers/index.ts +3 -0
  143. package/src/experiments/index.ts +6 -0
  144. package/src/experiments/listExperiments.ts +83 -0
  145. package/src/experiments/resumeEvaluation.ts +804 -0
  146. package/src/experiments/resumeExperiment.ts +745 -0
  147. package/src/experiments/runExperiment.ts +37 -5
  148. package/src/prompts/createPrompt.ts +19 -1
  149. package/src/types/experiments.ts +72 -3
  150. package/src/utils/channel.ts +397 -0
  151. 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
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./asExperimentEvaluator";
2
+ export * from "./getExperimentEvaluators";
3
+ export * from "./fromPhoenixLLMEvaluator";
@@ -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
+ }