@arizeai/phoenix-cli 0.6.0 → 0.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/build/cli.d.ts.map +1 -1
- package/build/cli.js +3 -1
- package/build/cli.js.map +1 -1
- package/build/commands/formatSessions.d.ts +17 -0
- package/build/commands/formatSessions.d.ts.map +1 -0
- package/build/commands/formatSessions.js +121 -0
- package/build/commands/formatSessions.js.map +1 -0
- package/build/commands/index.d.ts +2 -0
- package/build/commands/index.d.ts.map +1 -1
- package/build/commands/index.js +2 -0
- package/build/commands/index.js.map +1 -1
- package/build/commands/session.d.ts +6 -0
- package/build/commands/session.d.ts.map +1 -0
- package/build/commands/session.js +149 -0
- package/build/commands/session.js.map +1 -0
- package/build/commands/sessions.d.ts +6 -0
- package/build/commands/sessions.d.ts.map +1 -0
- package/build/commands/sessions.js +126 -0
- package/build/commands/sessions.js.map +1 -0
- package/package.json +4 -4
package/build/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAqBA,wBAAgB,IAAI,SA6BnB"}
|
package/build/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
-
import { createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
|
|
3
|
+
import { createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createSessionCommand, createSessionsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
|
|
4
4
|
// Phoenix CLI Main Logic
|
|
5
5
|
export function main() {
|
|
6
6
|
const program = new Command();
|
|
@@ -15,6 +15,8 @@ export function main() {
|
|
|
15
15
|
program.addCommand(createTraceCommand());
|
|
16
16
|
program.addCommand(createDatasetsCommand());
|
|
17
17
|
program.addCommand(createDatasetCommand());
|
|
18
|
+
program.addCommand(createSessionsCommand());
|
|
19
|
+
program.addCommand(createSessionCommand());
|
|
18
20
|
program.addCommand(createExperimentsCommand());
|
|
19
21
|
program.addCommand(createExperimentCommand());
|
|
20
22
|
program.addCommand(createPromptsCommand());
|
package/build/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,MAAM,UAAU,IAAI;IAClB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,IAAI,CAAC;SACV,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEvC,mCAAmC;IACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,MAAM,UAAU,IAAI;IAClB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,IAAI,CAAC;SACV,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAEvC,mCAAmC;IACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { componentsV1 } from "@arizeai/phoenix-client";
|
|
2
|
+
export type OutputFormat = "pretty" | "json" | "raw";
|
|
3
|
+
type SessionData = componentsV1["schemas"]["SessionData"];
|
|
4
|
+
type SessionAnnotation = componentsV1["schemas"]["SessionAnnotation"];
|
|
5
|
+
export interface FormatSessionsOutputOptions {
|
|
6
|
+
sessions: SessionData[];
|
|
7
|
+
format?: OutputFormat;
|
|
8
|
+
}
|
|
9
|
+
export declare function formatSessionsOutput({ sessions, format, }: FormatSessionsOutputOptions): string;
|
|
10
|
+
export interface FormatSessionOutputOptions {
|
|
11
|
+
session: SessionData;
|
|
12
|
+
annotations?: SessionAnnotation[];
|
|
13
|
+
format?: OutputFormat;
|
|
14
|
+
}
|
|
15
|
+
export declare function formatSessionOutput({ session, annotations, format, }: FormatSessionOutputOptions): string;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=formatSessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatSessions.d.ts","sourceRoot":"","sources":["../../src/commands/formatSessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD,KAAK,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAC1D,KAAK,iBAAiB,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAEtE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,GACP,EAAE,2BAA2B,GAAG,MAAM,CAStC;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,WAAW,EACX,MAAM,GACP,EAAE,0BAA0B,GAAG,MAAM,CASrC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export function formatSessionsOutput({ sessions, format, }) {
|
|
2
|
+
const selected = format || "pretty";
|
|
3
|
+
if (selected === "raw") {
|
|
4
|
+
return JSON.stringify(sessions);
|
|
5
|
+
}
|
|
6
|
+
if (selected === "json") {
|
|
7
|
+
return JSON.stringify(sessions, null, 2);
|
|
8
|
+
}
|
|
9
|
+
return formatSessionsPretty(sessions);
|
|
10
|
+
}
|
|
11
|
+
export function formatSessionOutput({ session, annotations, format, }) {
|
|
12
|
+
const selected = format || "pretty";
|
|
13
|
+
if (selected === "raw") {
|
|
14
|
+
return JSON.stringify({ session, annotations });
|
|
15
|
+
}
|
|
16
|
+
if (selected === "json") {
|
|
17
|
+
return JSON.stringify({ session, annotations }, null, 2);
|
|
18
|
+
}
|
|
19
|
+
return formatSessionPretty(session, annotations);
|
|
20
|
+
}
|
|
21
|
+
function formatSessionsPretty(sessions) {
|
|
22
|
+
if (sessions.length === 0) {
|
|
23
|
+
return "No sessions found";
|
|
24
|
+
}
|
|
25
|
+
const lines = [];
|
|
26
|
+
lines.push("Sessions:");
|
|
27
|
+
lines.push("");
|
|
28
|
+
for (const session of sessions) {
|
|
29
|
+
lines.push(`┌─ ${session.session_id}`);
|
|
30
|
+
lines.push(`│ ID: ${session.id}`);
|
|
31
|
+
lines.push(`│ Traces: ${session.traces.length}`);
|
|
32
|
+
lines.push(`│ Started: ${formatDate(session.start_time)}`);
|
|
33
|
+
lines.push(`│ Ended: ${formatDate(session.end_time)}`);
|
|
34
|
+
lines.push(`│ Duration: ${formatDuration(session.start_time, session.end_time)}`);
|
|
35
|
+
lines.push(`└─`);
|
|
36
|
+
lines.push("");
|
|
37
|
+
}
|
|
38
|
+
return lines.join("\n").trimEnd();
|
|
39
|
+
}
|
|
40
|
+
function formatSessionPretty(session, annotations) {
|
|
41
|
+
const lines = [];
|
|
42
|
+
lines.push(`┌─ Session: ${session.session_id}`);
|
|
43
|
+
lines.push(`│ ID: ${session.id}`);
|
|
44
|
+
lines.push(`│ Project: ${session.project_id}`);
|
|
45
|
+
lines.push(`│ Started: ${formatDate(session.start_time)}`);
|
|
46
|
+
lines.push(`│ Ended: ${formatDate(session.end_time)}`);
|
|
47
|
+
lines.push(`│ Turns: ${session.traces.length}`);
|
|
48
|
+
lines.push(`│`);
|
|
49
|
+
if (session.traces.length > 0) {
|
|
50
|
+
// Sort traces by start_time ascending (chronological order)
|
|
51
|
+
const sortedTraces = [...session.traces].sort((a, b) => new Date(a.start_time).getTime() - new Date(b.start_time).getTime());
|
|
52
|
+
lines.push(`│ Traces:`);
|
|
53
|
+
for (let i = 0; i < sortedTraces.length; i++) {
|
|
54
|
+
const trace = sortedTraces[i];
|
|
55
|
+
const isLast = i === sortedTraces.length - 1;
|
|
56
|
+
const connector = isLast ? "└─" : "├─";
|
|
57
|
+
const continuation = isLast ? " " : "│ ";
|
|
58
|
+
const startTime = formatTime(trace.start_time);
|
|
59
|
+
const endTime = formatTime(trace.end_time);
|
|
60
|
+
const duration = formatDuration(trace.start_time, trace.end_time);
|
|
61
|
+
lines.push(`│ ${connector} [Turn ${i + 1}] ${startTime} - ${endTime} (${duration})`);
|
|
62
|
+
lines.push(`│ ${continuation} trace: ${trace.trace_id}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (annotations && annotations.length > 0) {
|
|
66
|
+
lines.push(`│`);
|
|
67
|
+
lines.push(`│ Annotations:`);
|
|
68
|
+
for (const annotation of annotations) {
|
|
69
|
+
const parts = [];
|
|
70
|
+
if (annotation.result?.score != null) {
|
|
71
|
+
parts.push(`score=${annotation.result.score}`);
|
|
72
|
+
}
|
|
73
|
+
if (annotation.result?.label) {
|
|
74
|
+
parts.push(`label="${annotation.result.label}"`);
|
|
75
|
+
}
|
|
76
|
+
const detail = parts.length > 0 ? `: ${parts.join(", ")}` : "";
|
|
77
|
+
lines.push(`│ - ${annotation.name} (${annotation.annotator_kind})${detail}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
lines.push(`└─`);
|
|
81
|
+
return lines.join("\n");
|
|
82
|
+
}
|
|
83
|
+
function formatDate(dateStr) {
|
|
84
|
+
try {
|
|
85
|
+
const date = new Date(dateStr);
|
|
86
|
+
return date.toLocaleString();
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return dateStr;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function formatTime(dateStr) {
|
|
93
|
+
try {
|
|
94
|
+
const date = new Date(dateStr);
|
|
95
|
+
return date.toLocaleTimeString();
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return dateStr;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function formatDuration(startStr, endStr) {
|
|
102
|
+
const startMs = Date.parse(startStr);
|
|
103
|
+
const endMs = Date.parse(endStr);
|
|
104
|
+
if (Number.isNaN(startMs) || Number.isNaN(endMs)) {
|
|
105
|
+
return "n/a";
|
|
106
|
+
}
|
|
107
|
+
const diffMs = Math.max(0, endMs - startMs);
|
|
108
|
+
const totalSeconds = Math.floor(diffMs / 1000);
|
|
109
|
+
if (totalSeconds < 60) {
|
|
110
|
+
return `${totalSeconds}s`;
|
|
111
|
+
}
|
|
112
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
113
|
+
const seconds = totalSeconds % 60;
|
|
114
|
+
if (minutes < 60) {
|
|
115
|
+
return `${minutes}m ${seconds}s`;
|
|
116
|
+
}
|
|
117
|
+
const hours = Math.floor(minutes / 60);
|
|
118
|
+
const remainingMinutes = minutes % 60;
|
|
119
|
+
return `${hours}h ${remainingMinutes}m ${seconds}s`;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=formatSessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatSessions.js","sourceRoot":"","sources":["../../src/commands/formatSessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export * from "./datasets.js";
|
|
|
6
6
|
export * from "./dataset.js";
|
|
7
7
|
export * from "./experiments.js";
|
|
8
8
|
export * from "./experiment.js";
|
|
9
|
+
export * from "./sessions.js";
|
|
10
|
+
export * from "./session.js";
|
|
9
11
|
export * from "./prompts.js";
|
|
10
12
|
export * from "./prompt.js";
|
|
11
13
|
export * from "./api.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
package/build/commands/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export * from "./datasets.js";
|
|
|
6
6
|
export * from "./dataset.js";
|
|
7
7
|
export * from "./experiments.js";
|
|
8
8
|
export * from "./experiment.js";
|
|
9
|
+
export * from "./sessions.js";
|
|
10
|
+
export * from "./session.js";
|
|
9
11
|
export * from "./prompts.js";
|
|
10
12
|
export * from "./prompt.js";
|
|
11
13
|
export * from "./api.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsLpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAuB9C"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { createPhoenixClient } from "../client.js";
|
|
4
|
+
import { getConfigErrorMessage, resolveConfig } from "../config.js";
|
|
5
|
+
import { writeError, writeOutput, writeProgress } from "../io.js";
|
|
6
|
+
import { formatSessionOutput } from "./formatSessions.js";
|
|
7
|
+
/**
|
|
8
|
+
* Fetch a single session by identifier
|
|
9
|
+
*/
|
|
10
|
+
async function fetchSession(client, sessionIdentifier) {
|
|
11
|
+
const response = await client.GET("/v1/sessions/{session_identifier}", {
|
|
12
|
+
params: {
|
|
13
|
+
path: {
|
|
14
|
+
session_identifier: sessionIdentifier,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
if (response.error || !response.data) {
|
|
19
|
+
throw new Error(`Failed to fetch session: ${response.error}`);
|
|
20
|
+
}
|
|
21
|
+
return response.data.data;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Fetch annotations for a session
|
|
25
|
+
*/
|
|
26
|
+
async function fetchSessionAnnotations(client, projectIdentifier, sessionId) {
|
|
27
|
+
const allAnnotations = [];
|
|
28
|
+
let cursor;
|
|
29
|
+
do {
|
|
30
|
+
const response = await client.GET("/v1/projects/{project_identifier}/session_annotations", {
|
|
31
|
+
params: {
|
|
32
|
+
path: {
|
|
33
|
+
project_identifier: projectIdentifier,
|
|
34
|
+
},
|
|
35
|
+
query: {
|
|
36
|
+
session_ids: [sessionId],
|
|
37
|
+
cursor,
|
|
38
|
+
limit: 100,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
if (response.error || !response.data) {
|
|
43
|
+
throw new Error(`Failed to fetch session annotations: ${response.error}`);
|
|
44
|
+
}
|
|
45
|
+
allAnnotations.push(...response.data.data);
|
|
46
|
+
cursor = response.data.next_cursor || undefined;
|
|
47
|
+
} while (cursor);
|
|
48
|
+
return allAnnotations;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Session command handler
|
|
52
|
+
*/
|
|
53
|
+
async function sessionHandler(sessionId, options) {
|
|
54
|
+
try {
|
|
55
|
+
const userSpecifiedFormat = process.argv.includes("--format") ||
|
|
56
|
+
process.argv.some((arg) => arg.startsWith("--format="));
|
|
57
|
+
// Resolve configuration
|
|
58
|
+
const config = resolveConfig({
|
|
59
|
+
cliOptions: {
|
|
60
|
+
endpoint: options.endpoint,
|
|
61
|
+
project: options.project,
|
|
62
|
+
apiKey: options.apiKey,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
// Validate that we have endpoint
|
|
66
|
+
if (!config.endpoint) {
|
|
67
|
+
const errors = [
|
|
68
|
+
"Phoenix endpoint not configured. Set PHOENIX_HOST environment variable or use --endpoint flag.",
|
|
69
|
+
];
|
|
70
|
+
writeError({ message: getConfigErrorMessage({ errors }) });
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
// Create client
|
|
74
|
+
const client = createPhoenixClient({ config });
|
|
75
|
+
writeProgress({
|
|
76
|
+
message: `Fetching session ${sessionId}...`,
|
|
77
|
+
noProgress: !options.progress,
|
|
78
|
+
});
|
|
79
|
+
// Fetch session
|
|
80
|
+
const session = await fetchSession(client, sessionId);
|
|
81
|
+
writeProgress({
|
|
82
|
+
message: `Fetched session with ${session.traces.length} trace(s)`,
|
|
83
|
+
noProgress: !options.progress,
|
|
84
|
+
});
|
|
85
|
+
// Optionally fetch annotations
|
|
86
|
+
let annotations;
|
|
87
|
+
if (options.includeAnnotations) {
|
|
88
|
+
writeProgress({
|
|
89
|
+
message: "Fetching session annotations...",
|
|
90
|
+
noProgress: !options.progress,
|
|
91
|
+
});
|
|
92
|
+
annotations = await fetchSessionAnnotations(client, session.project_id, session.session_id);
|
|
93
|
+
writeProgress({
|
|
94
|
+
message: `Found ${annotations.length} annotation(s)`,
|
|
95
|
+
noProgress: !options.progress,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// Determine output format
|
|
99
|
+
const outputFormat = options.file
|
|
100
|
+
? "json"
|
|
101
|
+
: options.format || "pretty";
|
|
102
|
+
if (options.file && userSpecifiedFormat && options.format !== "json") {
|
|
103
|
+
writeError({
|
|
104
|
+
message: `Warning: --format is ignored when writing to a file; writing JSON to ${options.file}`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// Format output
|
|
108
|
+
const output = formatSessionOutput({
|
|
109
|
+
session,
|
|
110
|
+
annotations,
|
|
111
|
+
format: outputFormat,
|
|
112
|
+
});
|
|
113
|
+
if (options.file) {
|
|
114
|
+
fs.writeFileSync(options.file, output, "utf-8");
|
|
115
|
+
writeProgress({
|
|
116
|
+
message: `Wrote session to ${options.file}`,
|
|
117
|
+
noProgress: !options.progress,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
writeOutput({ message: output });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
writeError({
|
|
126
|
+
message: `Error fetching session: ${error instanceof Error ? error.message : String(error)}`,
|
|
127
|
+
});
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Create the session command
|
|
133
|
+
*/
|
|
134
|
+
export function createSessionCommand() {
|
|
135
|
+
const command = new Command("session");
|
|
136
|
+
command
|
|
137
|
+
.description("View a session's conversation flow")
|
|
138
|
+
.argument("<session-id>", "Session identifier (GlobalID or user-provided session_id)")
|
|
139
|
+
.option("--endpoint <url>", "Phoenix API endpoint")
|
|
140
|
+
.option("--project <name>", "Project name or ID")
|
|
141
|
+
.option("--api-key <key>", "Phoenix API key for authentication")
|
|
142
|
+
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
143
|
+
.option("--no-progress", "Disable progress indicators")
|
|
144
|
+
.option("--file <path>", "Save session to file instead of stdout")
|
|
145
|
+
.option("--include-annotations", "Include session annotations")
|
|
146
|
+
.action(sessionHandler);
|
|
147
|
+
return command;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsJpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAwB/C"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { createPhoenixClient, resolveProjectId } from "../client.js";
|
|
3
|
+
import { getConfigErrorMessage, resolveConfig, validateConfig, } from "../config.js";
|
|
4
|
+
import { writeError, writeOutput, writeProgress } from "../io.js";
|
|
5
|
+
import { formatSessionsOutput } from "./formatSessions.js";
|
|
6
|
+
/**
|
|
7
|
+
* Fetch sessions for a project from Phoenix
|
|
8
|
+
*/
|
|
9
|
+
async function fetchSessions(client, projectIdentifier, options = {}) {
|
|
10
|
+
const allSessions = [];
|
|
11
|
+
let cursor;
|
|
12
|
+
const targetLimit = options.limit || 10;
|
|
13
|
+
do {
|
|
14
|
+
const response = await client.GET("/v1/projects/{project_identifier}/sessions", {
|
|
15
|
+
params: {
|
|
16
|
+
path: {
|
|
17
|
+
project_identifier: projectIdentifier,
|
|
18
|
+
},
|
|
19
|
+
query: {
|
|
20
|
+
cursor,
|
|
21
|
+
limit: Math.min(targetLimit - allSessions.length, 100),
|
|
22
|
+
order: options.order,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (response.error || !response.data) {
|
|
27
|
+
throw new Error(`Failed to fetch sessions: ${response.error}`);
|
|
28
|
+
}
|
|
29
|
+
allSessions.push(...response.data.data);
|
|
30
|
+
cursor = response.data.next_cursor || undefined;
|
|
31
|
+
if (allSessions.length >= targetLimit) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
} while (cursor);
|
|
35
|
+
return allSessions.slice(0, targetLimit);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Sessions command handler
|
|
39
|
+
*/
|
|
40
|
+
async function sessionsHandler(options) {
|
|
41
|
+
try {
|
|
42
|
+
// Resolve configuration
|
|
43
|
+
const config = resolveConfig({
|
|
44
|
+
cliOptions: {
|
|
45
|
+
endpoint: options.endpoint,
|
|
46
|
+
project: options.project,
|
|
47
|
+
apiKey: options.apiKey,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
// Validate configuration
|
|
51
|
+
const validation = validateConfig({ config });
|
|
52
|
+
if (!validation.valid) {
|
|
53
|
+
writeError({
|
|
54
|
+
message: getConfigErrorMessage({ errors: validation.errors }),
|
|
55
|
+
});
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
// Create client
|
|
59
|
+
const client = createPhoenixClient({ config });
|
|
60
|
+
// Resolve project ID
|
|
61
|
+
const projectIdentifier = config.project;
|
|
62
|
+
if (!projectIdentifier) {
|
|
63
|
+
writeError({ message: "Project not configured" });
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
writeProgress({
|
|
67
|
+
message: `Resolving project: ${projectIdentifier}`,
|
|
68
|
+
noProgress: !options.progress,
|
|
69
|
+
});
|
|
70
|
+
const projectId = await resolveProjectId({
|
|
71
|
+
client,
|
|
72
|
+
projectIdentifier,
|
|
73
|
+
});
|
|
74
|
+
const limit = options.limit || 10;
|
|
75
|
+
writeProgress({
|
|
76
|
+
message: `Fetching sessions for project ${projectId}...`,
|
|
77
|
+
noProgress: !options.progress,
|
|
78
|
+
});
|
|
79
|
+
// Fetch sessions
|
|
80
|
+
const sessions = await fetchSessions(client, projectId, {
|
|
81
|
+
limit,
|
|
82
|
+
order: options.order,
|
|
83
|
+
});
|
|
84
|
+
if (sessions.length === 0) {
|
|
85
|
+
writeProgress({
|
|
86
|
+
message: "No sessions found",
|
|
87
|
+
noProgress: !options.progress,
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
writeProgress({
|
|
92
|
+
message: `Found ${sessions.length} session(s)`,
|
|
93
|
+
noProgress: !options.progress,
|
|
94
|
+
});
|
|
95
|
+
// Output sessions
|
|
96
|
+
const output = formatSessionsOutput({
|
|
97
|
+
sessions,
|
|
98
|
+
format: options.format,
|
|
99
|
+
});
|
|
100
|
+
writeOutput({ message: output });
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
writeError({
|
|
104
|
+
message: `Error fetching sessions: ${error instanceof Error ? error.message : String(error)}`,
|
|
105
|
+
});
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create the sessions command
|
|
111
|
+
*/
|
|
112
|
+
export function createSessionsCommand() {
|
|
113
|
+
const command = new Command("sessions");
|
|
114
|
+
command
|
|
115
|
+
.description("List sessions for a project")
|
|
116
|
+
.option("--endpoint <url>", "Phoenix API endpoint")
|
|
117
|
+
.option("--project <name>", "Project name or ID")
|
|
118
|
+
.option("--api-key <key>", "Phoenix API key for authentication")
|
|
119
|
+
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
120
|
+
.option("--no-progress", "Disable progress indicators")
|
|
121
|
+
.option("-n, --limit <number>", "Maximum number of sessions to return", parseInt, 10)
|
|
122
|
+
.option("--order <order>", "Sort order: asc or desc", "desc")
|
|
123
|
+
.action(sessionsHandler);
|
|
124
|
+
return command;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arizeai/phoenix-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "A command-line interface for Phoenix",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"arize",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@arizeai/openinference-semantic-conventions": "^1.1.0",
|
|
34
34
|
"commander": "^12.1.0",
|
|
35
|
-
"@arizeai/phoenix-
|
|
36
|
-
"@arizeai/phoenix-
|
|
35
|
+
"@arizeai/phoenix-config": "0.1.1",
|
|
36
|
+
"@arizeai/phoenix-client": "6.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^18.19.0",
|
|
40
|
-
"rimraf": "^
|
|
40
|
+
"rimraf": "^6.1.3",
|
|
41
41
|
"tsc-alias": "^1.8.11",
|
|
42
42
|
"tsx": "^4.19.3",
|
|
43
43
|
"vitest": "^2.1.9"
|