@arizeai/phoenix-client 4.1.0 → 4.2.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 (40) hide show
  1. package/dist/esm/datasets/createOrGetDataset.d.ts +18 -0
  2. package/dist/esm/datasets/createOrGetDataset.d.ts.map +1 -0
  3. package/dist/esm/datasets/createOrGetDataset.js +29 -0
  4. package/dist/esm/datasets/createOrGetDataset.js.map +1 -0
  5. package/dist/esm/datasets/index.d.ts +1 -0
  6. package/dist/esm/datasets/index.d.ts.map +1 -1
  7. package/dist/esm/datasets/index.js +1 -0
  8. package/dist/esm/datasets/index.js.map +1 -1
  9. package/dist/esm/experiments/instrumentation.d.ts +7 -1
  10. package/dist/esm/experiments/instrumentation.d.ts.map +1 -1
  11. package/dist/esm/experiments/instrumentation.js +5 -3
  12. package/dist/esm/experiments/instrumentation.js.map +1 -1
  13. package/dist/esm/experiments/runExperiment.d.ts +13 -2
  14. package/dist/esm/experiments/runExperiment.d.ts.map +1 -1
  15. package/dist/esm/experiments/runExperiment.js +7 -3
  16. package/dist/esm/experiments/runExperiment.js.map +1 -1
  17. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  18. package/dist/src/datasets/createOrGetDataset.d.ts +18 -0
  19. package/dist/src/datasets/createOrGetDataset.d.ts.map +1 -0
  20. package/dist/src/datasets/createOrGetDataset.js +32 -0
  21. package/dist/src/datasets/createOrGetDataset.js.map +1 -0
  22. package/dist/src/datasets/index.d.ts +1 -0
  23. package/dist/src/datasets/index.d.ts.map +1 -1
  24. package/dist/src/datasets/index.js +1 -0
  25. package/dist/src/datasets/index.js.map +1 -1
  26. package/dist/src/experiments/instrumentation.d.ts +7 -1
  27. package/dist/src/experiments/instrumentation.d.ts.map +1 -1
  28. package/dist/src/experiments/instrumentation.js +4 -2
  29. package/dist/src/experiments/instrumentation.js.map +1 -1
  30. package/dist/src/experiments/runExperiment.d.ts +13 -2
  31. package/dist/src/experiments/runExperiment.d.ts.map +1 -1
  32. package/dist/src/experiments/runExperiment.js +6 -2
  33. package/dist/src/experiments/runExperiment.js.map +1 -1
  34. package/dist/src/prompts/sdks/toSDK.d.ts +2 -2
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +3 -3
  37. package/src/datasets/createOrGetDataset.ts +39 -0
  38. package/src/datasets/index.ts +1 -0
  39. package/src/experiments/instrumentation.ts +9 -1
  40. package/src/experiments/runExperiment.ts +22 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arizeai/phoenix-client",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "A client for the Phoenix API",
5
5
  "main": "dist/src/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -67,7 +67,7 @@
67
67
  "tsx": "^4.19.3",
68
68
  "typescript": "^5.8.2",
69
69
  "vitest": "^2.1.9",
70
- "@arizeai/phoenix-evals": "0.2.1"
70
+ "@arizeai/phoenix-evals": "0.2.2"
71
71
  },
72
72
  "dependencies": {
73
73
  "@arizeai/openinference-semantic-conventions": "^1.1.0",
@@ -98,7 +98,7 @@
98
98
  "prebuild": "pnpm run clean && pnpm run generate",
99
99
  "generate": "openapi-typescript --empty-objects-unknown=true --default-non-nullable=false ../../../schemas/openapi.json -o ./src/__generated__/api/v1.ts",
100
100
  "build": "tsc --build tsconfig.json tsconfig.esm.json && tsc-alias -p tsconfig.esm.json",
101
- "postbuild": "echo '{\"type\": \"module\"}' > ./dist/esm/package.json && rimraf dist/test dist/examples",
101
+ "postbuild": "echo '{\"type\": \"module\"}' > ./dist/esm/package.json",
102
102
  "type:check": "tsc --noEmit",
103
103
  "test": "vitest --typecheck"
104
104
  }
@@ -0,0 +1,39 @@
1
+ import { createClient } from "../client";
2
+ import { CreateDatasetParams, createDataset } from "./createDataset";
3
+ import { getDatasetInfoByName } from "./getDatasetInfoByName";
4
+
5
+ export type CreateOrGetDatasetParams = CreateDatasetParams;
6
+
7
+ export type CreateOrGetDatasetResponse = {
8
+ datasetId: string;
9
+ };
10
+
11
+ /**
12
+ * Given the parameters to create a dataset, this function will either
13
+ * retrieve an existing dataset by name or create a new one with the provided parameters.
14
+ *
15
+ * This is useful in cases where you would like to re-run a pipeline like:
16
+ * - ensure dataset exists
17
+ * - create a task
18
+ * - run experiment
19
+ * - evaluate experiment
20
+ * without having to create a new dataset each time.
21
+ */
22
+ export async function createOrGetDataset({
23
+ name,
24
+ description,
25
+ examples,
26
+ client: _client,
27
+ }: CreateOrGetDatasetParams): Promise<CreateOrGetDatasetResponse> {
28
+ const client = _client || createClient();
29
+ // start by fetching an existing dataset by name, catching any errors that occur
30
+ try {
31
+ const dataset = await getDatasetInfoByName({ datasetName: name, client });
32
+ return {
33
+ datasetId: dataset.id,
34
+ };
35
+ } catch {
36
+ // If the dataset doesn't exist, create it, falling back to the error handling inside createDataset
37
+ return await createDataset({ name, description, examples, client });
38
+ }
39
+ }
@@ -3,3 +3,4 @@ export * from "./getDataset";
3
3
  export * from "./getDatasetExamples";
4
4
  export * from "./appendDatasetExamples";
5
5
  export * from "./getDatasetInfo";
6
+ export * from "./createOrGetDataset";
@@ -20,6 +20,7 @@ export function createProvider({
20
20
  baseUrl,
21
21
  headers,
22
22
  useBatchSpanProcessor = true,
23
+ diagLogLevel,
23
24
  }: {
24
25
  projectName: string;
25
26
  headers: HeadersOptions;
@@ -32,8 +33,15 @@ export function createProvider({
32
33
  * The base URL of the Phoenix. Doesn't include the /v1/traces path.
33
34
  */
34
35
  baseUrl: string;
36
+ /**
37
+ * The diag log level to set for the built in DiagConsoleLogger instance.
38
+ * Omit to disable built in logging.
39
+ */
40
+ diagLogLevel?: DiagLogLevel;
35
41
  }) {
36
- diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR);
42
+ if (diagLogLevel) {
43
+ diag.setLogger(new DiagConsoleLogger(), diagLogLevel);
44
+ }
37
45
 
38
46
  const exporter = new OTLPTraceExporter({
39
47
  url: `${baseUrl}/v1/traces`,
@@ -23,7 +23,12 @@ import { pluralize } from "../utils/pluralize";
23
23
  import { promisifyResult } from "../utils/promisifyResult";
24
24
  import { AnnotatorKind } from "../types/annotations";
25
25
  import { createProvider, createNoOpProvider } from "./instrumentation";
26
- import { SpanStatusCode, Tracer, trace } from "@opentelemetry/api";
26
+ import {
27
+ type DiagLogLevel,
28
+ SpanStatusCode,
29
+ Tracer,
30
+ trace,
31
+ } from "@opentelemetry/api";
27
32
  import {
28
33
  MimeType,
29
34
  OpenInferenceSpanKind,
@@ -111,6 +116,11 @@ export type RunExperimentParams = ClientFn & {
111
116
  * @default true
112
117
  */
113
118
  useBatchSpanProcessor?: boolean;
119
+ /**
120
+ * Log level to set for the default DiagConsoleLogger when tracing.
121
+ * Omit to disable default diag logging, or to bring your own.
122
+ */
123
+ diagLogLevel?: DiagLogLevel;
114
124
  };
115
125
 
116
126
  /**
@@ -160,6 +170,7 @@ export async function runExperiment({
160
170
  setGlobalTracerProvider = true,
161
171
  repetitions = 1,
162
172
  useBatchSpanProcessor = true,
173
+ diagLogLevel,
163
174
  }: RunExperimentParams): Promise<RanExperiment> {
164
175
  // Validation
165
176
  assert(
@@ -227,6 +238,7 @@ export async function runExperiment({
227
238
  baseUrl,
228
239
  headers: client.config.headers ?? {},
229
240
  useBatchSpanProcessor,
241
+ diagLogLevel,
230
242
  });
231
243
  // Register the provider
232
244
  if (setGlobalTracerProvider) {
@@ -298,6 +310,8 @@ export async function runExperiment({
298
310
  concurrency,
299
311
  dryRun,
300
312
  tracerProvider: provider,
313
+ diagLogLevel,
314
+ useBatchSpanProcessor,
301
315
  });
302
316
  ranExperiment.evaluationRuns = evaluationRuns;
303
317
 
@@ -468,6 +482,7 @@ export async function evaluateExperiment({
468
482
  setGlobalTracerProvider = true,
469
483
  useBatchSpanProcessor = true,
470
484
  tracerProvider: paramsTracerProvider,
485
+ diagLogLevel,
471
486
  }: {
472
487
  /**
473
488
  * The experiment to evaluate
@@ -502,6 +517,11 @@ export async function evaluateExperiment({
502
517
  * Intended as a pass-through from runExperiment
503
518
  */
504
519
  tracerProvider?: NodeTracerProvider | null;
520
+ /**
521
+ * Log level to set for the default DiagConsoleLogger when tracing.
522
+ * Omit to disable default diag logging, or to bring your own.
523
+ */
524
+ diagLogLevel?: DiagLogLevel;
505
525
  }): Promise<RanExperiment> {
506
526
  const isDryRun = typeof dryRun === "number" || dryRun === true;
507
527
  const client = _client ?? createClient();
@@ -521,6 +541,7 @@ export async function evaluateExperiment({
521
541
  baseUrl,
522
542
  headers: client.config.headers ?? {},
523
543
  useBatchSpanProcessor,
544
+ diagLogLevel,
524
545
  });
525
546
  if (setGlobalTracerProvider) {
526
547
  provider.register();