@arizeai/phoenix-cli 1.0.4 → 1.1.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 +40 -0
- package/build/commands/annotationMutationUtils.d.ts +44 -0
- package/build/commands/annotationMutationUtils.d.ts.map +1 -0
- package/build/commands/annotationMutationUtils.js +119 -0
- package/build/commands/annotationMutationUtils.js.map +1 -0
- package/build/commands/formatAnnotationMutation.d.ts +8 -0
- package/build/commands/formatAnnotationMutation.d.ts.map +1 -0
- package/build/commands/formatAnnotationMutation.js +24 -0
- package/build/commands/formatAnnotationMutation.js.map +1 -0
- package/build/commands/formatNoteMutation.d.ts +8 -0
- package/build/commands/formatNoteMutation.d.ts.map +1 -0
- package/build/commands/formatNoteMutation.js +20 -0
- package/build/commands/formatNoteMutation.js.map +1 -0
- package/build/commands/formatSpans.js +12 -0
- package/build/commands/formatSpans.js.map +1 -1
- package/build/commands/formatTraces.js +84 -0
- package/build/commands/formatTraces.js.map +1 -1
- package/build/commands/noteMutationUtils.d.ts +22 -0
- package/build/commands/noteMutationUtils.d.ts.map +1 -0
- package/build/commands/noteMutationUtils.js +30 -0
- package/build/commands/noteMutationUtils.js.map +1 -0
- package/build/commands/span.d.ts +2 -0
- package/build/commands/span.d.ts.map +1 -1
- package/build/commands/span.js +195 -1
- package/build/commands/span.js.map +1 -1
- package/build/commands/trace.d.ts +1 -0
- package/build/commands/trace.d.ts.map +1 -1
- package/build/commands/trace.js +227 -43
- package/build/commands/trace.js.map +1 -1
- package/build/commands/traceAnnotations.d.ts +14 -0
- package/build/commands/traceAnnotations.d.ts.map +1 -0
- package/build/commands/traceAnnotations.js +60 -0
- package/build/commands/traceAnnotations.js.map +1 -0
- package/build/normalize.d.ts +8 -0
- package/build/normalize.d.ts.map +1 -0
- package/build/normalize.js +30 -0
- package/build/normalize.js.map +1 -0
- package/build/trace.d.ts +3 -0
- package/build/trace.d.ts.map +1 -1
- package/build/trace.js.map +1 -1
- package/build/version.d.ts.map +1 -1
- package/build/version.js +3 -4
- package/build/version.js.map +1 -1
- package/package.json +3 -3
package/build/commands/span.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
|
+
import { addSpanNote } from "@arizeai/phoenix-client/spans";
|
|
2
3
|
import { Command } from "commander";
|
|
3
4
|
import { createPhoenixClient, resolveProjectId } from "../client.js";
|
|
4
5
|
import { getConfigErrorMessage, resolveConfig, validateConfig, } from "../config.js";
|
|
5
6
|
import { assertDeletesEnabled, confirmOrExit } from "../confirm.js";
|
|
6
7
|
import { ExitCode, getExitCodeForError } from "../exitCodes.js";
|
|
7
8
|
import { writeError, writeOutput, writeProgress } from "../io.js";
|
|
8
|
-
import {
|
|
9
|
+
import { buildAnnotationMutationResult, getAnnotationMutationHelpText, getResponseErrorMessage, normalizeAnnotationInput, } from "./annotationMutationUtils.js";
|
|
10
|
+
import { formatAnnotationMutationOutput, } from "./formatAnnotationMutation.js";
|
|
11
|
+
import { formatNoteMutationOutput, } from "./formatNoteMutation.js";
|
|
12
|
+
import { formatSpansOutput, } from "./formatSpans.js";
|
|
13
|
+
import { buildNoteMutationResult, NOTE_ANNOTATION_NAME, normalizeNoteText, } from "./noteMutationUtils.js";
|
|
9
14
|
import { fetchSpanAnnotations } from "./spanAnnotations.js";
|
|
10
15
|
/**
|
|
11
16
|
* Fetch spans for a project with optional filters
|
|
@@ -131,6 +136,7 @@ async function spanListHandler(file, options) {
|
|
|
131
136
|
client,
|
|
132
137
|
projectIdentifier: projectId,
|
|
133
138
|
spanIds,
|
|
139
|
+
excludeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
134
140
|
});
|
|
135
141
|
const annotationsBySpanId = new Map();
|
|
136
142
|
for (const annotation of annotations) {
|
|
@@ -150,6 +156,38 @@ async function spanListHandler(file, options) {
|
|
|
150
156
|
}
|
|
151
157
|
}
|
|
152
158
|
}
|
|
159
|
+
if (options.includeNotes) {
|
|
160
|
+
writeProgress({
|
|
161
|
+
message: "Fetching span notes...",
|
|
162
|
+
noProgress: !options.progress,
|
|
163
|
+
});
|
|
164
|
+
const spanIds = spans
|
|
165
|
+
.map((span) => span.context?.span_id)
|
|
166
|
+
.filter((spanId) => Boolean(spanId));
|
|
167
|
+
const notes = await fetchSpanAnnotations({
|
|
168
|
+
client,
|
|
169
|
+
projectIdentifier: projectId,
|
|
170
|
+
spanIds,
|
|
171
|
+
includeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
172
|
+
});
|
|
173
|
+
const notesBySpanId = new Map();
|
|
174
|
+
for (const note of notes) {
|
|
175
|
+
const spanId = note.span_id;
|
|
176
|
+
if (!notesBySpanId.has(spanId)) {
|
|
177
|
+
notesBySpanId.set(spanId, []);
|
|
178
|
+
}
|
|
179
|
+
notesBySpanId.get(spanId).push(note);
|
|
180
|
+
}
|
|
181
|
+
for (const span of spans) {
|
|
182
|
+
const spanId = span.context?.span_id;
|
|
183
|
+
if (!spanId)
|
|
184
|
+
continue;
|
|
185
|
+
const spanNotes = notesBySpanId.get(spanId);
|
|
186
|
+
if (spanNotes) {
|
|
187
|
+
span.notes = spanNotes;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
153
191
|
// Output spans
|
|
154
192
|
if (file) {
|
|
155
193
|
if (userSpecifiedFormat && options.format && options.format !== "json") {
|
|
@@ -197,8 +235,162 @@ export function createSpanListCommand() {
|
|
|
197
235
|
.option("--trace-id <ids...>", "Filter by trace ID(s)")
|
|
198
236
|
.option("--parent-id <id>", 'Filter by parent span ID (use "null" for root spans only)')
|
|
199
237
|
.option("--include-annotations", "Include span annotations in the output")
|
|
238
|
+
.option("--include-notes", "Include span notes in the output")
|
|
200
239
|
.action(spanListHandler);
|
|
201
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* Handler for `span annotate`
|
|
243
|
+
*/
|
|
244
|
+
async function spanAnnotateHandler(spanId, options) {
|
|
245
|
+
try {
|
|
246
|
+
const config = resolveConfig({
|
|
247
|
+
cliOptions: {
|
|
248
|
+
endpoint: options.endpoint,
|
|
249
|
+
apiKey: options.apiKey,
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
const validation = validateConfig({ config, projectRequired: false });
|
|
253
|
+
if (!validation.valid) {
|
|
254
|
+
writeError({
|
|
255
|
+
message: getConfigErrorMessage({ errors: validation.errors }),
|
|
256
|
+
});
|
|
257
|
+
process.exit(ExitCode.INVALID_ARGUMENT);
|
|
258
|
+
}
|
|
259
|
+
const annotationInput = normalizeAnnotationInput({
|
|
260
|
+
targetType: "span",
|
|
261
|
+
name: options.name,
|
|
262
|
+
label: options.label,
|
|
263
|
+
score: options.score,
|
|
264
|
+
explanation: options.explanation,
|
|
265
|
+
annotatorKind: options.annotatorKind,
|
|
266
|
+
});
|
|
267
|
+
const client = createPhoenixClient({ config });
|
|
268
|
+
writeProgress({
|
|
269
|
+
message: `Annotating span ${spanId}...`,
|
|
270
|
+
noProgress: !options.progress,
|
|
271
|
+
});
|
|
272
|
+
const response = await client.POST("/v1/span_annotations", {
|
|
273
|
+
params: {
|
|
274
|
+
query: {
|
|
275
|
+
sync: true,
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
body: {
|
|
279
|
+
data: [
|
|
280
|
+
{
|
|
281
|
+
span_id: spanId,
|
|
282
|
+
name: annotationInput.name,
|
|
283
|
+
annotator_kind: annotationInput.annotatorKind,
|
|
284
|
+
result: annotationInput.result,
|
|
285
|
+
identifier: "",
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
if (response.error) {
|
|
291
|
+
throw new Error(getResponseErrorMessage(response.error));
|
|
292
|
+
}
|
|
293
|
+
const insertedAnnotation = response.data?.data?.[0];
|
|
294
|
+
if (!insertedAnnotation) {
|
|
295
|
+
throw new Error("Phoenix did not return the inserted span annotation ID.");
|
|
296
|
+
}
|
|
297
|
+
const annotation = buildAnnotationMutationResult({
|
|
298
|
+
id: insertedAnnotation.id,
|
|
299
|
+
targetType: "span",
|
|
300
|
+
targetId: spanId,
|
|
301
|
+
annotationInput,
|
|
302
|
+
});
|
|
303
|
+
const output = formatAnnotationMutationOutput({
|
|
304
|
+
annotation,
|
|
305
|
+
format: options.format,
|
|
306
|
+
});
|
|
307
|
+
writeOutput({ message: output });
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
writeError({
|
|
311
|
+
message: `Error annotating span: ${error instanceof Error ? error.message : String(error)}`,
|
|
312
|
+
});
|
|
313
|
+
process.exit(getExitCodeForError(error));
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
export function createSpanAnnotateCommand() {
|
|
317
|
+
return new Command("annotate")
|
|
318
|
+
.description("Annotate a span by OpenTelemetry span ID")
|
|
319
|
+
.argument("<span-id>", "OpenTelemetry span ID")
|
|
320
|
+
.option("--endpoint <url>", "Phoenix API endpoint")
|
|
321
|
+
.option("--api-key <key>", "Phoenix API key for authentication")
|
|
322
|
+
.option("--name <name>", "Annotation name")
|
|
323
|
+
.option("--label <label>", "Annotation label")
|
|
324
|
+
.option("--score <number>", "Annotation score")
|
|
325
|
+
.option("--explanation <text>", "Annotation explanation")
|
|
326
|
+
.option("--annotator-kind <kind>", "Annotation kind: HUMAN, LLM, or CODE")
|
|
327
|
+
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
328
|
+
.option("--no-progress", "Disable progress indicators")
|
|
329
|
+
.addHelpText("after", getAnnotationMutationHelpText({ targetType: "span" }))
|
|
330
|
+
.action(spanAnnotateHandler);
|
|
331
|
+
}
|
|
332
|
+
async function spanAddNoteHandler(spanId, options) {
|
|
333
|
+
try {
|
|
334
|
+
const config = resolveConfig({
|
|
335
|
+
cliOptions: {
|
|
336
|
+
endpoint: options.endpoint,
|
|
337
|
+
apiKey: options.apiKey,
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
const validation = validateConfig({ config, projectRequired: false });
|
|
341
|
+
if (!validation.valid) {
|
|
342
|
+
writeError({
|
|
343
|
+
message: getConfigErrorMessage({ errors: validation.errors }),
|
|
344
|
+
});
|
|
345
|
+
process.exit(ExitCode.INVALID_ARGUMENT);
|
|
346
|
+
}
|
|
347
|
+
const noteText = normalizeNoteText({
|
|
348
|
+
targetType: "span",
|
|
349
|
+
text: options.text,
|
|
350
|
+
});
|
|
351
|
+
const client = createPhoenixClient({ config });
|
|
352
|
+
writeProgress({
|
|
353
|
+
message: `Adding note to span ${spanId}...`,
|
|
354
|
+
noProgress: !options.progress,
|
|
355
|
+
});
|
|
356
|
+
const result = await addSpanNote({
|
|
357
|
+
client,
|
|
358
|
+
spanNote: {
|
|
359
|
+
spanId,
|
|
360
|
+
note: noteText,
|
|
361
|
+
},
|
|
362
|
+
});
|
|
363
|
+
const note = buildNoteMutationResult({
|
|
364
|
+
id: result.id,
|
|
365
|
+
targetType: "span",
|
|
366
|
+
targetId: spanId,
|
|
367
|
+
text: noteText,
|
|
368
|
+
});
|
|
369
|
+
writeOutput({
|
|
370
|
+
message: formatNoteMutationOutput({
|
|
371
|
+
note,
|
|
372
|
+
format: options.format,
|
|
373
|
+
}),
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
writeError({
|
|
378
|
+
message: `Error adding span note: ${error instanceof Error ? error.message : String(error)}`,
|
|
379
|
+
});
|
|
380
|
+
process.exit(getExitCodeForError(error));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
export function createSpanAddNoteCommand() {
|
|
384
|
+
return new Command("add-note")
|
|
385
|
+
.description("Add a note to a span by OpenTelemetry span ID")
|
|
386
|
+
.argument("<span-id>", "OpenTelemetry span ID")
|
|
387
|
+
.option("--endpoint <url>", "Phoenix API endpoint")
|
|
388
|
+
.option("--api-key <key>", "Phoenix API key for authentication")
|
|
389
|
+
.option("--text <text>", "Note text")
|
|
390
|
+
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
391
|
+
.option("--no-progress", "Disable progress indicators")
|
|
392
|
+
.action(spanAddNoteHandler);
|
|
393
|
+
}
|
|
202
394
|
/**
|
|
203
395
|
* Handler for `span delete`
|
|
204
396
|
*/
|
|
@@ -266,6 +458,8 @@ export function createSpanCommand() {
|
|
|
266
458
|
const command = new Command("span");
|
|
267
459
|
command.description("Manage Phoenix spans");
|
|
268
460
|
command.addCommand(createSpanListCommand());
|
|
461
|
+
command.addCommand(createSpanAnnotateCommand());
|
|
462
|
+
command.addCommand(createSpanAddNoteCommand());
|
|
269
463
|
command.addCommand(createSpanDeleteCommand());
|
|
270
464
|
return command;
|
|
271
465
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/commands/span.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/commands/span.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
export declare function createTraceGetCommand(): Command;
|
|
3
3
|
export declare function createTraceListCommand(): Command;
|
|
4
|
+
export declare function createTraceAnnotateCommand(): Command;
|
|
4
5
|
export declare function createTraceDeleteCommand(): Command;
|
|
5
6
|
/**
|
|
6
7
|
* Create the `trace` command with subcommands
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAspBpC,wBAAgB,qBAAqB,IAAI,OAAO,CAoB/C;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAqChD;AA2FD,wBAAgB,0BAA0B,IAAI,OAAO,CAsBpD;AAsED,wBAAgB,wBAAwB,IAAI,OAAO,CAYlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAQ5C"}
|
package/build/commands/trace.js
CHANGED
|
@@ -6,10 +6,70 @@ import { getConfigErrorMessage, resolveConfig, validateConfig, } from "../config
|
|
|
6
6
|
import { assertDeletesEnabled, confirmOrExit } from "../confirm.js";
|
|
7
7
|
import { ExitCode, getExitCodeForError } from "../exitCodes.js";
|
|
8
8
|
import { writeError, writeOutput, writeProgress } from "../io.js";
|
|
9
|
-
import { buildTrace, groupSpansByTrace } from "../trace.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { buildTrace, groupSpansByTrace, } from "../trace.js";
|
|
10
|
+
import { buildAnnotationMutationResult, getAnnotationMutationHelpText, getResponseErrorMessage, normalizeAnnotationInput, } from "./annotationMutationUtils.js";
|
|
11
|
+
import { formatAnnotationMutationOutput, } from "./formatAnnotationMutation.js";
|
|
12
|
+
import { formatTraceOutput, formatTracesOutput, } from "./formatTraces.js";
|
|
13
|
+
import { NOTE_ANNOTATION_NAME } from "./noteMutationUtils.js";
|
|
12
14
|
import { fetchSpanAnnotations } from "./spanAnnotations.js";
|
|
15
|
+
import { fetchTraceAnnotations, } from "./traceAnnotations.js";
|
|
16
|
+
function attachSpanAnnotationsToSpans(spans, annotations) {
|
|
17
|
+
const annotationsBySpanId = new Map();
|
|
18
|
+
for (const annotation of annotations) {
|
|
19
|
+
const spanId = annotation.span_id;
|
|
20
|
+
if (!annotationsBySpanId.has(spanId)) {
|
|
21
|
+
annotationsBySpanId.set(spanId, []);
|
|
22
|
+
}
|
|
23
|
+
annotationsBySpanId.get(spanId).push(annotation);
|
|
24
|
+
}
|
|
25
|
+
for (const span of spans) {
|
|
26
|
+
const spanId = span.context?.span_id;
|
|
27
|
+
if (!spanId)
|
|
28
|
+
continue;
|
|
29
|
+
const spanAnnotations = annotationsBySpanId.get(spanId);
|
|
30
|
+
if (spanAnnotations) {
|
|
31
|
+
span.annotations = spanAnnotations;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function attachTraceAnnotationsToTraces(traces, annotations) {
|
|
36
|
+
const annotationsByTraceId = new Map();
|
|
37
|
+
for (const annotation of annotations) {
|
|
38
|
+
const traceId = annotation.trace_id;
|
|
39
|
+
if (!annotationsByTraceId.has(traceId)) {
|
|
40
|
+
annotationsByTraceId.set(traceId, []);
|
|
41
|
+
}
|
|
42
|
+
annotationsByTraceId.get(traceId).push(annotation);
|
|
43
|
+
}
|
|
44
|
+
for (const trace of traces) {
|
|
45
|
+
const traceAnnotations = annotationsByTraceId.get(trace.traceId);
|
|
46
|
+
if (traceAnnotations) {
|
|
47
|
+
trace.annotations = traceAnnotations;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function attachSpanNotesToSpans(spans, notes) {
|
|
52
|
+
const notesBySpanId = new Map();
|
|
53
|
+
for (const note of notes) {
|
|
54
|
+
const spanId = note.span_id;
|
|
55
|
+
if (!notesBySpanId.has(spanId)) {
|
|
56
|
+
notesBySpanId.set(spanId, []);
|
|
57
|
+
}
|
|
58
|
+
notesBySpanId.get(spanId).push(note);
|
|
59
|
+
}
|
|
60
|
+
for (const span of spans) {
|
|
61
|
+
const spanId = span.context?.span_id;
|
|
62
|
+
if (!spanId)
|
|
63
|
+
continue;
|
|
64
|
+
const spanNotes = notesBySpanId.get(spanId);
|
|
65
|
+
if (spanNotes) {
|
|
66
|
+
span.notes = spanNotes;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function getResolvedTraceId(spans) {
|
|
71
|
+
return spans[0]?.context?.trace_id;
|
|
72
|
+
}
|
|
13
73
|
/**
|
|
14
74
|
* Fetch spans for a project within a time range
|
|
15
75
|
*/
|
|
@@ -205,35 +265,52 @@ async function traceGetHandler(traceId, options) {
|
|
|
205
265
|
message: `Found ${spans.length} span(s)`,
|
|
206
266
|
noProgress: !options.progress,
|
|
207
267
|
});
|
|
268
|
+
const traceSpans = spans;
|
|
269
|
+
const resolvedTraceId = getResolvedTraceId(spans);
|
|
270
|
+
let traceAnnotations;
|
|
208
271
|
if (options.includeAnnotations) {
|
|
209
|
-
|
|
272
|
+
writeProgress({
|
|
273
|
+
message: "Fetching trace and span annotations...",
|
|
274
|
+
noProgress: !options.progress,
|
|
275
|
+
});
|
|
276
|
+
traceAnnotations = await fetchTraceAnnotations({
|
|
277
|
+
client,
|
|
278
|
+
projectIdentifier: projectId,
|
|
279
|
+
traceIds: resolvedTraceId ? [resolvedTraceId] : [traceId],
|
|
280
|
+
excludeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
281
|
+
});
|
|
282
|
+
const spanIds = traceSpans
|
|
210
283
|
.map((span) => span.context?.span_id)
|
|
211
284
|
.filter((spanId) => Boolean(spanId));
|
|
212
|
-
const
|
|
285
|
+
const spanAnnotations = await fetchSpanAnnotations({
|
|
213
286
|
client,
|
|
214
287
|
projectIdentifier: projectId,
|
|
215
288
|
spanIds,
|
|
289
|
+
excludeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
216
290
|
});
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
291
|
+
attachSpanAnnotationsToSpans(traceSpans, spanAnnotations);
|
|
292
|
+
}
|
|
293
|
+
if (options.includeNotes) {
|
|
294
|
+
writeProgress({
|
|
295
|
+
message: "Fetching span notes...",
|
|
296
|
+
noProgress: !options.progress,
|
|
297
|
+
});
|
|
298
|
+
const spanIds = traceSpans
|
|
299
|
+
.map((span) => span.context?.span_id)
|
|
300
|
+
.filter((spanId) => Boolean(spanId));
|
|
301
|
+
const spanNotes = await fetchSpanAnnotations({
|
|
302
|
+
client,
|
|
303
|
+
projectIdentifier: projectId,
|
|
304
|
+
spanIds,
|
|
305
|
+
includeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
306
|
+
});
|
|
307
|
+
attachSpanNotesToSpans(traceSpans, spanNotes);
|
|
234
308
|
}
|
|
235
309
|
// Build trace
|
|
236
|
-
const trace = buildTrace({ spans });
|
|
310
|
+
const trace = buildTrace({ spans: traceSpans });
|
|
311
|
+
if (traceAnnotations?.length) {
|
|
312
|
+
trace.annotations = traceAnnotations;
|
|
313
|
+
}
|
|
237
314
|
// Output trace
|
|
238
315
|
const outputFormat = options.file
|
|
239
316
|
? "json"
|
|
@@ -319,37 +396,50 @@ async function traceListHandler(directory, options) {
|
|
|
319
396
|
});
|
|
320
397
|
if (options.includeAnnotations) {
|
|
321
398
|
writeProgress({
|
|
322
|
-
message: "Fetching span annotations...",
|
|
399
|
+
message: "Fetching trace and span annotations...",
|
|
323
400
|
noProgress: !options.progress,
|
|
324
401
|
});
|
|
402
|
+
const traceAnnotations = await fetchTraceAnnotations({
|
|
403
|
+
client,
|
|
404
|
+
projectIdentifier: projectId,
|
|
405
|
+
traceIds: traces.map((trace) => trace.traceId),
|
|
406
|
+
excludeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
407
|
+
maxConcurrent: options.maxConcurrent,
|
|
408
|
+
});
|
|
409
|
+
attachTraceAnnotationsToTraces(traces, traceAnnotations);
|
|
325
410
|
const spanIds = traces
|
|
326
411
|
.flatMap((trace) => trace.spans)
|
|
327
412
|
.map((span) => span.context?.span_id)
|
|
328
413
|
.filter((spanId) => Boolean(spanId));
|
|
329
|
-
const
|
|
414
|
+
const spanAnnotations = await fetchSpanAnnotations({
|
|
330
415
|
client,
|
|
331
416
|
projectIdentifier: projectId,
|
|
332
417
|
spanIds,
|
|
418
|
+
excludeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
333
419
|
maxConcurrent: options.maxConcurrent,
|
|
334
420
|
});
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
const spanId = annotation.span_id;
|
|
338
|
-
if (!annotationsBySpanId.has(spanId)) {
|
|
339
|
-
annotationsBySpanId.set(spanId, []);
|
|
340
|
-
}
|
|
341
|
-
annotationsBySpanId.get(spanId).push(annotation);
|
|
421
|
+
for (const trace of traces) {
|
|
422
|
+
attachSpanAnnotationsToSpans(trace.spans, spanAnnotations);
|
|
342
423
|
}
|
|
424
|
+
}
|
|
425
|
+
if (options.includeNotes) {
|
|
426
|
+
writeProgress({
|
|
427
|
+
message: "Fetching span notes...",
|
|
428
|
+
noProgress: !options.progress,
|
|
429
|
+
});
|
|
430
|
+
const spanIds = traces
|
|
431
|
+
.flatMap((trace) => trace.spans)
|
|
432
|
+
.map((span) => span.context?.span_id)
|
|
433
|
+
.filter((spanId) => Boolean(spanId));
|
|
434
|
+
const spanNotes = await fetchSpanAnnotations({
|
|
435
|
+
client,
|
|
436
|
+
projectIdentifier: projectId,
|
|
437
|
+
spanIds,
|
|
438
|
+
includeAnnotationNames: [NOTE_ANNOTATION_NAME],
|
|
439
|
+
maxConcurrent: options.maxConcurrent,
|
|
440
|
+
});
|
|
343
441
|
for (const trace of traces) {
|
|
344
|
-
|
|
345
|
-
const spanId = span.context?.span_id;
|
|
346
|
-
if (!spanId)
|
|
347
|
-
continue;
|
|
348
|
-
const spanAnnotations = annotationsBySpanId.get(spanId);
|
|
349
|
-
if (spanAnnotations) {
|
|
350
|
-
span.annotations = spanAnnotations;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
442
|
+
attachSpanNotesToSpans(trace.spans, spanNotes);
|
|
353
443
|
}
|
|
354
444
|
}
|
|
355
445
|
if (directory) {
|
|
@@ -393,7 +483,8 @@ export function createTraceGetCommand() {
|
|
|
393
483
|
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
394
484
|
.option("--no-progress", "Disable progress indicators")
|
|
395
485
|
.option("--file <path>", "Save trace to file instead of stdout")
|
|
396
|
-
.option("--include-annotations", "Include span annotations in the trace export")
|
|
486
|
+
.option("--include-annotations", "Include trace and span annotations in the trace export")
|
|
487
|
+
.option("--include-notes", "Include span notes in the trace export")
|
|
397
488
|
.action(traceGetHandler);
|
|
398
489
|
}
|
|
399
490
|
export function createTraceListCommand() {
|
|
@@ -409,9 +500,101 @@ export function createTraceListCommand() {
|
|
|
409
500
|
.option("--last-n-minutes <number>", "Only fetch traces from the last N minutes", parseInt)
|
|
410
501
|
.option("--since <timestamp>", "Fetch traces since this ISO timestamp")
|
|
411
502
|
.option("--max-concurrent <number>", "Maximum concurrent fetches for bulk operations", (v) => parseInt(v, 10), 10)
|
|
412
|
-
.option("--include-annotations", "Include span annotations in the trace export")
|
|
503
|
+
.option("--include-annotations", "Include trace and span annotations in the trace export")
|
|
504
|
+
.option("--include-notes", "Include span notes in the trace export")
|
|
413
505
|
.action(traceListHandler);
|
|
414
506
|
}
|
|
507
|
+
/**
|
|
508
|
+
* Handler for `trace annotate`
|
|
509
|
+
*/
|
|
510
|
+
async function traceAnnotateHandler(traceId, options) {
|
|
511
|
+
try {
|
|
512
|
+
const config = resolveConfig({
|
|
513
|
+
cliOptions: {
|
|
514
|
+
endpoint: options.endpoint,
|
|
515
|
+
apiKey: options.apiKey,
|
|
516
|
+
},
|
|
517
|
+
});
|
|
518
|
+
const validation = validateConfig({ config, projectRequired: false });
|
|
519
|
+
if (!validation.valid) {
|
|
520
|
+
writeError({
|
|
521
|
+
message: getConfigErrorMessage({ errors: validation.errors }),
|
|
522
|
+
});
|
|
523
|
+
process.exit(ExitCode.INVALID_ARGUMENT);
|
|
524
|
+
}
|
|
525
|
+
const annotationInput = normalizeAnnotationInput({
|
|
526
|
+
targetType: "trace",
|
|
527
|
+
name: options.name,
|
|
528
|
+
label: options.label,
|
|
529
|
+
score: options.score,
|
|
530
|
+
explanation: options.explanation,
|
|
531
|
+
annotatorKind: options.annotatorKind,
|
|
532
|
+
});
|
|
533
|
+
const client = createPhoenixClient({ config });
|
|
534
|
+
writeProgress({
|
|
535
|
+
message: `Annotating trace ${traceId}...`,
|
|
536
|
+
noProgress: !options.progress,
|
|
537
|
+
});
|
|
538
|
+
const response = await client.POST("/v1/trace_annotations", {
|
|
539
|
+
params: {
|
|
540
|
+
query: {
|
|
541
|
+
sync: true,
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
body: {
|
|
545
|
+
data: [
|
|
546
|
+
{
|
|
547
|
+
trace_id: traceId,
|
|
548
|
+
name: annotationInput.name,
|
|
549
|
+
annotator_kind: annotationInput.annotatorKind,
|
|
550
|
+
result: annotationInput.result,
|
|
551
|
+
identifier: "",
|
|
552
|
+
},
|
|
553
|
+
],
|
|
554
|
+
},
|
|
555
|
+
});
|
|
556
|
+
if (response.error) {
|
|
557
|
+
throw new Error(getResponseErrorMessage(response.error));
|
|
558
|
+
}
|
|
559
|
+
const insertedAnnotation = response.data?.data?.[0];
|
|
560
|
+
if (!insertedAnnotation) {
|
|
561
|
+
throw new Error("Phoenix did not return the inserted trace annotation ID.");
|
|
562
|
+
}
|
|
563
|
+
const annotation = buildAnnotationMutationResult({
|
|
564
|
+
id: insertedAnnotation.id,
|
|
565
|
+
targetType: "trace",
|
|
566
|
+
targetId: traceId,
|
|
567
|
+
annotationInput,
|
|
568
|
+
});
|
|
569
|
+
const output = formatAnnotationMutationOutput({
|
|
570
|
+
annotation,
|
|
571
|
+
format: options.format,
|
|
572
|
+
});
|
|
573
|
+
writeOutput({ message: output });
|
|
574
|
+
}
|
|
575
|
+
catch (error) {
|
|
576
|
+
writeError({
|
|
577
|
+
message: `Error annotating trace: ${error instanceof Error ? error.message : String(error)}`,
|
|
578
|
+
});
|
|
579
|
+
process.exit(getExitCodeForError(error));
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
export function createTraceAnnotateCommand() {
|
|
583
|
+
return new Command("annotate")
|
|
584
|
+
.description("Annotate a trace by OpenTelemetry trace ID")
|
|
585
|
+
.argument("<trace-id>", "OpenTelemetry trace ID")
|
|
586
|
+
.option("--endpoint <url>", "Phoenix API endpoint")
|
|
587
|
+
.option("--api-key <key>", "Phoenix API key for authentication")
|
|
588
|
+
.option("--name <name>", "Annotation name")
|
|
589
|
+
.option("--label <label>", "Annotation label")
|
|
590
|
+
.option("--score <number>", "Annotation score")
|
|
591
|
+
.option("--explanation <text>", "Annotation explanation")
|
|
592
|
+
.option("--annotator-kind <kind>", "Annotation kind: HUMAN, LLM, or CODE")
|
|
593
|
+
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
594
|
+
.option("--no-progress", "Disable progress indicators")
|
|
595
|
+
.addHelpText("after", getAnnotationMutationHelpText({ targetType: "trace" }))
|
|
596
|
+
.action(traceAnnotateHandler);
|
|
597
|
+
}
|
|
415
598
|
/**
|
|
416
599
|
* Handler for `trace delete`
|
|
417
600
|
*/
|
|
@@ -480,6 +663,7 @@ export function createTraceCommand() {
|
|
|
480
663
|
command.description("Manage Phoenix traces");
|
|
481
664
|
command.addCommand(createTraceListCommand());
|
|
482
665
|
command.addCommand(createTraceGetCommand());
|
|
666
|
+
command.addCommand(createTraceAnnotateCommand());
|
|
483
667
|
command.addCommand(createTraceDeleteCommand());
|
|
484
668
|
return command;
|
|
485
669
|
}
|