@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.
- package/README.md +170 -1
- package/build/commands/annotationConfig.d.ts +4 -0
- package/build/commands/annotationConfig.d.ts.map +1 -1
- package/build/commands/annotationConfig.js +506 -8
- package/build/commands/annotationConfig.js.map +1 -1
- package/build/commands/annotationConfigValues.d.ts +35 -0
- package/build/commands/annotationConfigValues.d.ts.map +1 -0
- package/build/commands/annotationConfigValues.js +97 -0
- package/build/commands/annotationConfigValues.js.map +1 -0
- package/build/commands/dataset.d.ts.map +1 -1
- package/build/commands/dataset.js +2 -7
- package/build/commands/dataset.js.map +1 -1
- package/build/commands/docs.d.ts.map +1 -1
- package/build/commands/docs.js +2 -1
- package/build/commands/docs.js.map +1 -1
- package/build/commands/formatAnnotationConfigs.d.ts +16 -0
- package/build/commands/formatAnnotationConfigs.d.ts.map +1 -1
- package/build/commands/formatAnnotationConfigs.js +15 -0
- package/build/commands/formatAnnotationConfigs.js.map +1 -1
- package/build/commands/profile.d.ts.map +1 -1
- package/build/commands/profile.js +2 -4
- package/build/commands/profile.js.map +1 -1
- package/build/optionParsers.d.ts +17 -0
- package/build/optionParsers.d.ts.map +1 -0
- package/build/optionParsers.js +22 -0
- package/build/optionParsers.js.map +1 -0
- package/build/pxi/App.d.ts.map +1 -1
- package/build/pxi/App.js +60 -8
- package/build/pxi/App.js.map +1 -1
- package/build/pxi/toolPresentation.d.ts +56 -0
- package/build/pxi/toolPresentation.d.ts.map +1 -0
- package/build/pxi/toolPresentation.js +295 -0
- package/build/pxi/toolPresentation.js.map +1 -0
- package/build/pxi/toolProgress.d.ts +2 -1
- package/build/pxi/toolProgress.d.ts.map +1 -1
- package/build/pxi/toolProgress.js +10 -1
- package/build/pxi/toolProgress.js.map +1 -1
- 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 {
|
|
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
|
-
|
|
132
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
return
|
|
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"}
|