@arizeai/phoenix-cli 0.3.1 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAeA,wBAAgB,IAAI,SAuBnB"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAiBA,wBAAgB,IAAI,SAyBnB"}
package/build/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
2
+ import { createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
3
3
  import { Command } from "commander";
4
4
  // Phoenix CLI Main Logic
5
5
  export function main() {
@@ -16,6 +16,8 @@ export function main() {
16
16
  program.addCommand(createDatasetCommand());
17
17
  program.addCommand(createExperimentsCommand());
18
18
  program.addCommand(createExperimentCommand());
19
+ program.addCommand(createPromptsCommand());
20
+ program.addCommand(createPromptCommand());
19
21
  // Show help if no command provided
20
22
  if (process.argv.length === 2) {
21
23
  program.help();
package/build/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,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,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;IAE9C,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,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,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,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;IAE1C,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,16 @@
1
+ import type { componentsV1 } from "@arizeai/phoenix-client";
2
+ export type OutputFormat = "pretty" | "json" | "raw" | "text";
3
+ type PromptVersion = componentsV1["schemas"]["PromptVersion"];
4
+ export interface FormatPromptOutputOptions {
5
+ /**
6
+ * Prompt version to format.
7
+ */
8
+ promptVersion: PromptVersion;
9
+ /**
10
+ * Output format. Defaults to `"pretty"`.
11
+ */
12
+ format?: OutputFormat;
13
+ }
14
+ export declare function formatPromptOutput({ promptVersion, format, }: FormatPromptOutputOptions): string;
15
+ export {};
16
+ //# sourceMappingURL=formatPrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPrompt.d.ts","sourceRoot":"","sources":["../../src/commands/formatPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9D,KAAK,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;AAW9D,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,MAAM,GACP,EAAE,yBAAyB,GAAG,MAAM,CAYpC"}
@@ -0,0 +1,160 @@
1
+ export function formatPromptOutput({ promptVersion, format, }) {
2
+ const selected = format || "pretty";
3
+ if (selected === "raw") {
4
+ return JSON.stringify(promptVersion);
5
+ }
6
+ if (selected === "json") {
7
+ return JSON.stringify(promptVersion, null, 2);
8
+ }
9
+ if (selected === "text") {
10
+ return formatPromptText(promptVersion);
11
+ }
12
+ return formatPromptPretty(promptVersion);
13
+ }
14
+ /**
15
+ * Format a prompt version as plain text suitable for piping.
16
+ * Chat templates are formatted with XML-style tags.
17
+ * String templates return the raw template string.
18
+ */
19
+ function formatPromptText(promptVersion) {
20
+ const template = promptVersion.template;
21
+ if (template.type === "string") {
22
+ return template.template;
23
+ }
24
+ // Chat template - format with XML-style tags
25
+ const lines = [];
26
+ for (const message of template.messages) {
27
+ const role = message.role;
28
+ const content = extractMessageContent(message);
29
+ lines.push(`<${role}>${content}</${role}>`);
30
+ }
31
+ return lines.join("\n");
32
+ }
33
+ /**
34
+ * Extract text content from a prompt message.
35
+ * Handles both string content and array of content parts.
36
+ */
37
+ function extractMessageContent(message) {
38
+ if (typeof message.content === "string") {
39
+ return message.content;
40
+ }
41
+ // Array of content parts
42
+ const textParts = [];
43
+ for (const part of message.content) {
44
+ if (part.type === "text") {
45
+ textParts.push(part.text);
46
+ }
47
+ else if (part.type === "tool_call") {
48
+ const toolCall = part;
49
+ // tool_call contains name and arguments directly
50
+ textParts.push(`[Tool Call: ${toolCall.tool_call.name}(${toolCall.tool_call.arguments})]`);
51
+ }
52
+ else if (part.type === "tool_result") {
53
+ const toolResult = part;
54
+ // tool_result can be boolean | number | string | object
55
+ const resultStr = typeof toolResult.tool_result === "object"
56
+ ? JSON.stringify(toolResult.tool_result)
57
+ : String(toolResult.tool_result);
58
+ textParts.push(`[Tool Result: ${resultStr}]`);
59
+ }
60
+ }
61
+ return textParts.join("\n");
62
+ }
63
+ function formatPromptPretty(promptVersion) {
64
+ const lines = [];
65
+ lines.push(`┌─ Prompt Version: ${promptVersion.id}`);
66
+ lines.push(`│`);
67
+ lines.push(`│ Model: ${promptVersion.model_provider} / ${promptVersion.model_name}`);
68
+ lines.push(`│ Template Type: ${promptVersion.template_type}`);
69
+ lines.push(`│ Template Format: ${promptVersion.template_format}`);
70
+ if (promptVersion.description) {
71
+ lines.push(`│ Description: ${promptVersion.description}`);
72
+ }
73
+ lines.push(`│`);
74
+ lines.push(`│ Template:`);
75
+ const template = promptVersion.template;
76
+ if (template.type === "string") {
77
+ const templateLines = template.template.split("\n");
78
+ for (const line of templateLines) {
79
+ lines.push(`│ ${line}`);
80
+ }
81
+ }
82
+ else {
83
+ // Chat template
84
+ for (const message of template.messages) {
85
+ const role = message.role.toUpperCase();
86
+ const content = extractMessageContent(message);
87
+ const contentLines = content.split("\n");
88
+ lines.push(`│ [${role}]`);
89
+ for (const line of contentLines) {
90
+ lines.push(`│ ${line}`);
91
+ }
92
+ }
93
+ }
94
+ // Invocation parameters
95
+ if (promptVersion.invocation_parameters) {
96
+ lines.push(`│`);
97
+ lines.push(`│ Invocation Parameters:`);
98
+ const params = promptVersion.invocation_parameters;
99
+ const providerParams = params[params.type];
100
+ if (providerParams && typeof providerParams === "object") {
101
+ for (const [key, value] of Object.entries(providerParams)) {
102
+ lines.push(`│ ${key}: ${JSON.stringify(value)}`);
103
+ }
104
+ }
105
+ }
106
+ // Tools
107
+ if (promptVersion.tools && promptVersion.tools.tools.length > 0) {
108
+ lines.push(`│`);
109
+ lines.push(`│ Tools:`);
110
+ // Tool choice
111
+ if (promptVersion.tools.tool_choice) {
112
+ const choice = promptVersion.tools.tool_choice;
113
+ if (choice.type === "specific_function") {
114
+ lines.push(`│ Tool Choice: ${choice.function_name} (required)`);
115
+ }
116
+ else {
117
+ lines.push(`│ Tool Choice: ${choice.type}`);
118
+ }
119
+ }
120
+ for (const tool of promptVersion.tools.tools) {
121
+ if (tool.type === "function") {
122
+ const fn = tool.function;
123
+ lines.push(`│`);
124
+ lines.push(`│ ┌─ ${fn.name}`);
125
+ if (fn.description) {
126
+ lines.push(`│ │ ${fn.description}`);
127
+ }
128
+ if (fn.parameters) {
129
+ lines.push(`│ │`);
130
+ lines.push(`│ │ Parameters:`);
131
+ const params = fn.parameters;
132
+ if (params.properties) {
133
+ const required = params.required || [];
134
+ for (const [propName, propDef] of Object.entries(params.properties)) {
135
+ const isRequired = required.includes(propName);
136
+ const reqMarker = isRequired ? " (required)" : "";
137
+ const typeStr = propDef.type || "any";
138
+ const enumStr = propDef.enum && propDef.enum.length > 0
139
+ ? ` [${propDef.enum.join(", ")}]`
140
+ : "";
141
+ lines.push(`│ │ ${propName}: ${typeStr}${enumStr}${reqMarker}`);
142
+ if (propDef.description) {
143
+ lines.push(`│ │ └─ ${propDef.description}`);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ lines.push(`│ └─`);
149
+ }
150
+ }
151
+ }
152
+ // Response format
153
+ if (promptVersion.response_format) {
154
+ lines.push(`│`);
155
+ lines.push(`│ Response Format: ${promptVersion.response_format.json_schema.name}`);
156
+ }
157
+ lines.push(`└─`);
158
+ return lines.join("\n");
159
+ }
160
+ //# sourceMappingURL=formatPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPrompt.js","sourceRoot":"","sources":["../../src/commands/formatPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { componentsV1 } from "@arizeai/phoenix-client";
2
+ export type OutputFormat = "pretty" | "json" | "raw";
3
+ type Prompt = componentsV1["schemas"]["Prompt"];
4
+ export interface FormatPromptsOutputOptions {
5
+ /**
6
+ * Prompts to format.
7
+ */
8
+ prompts: Prompt[];
9
+ /**
10
+ * Output format. Defaults to `"pretty"`.
11
+ */
12
+ format?: OutputFormat;
13
+ }
14
+ export declare function formatPromptsOutput({ prompts, format, }: FormatPromptsOutputOptions): string;
15
+ export {};
16
+ //# sourceMappingURL=formatPrompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPrompts.d.ts","sourceRoot":"","sources":["../../src/commands/formatPrompts.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,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEhD,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,GACP,EAAE,0BAA0B,GAAG,MAAM,CASrC"}
@@ -0,0 +1,36 @@
1
+ export function formatPromptsOutput({ prompts, format, }) {
2
+ const selected = format || "pretty";
3
+ if (selected === "raw") {
4
+ return JSON.stringify(prompts);
5
+ }
6
+ if (selected === "json") {
7
+ return JSON.stringify(prompts, null, 2);
8
+ }
9
+ return formatPromptsPretty(prompts);
10
+ }
11
+ function formatPromptsPretty(prompts) {
12
+ if (prompts.length === 0) {
13
+ return "No prompts found";
14
+ }
15
+ const lines = [];
16
+ lines.push("Prompts:");
17
+ lines.push("");
18
+ for (const prompt of prompts) {
19
+ const desc = prompt.description === null ||
20
+ prompt.description === undefined ||
21
+ prompt.description === ""
22
+ ? ""
23
+ : ` — ${prompt.description}`;
24
+ lines.push(`┌─ ${prompt.name} (${prompt.id})`);
25
+ if (desc) {
26
+ lines.push(`│ Description:${desc}`);
27
+ }
28
+ if (prompt.metadata && Object.keys(prompt.metadata).length > 0) {
29
+ lines.push(`│ Metadata: ${JSON.stringify(prompt.metadata)}`);
30
+ }
31
+ lines.push(`└─`);
32
+ lines.push("");
33
+ }
34
+ return lines.join("\n").trimEnd();
35
+ }
36
+ //# sourceMappingURL=formatPrompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPrompts.js","sourceRoot":"","sources":["../../src/commands/formatPrompts.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,GACqB;IAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,QAAQ,CAAC;IACpC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAiB;IAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GACR,MAAM,CAAC,WAAW,KAAK,IAAI;YAC3B,MAAM,CAAC,WAAW,KAAK,SAAS;YAChC,MAAM,CAAC,WAAW,KAAK,EAAE;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAEjC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC"}
@@ -5,4 +5,6 @@ export * from "./datasets.js";
5
5
  export * from "./dataset.js";
6
6
  export * from "./experiments.js";
7
7
  export * from "./experiment.js";
8
+ export * from "./prompts.js";
9
+ export * from "./prompt.js";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,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"}
@@ -5,4 +5,6 @@ export * from "./datasets.js";
5
5
  export * from "./dataset.js";
6
6
  export * from "./experiments.js";
7
7
  export * from "./experiment.js";
8
+ export * from "./prompts.js";
9
+ export * from "./prompt.js";
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Create the prompt command
4
+ */
5
+ export declare function createPromptCommand(): Command;
6
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqIpC;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAmB7C"}
@@ -0,0 +1,109 @@
1
+ import { createPhoenixClient } from "../client.js";
2
+ import { getConfigErrorMessage, resolveConfig } from "../config.js";
3
+ import { writeError, writeOutput, writeProgress } from "../io.js";
4
+ import { formatPromptOutput } from "./formatPrompt.js";
5
+ import { Command } from "commander";
6
+ /**
7
+ * Fetch a prompt version from Phoenix
8
+ */
9
+ async function fetchPromptVersion(client, promptIdentifier, options = {}) {
10
+ // If version ID is provided, fetch that specific version
11
+ if (options.versionId) {
12
+ const response = await client.GET(`/v1/prompt_versions/{prompt_version_id}`, {
13
+ params: { path: { prompt_version_id: options.versionId } },
14
+ });
15
+ if (response.error || !response.data) {
16
+ throw new Error(`Failed to fetch prompt version: ${response.error || "Unknown error"}`);
17
+ }
18
+ return response.data.data;
19
+ }
20
+ // If tag is provided, fetch by tag
21
+ if (options.tag) {
22
+ const response = await client.GET(`/v1/prompts/{prompt_identifier}/tags/{tag_name}`, {
23
+ params: {
24
+ path: { prompt_identifier: promptIdentifier, tag_name: options.tag },
25
+ },
26
+ });
27
+ if (response.error || !response.data) {
28
+ throw new Error(`Failed to fetch prompt with tag "${options.tag}": ${response.error || "Unknown error"}`);
29
+ }
30
+ return response.data.data;
31
+ }
32
+ // Default: fetch latest version
33
+ const response = await client.GET(`/v1/prompts/{prompt_identifier}/latest`, {
34
+ params: {
35
+ path: { prompt_identifier: promptIdentifier },
36
+ },
37
+ });
38
+ if (response.error || !response.data) {
39
+ throw new Error(`Failed to fetch prompt "${promptIdentifier}": ${response.error || "Unknown error"}`);
40
+ }
41
+ return response.data.data;
42
+ }
43
+ /**
44
+ * Prompt command handler
45
+ */
46
+ async function promptHandler(promptIdentifier, options) {
47
+ try {
48
+ // Resolve configuration
49
+ const config = resolveConfig({
50
+ cliOptions: {
51
+ endpoint: options.endpoint,
52
+ apiKey: options.apiKey,
53
+ },
54
+ });
55
+ // Validate that we have endpoint
56
+ if (!config.endpoint) {
57
+ const errors = [
58
+ "Phoenix endpoint not configured. Set PHOENIX_HOST environment variable or use --endpoint flag.",
59
+ ];
60
+ writeError({ message: getConfigErrorMessage({ errors }) });
61
+ process.exit(1);
62
+ }
63
+ // Create client
64
+ const client = createPhoenixClient({ config });
65
+ writeProgress({
66
+ message: `Fetching prompt "${promptIdentifier}"...`,
67
+ noProgress: !options.progress,
68
+ });
69
+ // Fetch prompt version
70
+ const promptVersion = await fetchPromptVersion(client, promptIdentifier, {
71
+ tag: options.tag,
72
+ versionId: options.version,
73
+ });
74
+ writeProgress({
75
+ message: `Found prompt version ${promptVersion.id}`,
76
+ noProgress: !options.progress,
77
+ });
78
+ // Output prompt
79
+ const output = formatPromptOutput({
80
+ promptVersion,
81
+ format: options.format,
82
+ });
83
+ writeOutput({ message: output });
84
+ }
85
+ catch (error) {
86
+ writeError({
87
+ message: `Error fetching prompt: ${error instanceof Error ? error.message : String(error)}`,
88
+ });
89
+ process.exit(1);
90
+ }
91
+ }
92
+ /**
93
+ * Create the prompt command
94
+ */
95
+ export function createPromptCommand() {
96
+ const command = new Command("prompt");
97
+ command
98
+ .description("Show a Phoenix prompt")
99
+ .argument("<prompt_identifier>", "Prompt name or ID")
100
+ .option("--endpoint <url>", "Phoenix API endpoint")
101
+ .option("--api-key <key>", "Phoenix API key for authentication")
102
+ .option("--format <format>", "Output format: pretty, json, raw, or text", "pretty")
103
+ .option("--no-progress", "Disable progress indicators")
104
+ .option("--tag <tag>", "Get prompt version by tag name")
105
+ .option("--version <version_id>", "Get specific prompt version by ID")
106
+ .action(promptHandler);
107
+ return command;
108
+ }
109
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Create the prompts command
4
+ */
5
+ export declare function createPromptsCommand(): Command;
6
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/commands/prompts.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuGpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAiB9C"}
@@ -0,0 +1,97 @@
1
+ import { createPhoenixClient } from "../client.js";
2
+ import { getConfigErrorMessage, resolveConfig } from "../config.js";
3
+ import { writeError, writeOutput, writeProgress } from "../io.js";
4
+ import { formatPromptsOutput } from "./formatPrompts.js";
5
+ import { Command } from "commander";
6
+ /**
7
+ * Fetch all prompts from Phoenix
8
+ */
9
+ async function fetchPrompts(client, options = {}) {
10
+ const allPrompts = [];
11
+ let cursor;
12
+ const pageLimit = options.limit || 100;
13
+ do {
14
+ const response = await client.GET("/v1/prompts", {
15
+ params: {
16
+ query: {
17
+ cursor,
18
+ limit: pageLimit,
19
+ },
20
+ },
21
+ });
22
+ if (response.error || !response.data) {
23
+ throw new Error(`Failed to fetch prompts: ${response.error}`);
24
+ }
25
+ allPrompts.push(...response.data.data);
26
+ cursor = response.data.next_cursor || undefined;
27
+ // If we've fetched enough for the requested limit, stop
28
+ if (options.limit && allPrompts.length >= options.limit) {
29
+ break;
30
+ }
31
+ } while (cursor);
32
+ return allPrompts;
33
+ }
34
+ /**
35
+ * Prompts command handler
36
+ */
37
+ async function promptsHandler(options) {
38
+ try {
39
+ // Resolve configuration
40
+ const config = resolveConfig({
41
+ cliOptions: {
42
+ endpoint: options.endpoint,
43
+ apiKey: options.apiKey,
44
+ },
45
+ });
46
+ // Validate that we have endpoint
47
+ if (!config.endpoint) {
48
+ const errors = [
49
+ "Phoenix endpoint not configured. Set PHOENIX_HOST environment variable or use --endpoint flag.",
50
+ ];
51
+ writeError({ message: getConfigErrorMessage({ errors }) });
52
+ process.exit(1);
53
+ }
54
+ // Create client
55
+ const client = createPhoenixClient({ config });
56
+ writeProgress({
57
+ message: "Fetching prompts...",
58
+ noProgress: !options.progress,
59
+ });
60
+ // Fetch prompts
61
+ const prompts = await fetchPrompts(client, {
62
+ limit: options.limit,
63
+ });
64
+ writeProgress({
65
+ message: `Found ${prompts.length} prompt(s)`,
66
+ noProgress: !options.progress,
67
+ });
68
+ // Output prompts
69
+ const output = formatPromptsOutput({
70
+ prompts,
71
+ format: options.format,
72
+ });
73
+ writeOutput({ message: output });
74
+ }
75
+ catch (error) {
76
+ writeError({
77
+ message: `Error fetching prompts: ${error instanceof Error ? error.message : String(error)}`,
78
+ });
79
+ process.exit(1);
80
+ }
81
+ }
82
+ /**
83
+ * Create the prompts command
84
+ */
85
+ export function createPromptsCommand() {
86
+ const command = new Command("prompts");
87
+ command
88
+ .description("List all available Phoenix prompts")
89
+ .option("--endpoint <url>", "Phoenix API endpoint")
90
+ .option("--api-key <key>", "Phoenix API key for authentication")
91
+ .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
92
+ .option("--no-progress", "Disable progress indicators")
93
+ .option("--limit <number>", "Maximum number of prompts to fetch", parseInt)
94
+ .action(promptsHandler);
95
+ return command;
96
+ }
97
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/commands/prompts.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.1",
3
+ "version": "0.4.0",
4
4
  "description": "A command-line interface for Phoenix",
5
5
  "type": "module",
6
6
  "main": "build/index.js",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "@arizeai/openinference-semantic-conventions": "^1.1.0",
34
34
  "commander": "^12.1.0",
35
- "@arizeai/phoenix-client": "5.7.0",
35
+ "@arizeai/phoenix-client": "5.8.0",
36
36
  "@arizeai/phoenix-config": "0.1.0"
37
37
  },
38
38
  "devDependencies": {