@arizeai/phoenix-cli 1.6.2 → 1.7.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 (38) hide show
  1. package/README.md +170 -1
  2. package/build/commands/annotationConfig.d.ts +4 -0
  3. package/build/commands/annotationConfig.d.ts.map +1 -1
  4. package/build/commands/annotationConfig.js +506 -8
  5. package/build/commands/annotationConfig.js.map +1 -1
  6. package/build/commands/annotationConfigValues.d.ts +35 -0
  7. package/build/commands/annotationConfigValues.d.ts.map +1 -0
  8. package/build/commands/annotationConfigValues.js +97 -0
  9. package/build/commands/annotationConfigValues.js.map +1 -0
  10. package/build/commands/dataset.d.ts.map +1 -1
  11. package/build/commands/dataset.js +2 -7
  12. package/build/commands/dataset.js.map +1 -1
  13. package/build/commands/docs.d.ts.map +1 -1
  14. package/build/commands/docs.js +2 -1
  15. package/build/commands/docs.js.map +1 -1
  16. package/build/commands/formatAnnotationConfigs.d.ts +16 -0
  17. package/build/commands/formatAnnotationConfigs.d.ts.map +1 -1
  18. package/build/commands/formatAnnotationConfigs.js +15 -0
  19. package/build/commands/formatAnnotationConfigs.js.map +1 -1
  20. package/build/commands/profile.d.ts.map +1 -1
  21. package/build/commands/profile.js +2 -4
  22. package/build/commands/profile.js.map +1 -1
  23. package/build/optionParsers.d.ts +17 -0
  24. package/build/optionParsers.d.ts.map +1 -0
  25. package/build/optionParsers.js +22 -0
  26. package/build/optionParsers.js.map +1 -0
  27. package/build/pxi/App.d.ts.map +1 -1
  28. package/build/pxi/App.js +60 -8
  29. package/build/pxi/App.js.map +1 -1
  30. package/build/pxi/toolPresentation.d.ts +56 -0
  31. package/build/pxi/toolPresentation.d.ts.map +1 -0
  32. package/build/pxi/toolPresentation.js +295 -0
  33. package/build/pxi/toolPresentation.js.map +1 -0
  34. package/build/pxi/toolProgress.d.ts +2 -1
  35. package/build/pxi/toolProgress.d.ts.map +1 -1
  36. package/build/pxi/toolProgress.js +10 -1
  37. package/build/pxi/toolProgress.js.map +1 -1
  38. package/package.json +3 -3
@@ -2,9 +2,184 @@ import { Command } from "commander";
2
2
  import { createPhoenixClient } from "../client.js";
3
3
  import { getConfigErrorMessage, resolveConfig, validateConfig, } from "../config.js";
4
4
  import { assertDeletesEnabled, confirmOrExit } from "../confirm.js";
5
- import { ExitCode, getExitCodeForError } from "../exitCodes.js";
5
+ import { ExitCode, getExitCodeForError, InvalidArgumentError, } from "../exitCodes.js";
6
6
  import { writeError, writeOutput, writeProgress } from "../io.js";
7
- import { formatAnnotationConfigsOutput, } from "./formatAnnotationConfigs.js";
7
+ import { collectString, parseNumberOption } from "../optionParsers.js";
8
+ import { writeStructuredError } from "../structuredError.js";
9
+ import { hasCategoricalValueInput, resolveCategoricalValues, } from "./annotationConfigValues.js";
10
+ import { formatAnnotationConfigOutput, formatAnnotationConfigsOutput, } from "./formatAnnotationConfigs.js";
11
+ const OPTIMIZATION_DIRECTIONS = [
12
+ "MINIMIZE",
13
+ "MAXIMIZE",
14
+ "NONE",
15
+ ];
16
+ const ANNOTATION_CONFIG_TYPES = [
17
+ "CATEGORICAL",
18
+ "CONTINUOUS",
19
+ "FREEFORM",
20
+ ];
21
+ /**
22
+ * Reject flags that don't apply to the config's type, so a mismatch (e.g.
23
+ * `--threshold` on a categorical config) fails loudly instead of being
24
+ * silently ignored. Shared by both create and update so the rules can't
25
+ * drift between the two.
26
+ */
27
+ function assertFlagsValidForConfigType(options, type) {
28
+ if (type === "CATEGORICAL") {
29
+ if (options.lowerBound !== undefined || options.upperBound !== undefined) {
30
+ throw new InvalidArgumentError("--lower-bound and --upper-bound are not valid for CATEGORICAL configs");
31
+ }
32
+ if (options.threshold !== undefined) {
33
+ throw new InvalidArgumentError("--threshold is not valid for CATEGORICAL configs");
34
+ }
35
+ return;
36
+ }
37
+ if (hasCategoricalValueInput(options)) {
38
+ throw new InvalidArgumentError("--value/--values are only valid for CATEGORICAL configs");
39
+ }
40
+ if (type === "CONTINUOUS" && options.threshold !== undefined) {
41
+ throw new InvalidArgumentError("--threshold is not valid for CONTINUOUS configs");
42
+ }
43
+ }
44
+ /**
45
+ * Build the full config body for `POST /v1/annotation_configs` from create
46
+ * flags.
47
+ *
48
+ * `optimization_direction` is required by the API for categorical and
49
+ * continuous configs; when omitted it defaults to `NONE`. Freeform configs
50
+ * leave it null unless explicitly set.
51
+ */
52
+ function buildCreateConfigData(options, type) {
53
+ assertFlagsValidForConfigType(options, type);
54
+ const name = options.name;
55
+ const description = options.description;
56
+ const optimizationDirection = options.optimizationDirection ??
57
+ "NONE";
58
+ if (type === "CATEGORICAL") {
59
+ const values = resolveCategoricalValues(options);
60
+ if (!values) {
61
+ throw new InvalidArgumentError("CATEGORICAL configs require at least one --value (or --values JSON)");
62
+ }
63
+ return {
64
+ type: "CATEGORICAL",
65
+ name,
66
+ description,
67
+ optimization_direction: optimizationDirection,
68
+ values,
69
+ };
70
+ }
71
+ if (type === "CONTINUOUS") {
72
+ return {
73
+ type: "CONTINUOUS",
74
+ name,
75
+ description,
76
+ optimization_direction: optimizationDirection,
77
+ lower_bound: options.lowerBound ?? null,
78
+ upper_bound: options.upperBound ?? null,
79
+ };
80
+ }
81
+ return {
82
+ type: "FREEFORM",
83
+ name,
84
+ description,
85
+ optimization_direction: options.optimizationDirection
86
+ ? optimizationDirection
87
+ : null,
88
+ threshold: options.threshold ?? null,
89
+ lower_bound: options.lowerBound ?? null,
90
+ upper_bound: options.upperBound ?? null,
91
+ };
92
+ }
93
+ /**
94
+ * Merge the provided update options onto an existing annotation config to
95
+ * produce the full replacement body required by `PUT
96
+ * /v1/annotation_configs/{id}`. Only fields the caller supplied are changed;
97
+ * everything else is carried over from `existing`. The config `type` is
98
+ * immutable — to change it, delete and recreate the config.
99
+ */
100
+ function buildUpdatedConfigData(existing, options) {
101
+ assertFlagsValidForConfigType(options, existing.type);
102
+ const name = options.name ?? existing.name;
103
+ const description = options.description !== undefined
104
+ ? options.description
105
+ : existing.description;
106
+ const optimizationDirection = options.optimizationDirection ??
107
+ existing.optimization_direction;
108
+ if (existing.type === "CATEGORICAL") {
109
+ const resolvedValues = resolveCategoricalValues(options);
110
+ return {
111
+ type: "CATEGORICAL",
112
+ name,
113
+ description,
114
+ optimization_direction: optimizationDirection ?? existing.optimization_direction,
115
+ values: resolvedValues ?? existing.values,
116
+ };
117
+ }
118
+ if (existing.type === "CONTINUOUS") {
119
+ return {
120
+ type: "CONTINUOUS",
121
+ name,
122
+ description,
123
+ optimization_direction: optimizationDirection ?? existing.optimization_direction,
124
+ lower_bound: options.lowerBound !== undefined
125
+ ? options.lowerBound
126
+ : existing.lower_bound,
127
+ upper_bound: options.upperBound !== undefined
128
+ ? options.upperBound
129
+ : existing.upper_bound,
130
+ };
131
+ }
132
+ return {
133
+ type: "FREEFORM",
134
+ name,
135
+ description,
136
+ optimization_direction: optimizationDirection,
137
+ threshold: options.threshold !== undefined ? options.threshold : existing.threshold,
138
+ lower_bound: options.lowerBound !== undefined
139
+ ? options.lowerBound
140
+ : existing.lower_bound,
141
+ upper_bound: options.upperBound !== undefined
142
+ ? options.upperBound
143
+ : existing.upper_bound,
144
+ };
145
+ }
146
+ /**
147
+ * Validate the numeric and enum flags shared by `create` and `update`,
148
+ * exiting with `INVALID_ARGUMENT` on the first invalid one. Runs before the
149
+ * handler's `try` block so the exit code isn't re-mapped by the catch-all.
150
+ *
151
+ * Normalizes `optimizationDirection` to uppercase in place so it is
152
+ * case-insensitive, matching how `--type` is treated.
153
+ */
154
+ function exitOnInvalidSharedWriteFlags(options) {
155
+ const numericFlags = [
156
+ ["--lower-bound", options.lowerBound],
157
+ ["--upper-bound", options.upperBound],
158
+ ["--threshold", options.threshold],
159
+ ];
160
+ for (const [flag, value] of numericFlags) {
161
+ if (value !== undefined && !Number.isFinite(value)) {
162
+ writeStructuredError({
163
+ format: options.format,
164
+ message: `${flag} must be a finite number`,
165
+ code: "INVALID_ARGUMENT",
166
+ });
167
+ process.exit(ExitCode.INVALID_ARGUMENT);
168
+ }
169
+ }
170
+ if (options.optimizationDirection !== undefined) {
171
+ const rawDirection = options.optimizationDirection;
172
+ options.optimizationDirection = rawDirection.toUpperCase();
173
+ if (!OPTIMIZATION_DIRECTIONS.includes(options.optimizationDirection)) {
174
+ writeStructuredError({
175
+ format: options.format,
176
+ message: `Invalid --optimization-direction '${rawDirection}'. Must be one of: ${OPTIMIZATION_DIRECTIONS.join(", ")}`,
177
+ code: "INVALID_ARGUMENT",
178
+ });
179
+ process.exit(ExitCode.INVALID_ARGUMENT);
180
+ }
181
+ }
182
+ }
8
183
  /**
9
184
  * Fetch all annotation configs from Phoenix
10
185
  */
@@ -76,6 +251,138 @@ async function annotationConfigListHandler(options) {
76
251
  process.exit(getExitCodeForError(error));
77
252
  }
78
253
  }
254
+ /**
255
+ * Handler for `annotation-config get`
256
+ */
257
+ async function annotationConfigGetHandler(configIdentifier, options) {
258
+ try {
259
+ const config = resolveConfig({
260
+ cliOptions: {
261
+ endpoint: options.endpoint,
262
+ apiKey: options.apiKey,
263
+ },
264
+ });
265
+ const validation = validateConfig({ config, projectRequired: false });
266
+ if (!validation.valid) {
267
+ writeError({
268
+ message: getConfigErrorMessage({ errors: validation.errors }),
269
+ });
270
+ process.exit(ExitCode.INVALID_ARGUMENT);
271
+ }
272
+ const client = createPhoenixClient({ config });
273
+ writeProgress({
274
+ message: `Fetching annotation config ${configIdentifier}...`,
275
+ noProgress: !options.progress,
276
+ });
277
+ const response = await client.GET("/v1/annotation_configs/{config_identifier}", {
278
+ params: {
279
+ path: {
280
+ config_identifier: configIdentifier,
281
+ },
282
+ },
283
+ });
284
+ // The client throws on non-2xx responses (e.g. a 404 for an unknown
285
+ // identifier), so this guard only trips on an unexpected empty body.
286
+ if (response.error || !response.data) {
287
+ throw new Error(`Annotation config '${configIdentifier}' not found${response.error ? `: ${response.error}` : ""}`);
288
+ }
289
+ writeOutput({
290
+ message: formatAnnotationConfigOutput({
291
+ config: response.data.data,
292
+ format: options.format,
293
+ }),
294
+ });
295
+ }
296
+ catch (error) {
297
+ writeError({
298
+ message: `Error fetching annotation config: ${error instanceof Error ? error.message : String(error)}`,
299
+ });
300
+ process.exit(getExitCodeForError(error));
301
+ }
302
+ }
303
+ /**
304
+ * Handler for `annotation-config create`
305
+ */
306
+ async function annotationConfigCreateHandler(options) {
307
+ // Argument-shape validation runs before the try block so its `process.exit`
308
+ // isn't caught and re-mapped by the catch-all error handler below.
309
+ if (!options.type) {
310
+ writeStructuredError({
311
+ format: options.format,
312
+ message: "Missing required flag --type",
313
+ code: "INVALID_ARGUMENT",
314
+ hint: "px annotation-config create --type CATEGORICAL --name <name> --value good=1",
315
+ });
316
+ process.exit(ExitCode.INVALID_ARGUMENT);
317
+ }
318
+ const type = options.type.toUpperCase();
319
+ if (!ANNOTATION_CONFIG_TYPES.includes(type)) {
320
+ writeStructuredError({
321
+ format: options.format,
322
+ message: `Invalid --type '${options.type}'. Must be one of: ${ANNOTATION_CONFIG_TYPES.join(", ")}`,
323
+ code: "INVALID_ARGUMENT",
324
+ });
325
+ process.exit(ExitCode.INVALID_ARGUMENT);
326
+ }
327
+ if (!options.name) {
328
+ writeStructuredError({
329
+ format: options.format,
330
+ message: "Missing required flag --name",
331
+ code: "INVALID_ARGUMENT",
332
+ hint: `px annotation-config create --type ${type} --name <name>`,
333
+ });
334
+ process.exit(ExitCode.INVALID_ARGUMENT);
335
+ }
336
+ exitOnInvalidSharedWriteFlags(options);
337
+ if (type === "CATEGORICAL" && !hasCategoricalValueInput(options)) {
338
+ writeStructuredError({
339
+ format: options.format,
340
+ message: "CATEGORICAL configs require at least one --value (or --values JSON)",
341
+ code: "INVALID_ARGUMENT",
342
+ hint: `px annotation-config create --type CATEGORICAL --name ${options.name} --value good=1 --value bad=0`,
343
+ });
344
+ process.exit(ExitCode.INVALID_ARGUMENT);
345
+ }
346
+ try {
347
+ const config = resolveConfig({
348
+ cliOptions: {
349
+ endpoint: options.endpoint,
350
+ apiKey: options.apiKey,
351
+ },
352
+ });
353
+ const validation = validateConfig({ config, projectRequired: false });
354
+ if (!validation.valid) {
355
+ writeError({
356
+ message: getConfigErrorMessage({ errors: validation.errors }),
357
+ });
358
+ process.exit(ExitCode.INVALID_ARGUMENT);
359
+ }
360
+ const client = createPhoenixClient({ config });
361
+ const body = buildCreateConfigData(options, type);
362
+ writeProgress({
363
+ message: `Creating annotation config ${options.name}...`,
364
+ noProgress: !options.progress,
365
+ });
366
+ const response = await client.POST("/v1/annotation_configs", {
367
+ body,
368
+ });
369
+ if (response.error || !response.data) {
370
+ throw new Error(`Failed to create annotation config: ${response.error}`);
371
+ }
372
+ writeOutput({
373
+ message: formatAnnotationConfigOutput({
374
+ config: response.data.data,
375
+ format: options.format,
376
+ }),
377
+ });
378
+ }
379
+ catch (error) {
380
+ writeError({
381
+ message: `Error creating annotation config: ${error instanceof Error ? error.message : String(error)}`,
382
+ });
383
+ process.exit(getExitCodeForError(error));
384
+ }
385
+ }
79
386
  /**
80
387
  * Handler for `annotation-config delete`
81
388
  */
@@ -122,33 +429,224 @@ async function annotationConfigDeleteHandler(configId, options) {
122
429
  process.exit(getExitCodeForError(error));
123
430
  }
124
431
  }
432
+ /**
433
+ * Handler for `annotation-config update`
434
+ */
435
+ async function annotationConfigUpdateHandler(configIdentifier, options) {
436
+ // Argument-shape validation runs before the try block so its `process.exit`
437
+ // isn't caught and re-mapped by the catch-all error handler below.
438
+ // Require at least one field to update so an accidental no-op invocation
439
+ // fails fast with the correct usage instead of silently re-writing the
440
+ // config unchanged.
441
+ const hasUpdate = options.name !== undefined ||
442
+ options.description !== undefined ||
443
+ options.optimizationDirection !== undefined ||
444
+ options.lowerBound !== undefined ||
445
+ options.upperBound !== undefined ||
446
+ options.threshold !== undefined ||
447
+ hasCategoricalValueInput(options);
448
+ if (!hasUpdate) {
449
+ writeStructuredError({
450
+ format: options.format,
451
+ message: "No fields to update were provided",
452
+ code: "INVALID_ARGUMENT",
453
+ hint: "px annotation-config update <config-id> --name <name>",
454
+ });
455
+ process.exit(ExitCode.INVALID_ARGUMENT);
456
+ }
457
+ exitOnInvalidSharedWriteFlags(options);
458
+ try {
459
+ const config = resolveConfig({
460
+ cliOptions: {
461
+ endpoint: options.endpoint,
462
+ apiKey: options.apiKey,
463
+ },
464
+ });
465
+ const validation = validateConfig({ config, projectRequired: false });
466
+ if (!validation.valid) {
467
+ writeError({
468
+ message: getConfigErrorMessage({ errors: validation.errors }),
469
+ });
470
+ process.exit(ExitCode.INVALID_ARGUMENT);
471
+ }
472
+ const client = createPhoenixClient({ config });
473
+ writeProgress({
474
+ message: `Fetching annotation config ${configIdentifier}...`,
475
+ noProgress: !options.progress,
476
+ });
477
+ const getResponse = await client.GET("/v1/annotation_configs/{config_identifier}", {
478
+ params: {
479
+ path: {
480
+ config_identifier: configIdentifier,
481
+ },
482
+ },
483
+ });
484
+ if (getResponse.error || !getResponse.data) {
485
+ throw new Error(`Failed to fetch annotation config: ${getResponse.error}`);
486
+ }
487
+ const existing = getResponse.data.data;
488
+ const updatedData = buildUpdatedConfigData(existing, options);
489
+ writeProgress({
490
+ message: `Updating annotation config ${existing.id}...`,
491
+ noProgress: !options.progress,
492
+ });
493
+ const updateResponse = await client.PUT("/v1/annotation_configs/{config_id}", {
494
+ params: {
495
+ path: {
496
+ config_id: existing.id,
497
+ },
498
+ },
499
+ body: updatedData,
500
+ });
501
+ if (updateResponse.error || !updateResponse.data) {
502
+ throw new Error(`Failed to update annotation config: ${updateResponse.error}`);
503
+ }
504
+ writeOutput({
505
+ message: formatAnnotationConfigOutput({
506
+ config: updateResponse.data.data,
507
+ format: options.format,
508
+ }),
509
+ });
510
+ }
511
+ catch (error) {
512
+ writeError({
513
+ message: `Error updating annotation config: ${error instanceof Error ? error.message : String(error)}`,
514
+ });
515
+ process.exit(getExitCodeForError(error));
516
+ }
517
+ }
518
+ /**
519
+ * Attach the shared categorical value-input options to a command. Both
520
+ * `create` and `update` accept values the same way: a repeatable, shell-
521
+ * friendly `--value label[=score]` flag, or a single `--values` JSON payload
522
+ * for bulk/agent use.
523
+ */
524
+ function addCategoricalValueOptions(command) {
525
+ return command
526
+ .option("--value <label[=score]>", "Categorical label with optional score, e.g. good=1 (repeatable; CATEGORICAL configs)", collectString, [])
527
+ .option("--values <json>", 'Categorical values as JSON — bulk/agent alternative to --value, e.g. \'[{"label":"good","score":1}]\'');
528
+ }
125
529
  /**
126
530
  * Create the `annotation-config` command with subcommands
127
531
  */
128
532
  export function createAnnotationConfigCommand() {
129
533
  const command = new Command("annotation-config");
130
534
  command.description("Manage Phoenix annotation configurations");
131
- const listCommand = new Command("list");
132
- listCommand
535
+ command.addCommand(createAnnotationConfigListCommand());
536
+ command.addCommand(createAnnotationConfigGetCommand());
537
+ command.addCommand(createAnnotationConfigCreateCommand());
538
+ command.addCommand(createAnnotationConfigUpdateCommand());
539
+ command.addCommand(createAnnotationConfigDeleteCommand());
540
+ return command;
541
+ }
542
+ export function createAnnotationConfigListCommand() {
543
+ return new Command("list")
133
544
  .description("List all annotation configurations")
134
545
  .option("--endpoint <url>", "Phoenix API endpoint")
135
546
  .option("--api-key <key>", "Phoenix API key for authentication")
136
547
  .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
137
548
  .option("--no-progress", "Disable progress indicators")
138
549
  .option("--limit <number>", "Maximum number of annotation configs to fetch", parseInt)
550
+ .addHelpText("after", "\nExamples:\n" +
551
+ " # Show all annotation configs as a table\n" +
552
+ " px annotation-config list\n\n" +
553
+ " # Extract config names as JSON (agent-friendly)\n" +
554
+ " px annotation-config list --format raw --no-progress | jq -r '.[].name'\n\n" +
555
+ " # Fetch at most 10 configs\n" +
556
+ " px annotation-config list --limit 10\n")
139
557
  .action(annotationConfigListHandler);
140
- command.addCommand(listCommand);
141
- command.addCommand(createAnnotationConfigDeleteCommand());
142
- return command;
558
+ }
559
+ export function createAnnotationConfigGetCommand() {
560
+ return new Command("get")
561
+ .description("Fetch an annotation configuration by name or ID")
562
+ .argument("<config-identifier>", "Annotation config name or ID")
563
+ .option("--endpoint <url>", "Phoenix API endpoint")
564
+ .option("--api-key <key>", "Phoenix API key for authentication")
565
+ .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
566
+ .option("--no-progress", "Disable progress indicators")
567
+ .addHelpText("after", "\nExamples:\n" +
568
+ " # Look up a config by name\n" +
569
+ " px annotation-config get response-quality\n\n" +
570
+ " # Resolve a config name to its ID (agent-friendly)\n" +
571
+ " px annotation-config get response-quality --format raw --no-progress | jq -r '.id'\n\n" +
572
+ " # Inspect the labels of a categorical config\n" +
573
+ " px annotation-config get response-quality --format raw --no-progress | jq '.values'\n")
574
+ .action(annotationConfigGetHandler);
575
+ }
576
+ export function createAnnotationConfigCreateCommand() {
577
+ const command = new Command("create")
578
+ .description("Create a new annotation configuration")
579
+ .option("--type <type>", "Config type: CATEGORICAL, CONTINUOUS, or FREEFORM")
580
+ .option("--name <name>", "Annotation config name")
581
+ .option("--endpoint <url>", "Phoenix API endpoint")
582
+ .option("--api-key <key>", "Phoenix API key for authentication")
583
+ .option("--description <description>", "Annotation config description")
584
+ .option("--optimization-direction <direction>", "Optimization direction: MINIMIZE, MAXIMIZE, or NONE (default: NONE)")
585
+ .option("--lower-bound <number>", "Lower bound (CONTINUOUS/FREEFORM configs)", parseNumberOption)
586
+ .option("--upper-bound <number>", "Upper bound (CONTINUOUS/FREEFORM configs)", parseNumberOption)
587
+ .option("--threshold <number>", "Threshold (FREEFORM configs)", parseNumberOption);
588
+ addCategoricalValueOptions(command);
589
+ return command
590
+ .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
591
+ .option("--no-progress", "Disable progress indicators")
592
+ .addHelpText("after", "\nExamples:\n" +
593
+ " # Pass/fail quality rating with scored labels (higher is better)\n" +
594
+ " px annotation-config create --type CATEGORICAL --name response-quality --value good=1 --value bad=0 --optimization-direction MAXIMIZE\n\n" +
595
+ " # Sentiment labels without scores\n" +
596
+ " px annotation-config create --type CATEGORICAL --name sentiment --value positive --value neutral --value negative\n\n" +
597
+ " # Confidence score between 0 and 1\n" +
598
+ " px annotation-config create --type CONTINUOUS --name confidence --lower-bound 0 --upper-bound 1 --optimization-direction MAXIMIZE\n\n" +
599
+ " # Free-text feedback from human reviewers\n" +
600
+ " px annotation-config create --type FREEFORM --name reviewer-notes --description 'Free-form reviewer feedback'\n\n" +
601
+ " # Create from a JSON payload and capture the new config ID (agent-friendly)\n" +
602
+ ' px annotation-config create --type CATEGORICAL --name response-quality --values \'[{"label":"good","score":1},{"label":"bad","score":0}]\' --format raw --no-progress | jq -r \'.id\'\n')
603
+ .action(annotationConfigCreateHandler);
604
+ }
605
+ export function createAnnotationConfigUpdateCommand() {
606
+ const command = new Command("update")
607
+ .description("Update an annotation configuration")
608
+ .argument("<config-identifier>", "Annotation config name or ID")
609
+ .option("--endpoint <url>", "Phoenix API endpoint")
610
+ .option("--api-key <key>", "Phoenix API key for authentication")
611
+ .option("--name <name>", "New name for the annotation config")
612
+ .option("--description <description>", "New description")
613
+ .option("--optimization-direction <direction>", "Optimization direction: MINIMIZE, MAXIMIZE, or NONE")
614
+ .option("--lower-bound <number>", "Lower bound (CONTINUOUS/FREEFORM configs)", parseNumberOption)
615
+ .option("--upper-bound <number>", "Upper bound (CONTINUOUS/FREEFORM configs)", parseNumberOption)
616
+ .option("--threshold <number>", "Threshold (FREEFORM configs)", parseNumberOption);
617
+ addCategoricalValueOptions(command);
618
+ return command
619
+ .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
620
+ .option("--no-progress", "Disable progress indicators")
621
+ .addHelpText("after", "\nExamples:\n" +
622
+ " # Change only the description; every other field is preserved\n" +
623
+ " px annotation-config update response-quality --description 'Pass/fail rating from human review'\n\n" +
624
+ " # Rename a config and set its optimization direction\n" +
625
+ " px annotation-config update response-quality --name answer-quality --optimization-direction MAXIMIZE\n\n" +
626
+ " # Replace the label set of a categorical config\n" +
627
+ " px annotation-config update response-quality --value good=1 --value acceptable=0.5 --value bad=0\n\n" +
628
+ " # Widen the range of a continuous config\n" +
629
+ " px annotation-config update confidence --lower-bound -1 --upper-bound 1\n\n" +
630
+ " # Update and capture the config ID (agent-friendly)\n" +
631
+ " px annotation-config update response-quality --description 'Updated' --format raw --no-progress | jq -r '.id'\n")
632
+ .action(annotationConfigUpdateHandler);
143
633
  }
144
634
  export function createAnnotationConfigDeleteCommand() {
145
635
  return new Command("delete")
146
636
  .description("Delete an annotation configuration")
147
- .argument("<config-id>", "Annotation config ID")
637
+ .argument("<config-id>", "Annotation config ID (resolve a name with: px annotation-config get <name>)")
148
638
  .option("--endpoint <url>", "Phoenix API endpoint")
149
639
  .option("--api-key <key>", "Phoenix API key for authentication")
150
640
  .option("-y, --yes", "Skip confirmation prompt")
151
641
  .option("--no-progress", "Disable progress indicators")
642
+ .addHelpText("after", "\nDeletes are disabled unless PHOENIX_CLI_DANGEROUSLY_ENABLE_DELETES=true is set.\n" +
643
+ "\nExamples:\n" +
644
+ " # Delete with an interactive confirmation prompt\n" +
645
+ " px annotation-config delete QW5ub3RhdGlvbkNvbmZpZzoxMjM=\n\n" +
646
+ " # Skip the confirmation prompt (for scripts and agents)\n" +
647
+ " px annotation-config delete QW5ub3RhdGlvbkNvbmZpZzoxMjM= --yes\n\n" +
648
+ " # Resolve a name to its ID, then delete it\n" +
649
+ " px annotation-config get response-quality --format raw --no-progress | jq -r '.id' | xargs px annotation-config delete --yes\n")
152
650
  .action(annotationConfigDeleteHandler);
153
651
  }
154
652
  //# sourceMappingURL=annotationConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotationConfig.js","sourceRoot":"","sources":["../../src/commands/annotationConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EACL,6BAA6B,GAE9B,MAAM,2BAA2B,CAAC;AAsBnC;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,MAAqB,EACrB,UAA8B,EAAE;IAEhC,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,IAAI,MAA0B,CAAC;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;IAEvC,GAAG,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE;YAC1D,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,MAAM;oBACN,KAAK,EAAE,SAAS;iBACjB;aACF;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;QAEhD,wDAAwD;QACxD,IAAI,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACxD,MAAM;QACR,CAAC;IACH,CAAC,QAAQ,MAAM,EAAE;IAEjB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B,CACxC,OAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC;YAC3B,UAAU,EAAE;gBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB;SACF,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,UAAU,CAAC;gBACT,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,aAAa,CAAC;YACZ,OAAO,EAAE,gCAAgC;YACzC,UAAU,EAAE,CAAC,OAAO,CAAC,QAAQ;SAC9B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE;YACnD,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,aAAa,CAAC;YACZ,OAAO,EAAE,SAAS,OAAO,CAAC,MAAM,uBAAuB;YACvD,UAAU,EAAE,CAAC,OAAO,CAAC,QAAQ;SAC9B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,6BAA6B,CAAC;YAC3C,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC;YACT,OAAO,EAAE,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACxG,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,6BAA6B,CAC1C,QAAgB,EAChB,OAAsC;IAEtC,IAAI,CAAC;QACH,oBAAoB,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,aAAa,CAAC;YAC3B,UAAU,EAAE;gBACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB;SACF,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,UAAU,CAAC;gBACT,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,aAAa,CAAC;YAClB,OAAO,EAAE,4BAA4B,QAAQ,0BAA0B;YACvE,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,oCAAoC,EAAE;YACzE,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,SAAS,EAAE,QAAQ;iBACpB;aACF;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,aAAa,CAAC;YACZ,OAAO,EAAE,6BAA6B,QAAQ,EAAE;YAChD,UAAU,EAAE,CAAC,OAAO,CAAC,QAAQ;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC;YACT,OAAO,EAAE,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACvG,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjD,OAAO,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAEhE,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,WAAW;SACR,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;SAC/D,MAAM,CACL,mBAAmB,EACnB,qCAAqC,EACrC,QAAQ,CACT;SACA,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CACL,kBAAkB,EAClB,+CAA+C,EAC/C,QAAQ,CACT;SACA,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEvC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,CAAC,UAAU,CAAC,mCAAmC,EAAE,CAAC,CAAC;IAE1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAC;SAC/C,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;SAC/C,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"annotationConfig.js","sourceRoot":"","sources":["../../src/commands/annotationConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { componentsV1 } from "@arizeai/phoenix-client";
2
+ type CategoricalAnnotationValue = componentsV1["schemas"]["CategoricalAnnotationValue"];
3
+ /**
4
+ * Options carrying the two supported ways to specify categorical values.
5
+ *
6
+ * `value` is the repeatable, shell-friendly form (`--value good=1`); `values`
7
+ * is the JSON escape hatch (`--values '[{"label":"good","score":1}]'`) for
8
+ * bulk or agent-driven use. The two are mutually exclusive.
9
+ *
10
+ * All parse failures throw `InvalidArgumentError` so handlers exit with
11
+ * `ExitCode.INVALID_ARGUMENT` rather than the generic failure code.
12
+ */
13
+ export interface CategoricalValueOptions {
14
+ /** Collected occurrences of the repeatable `--value label[=score]` flag. */
15
+ value?: string[];
16
+ /** The `--values <json>` payload. */
17
+ values?: string;
18
+ }
19
+ /**
20
+ * Resolve categorical values from whichever input form the caller supplied.
21
+ *
22
+ * - Returns `undefined` when neither `--value` nor `--values` was provided, so
23
+ * callers can distinguish "leave unchanged" (update) from "explicitly set".
24
+ * - Rejects supplying both forms at once — they'd have ambiguous precedence.
25
+ * - Always returns a non-empty list when it returns one; both parsers reject
26
+ * empty input.
27
+ */
28
+ export declare function resolveCategoricalValues(options: CategoricalValueOptions): CategoricalAnnotationValue[] | undefined;
29
+ /**
30
+ * Whether the caller supplied any categorical value input at all (either
31
+ * form). Used to reject `--value`/`--values` on non-categorical configs.
32
+ */
33
+ export declare function hasCategoricalValueInput(options: CategoricalValueOptions): boolean;
34
+ export {};
35
+ //# sourceMappingURL=annotationConfigValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotationConfigValues.d.ts","sourceRoot":"","sources":["../../src/commands/annotationConfigValues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D,KAAK,0BAA0B,GAC7B,YAAY,CAAC,SAAS,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAExD;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmFD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,uBAAuB,GAC/B,0BAA0B,EAAE,GAAG,SAAS,CAe1C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAKT"}