@arizeai/phoenix-cli 0.5.2 → 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/README.md +165 -172
- package/build/cli.d.ts.map +1 -1
- package/build/cli.js +4 -1
- package/build/cli.js.map +1 -1
- package/build/commands/api.d.ts +10 -0
- package/build/commands/api.d.ts.map +1 -0
- package/build/commands/api.js +103 -0
- package/build/commands/api.js.map +1 -0
- package/build/commands/auth.d.ts.map +1 -1
- package/build/commands/auth.js +1 -1
- package/build/commands/auth.js.map +1 -1
- package/build/commands/dataset.d.ts.map +1 -1
- package/build/commands/dataset.js +2 -2
- package/build/commands/dataset.js.map +1 -1
- package/build/commands/datasets.d.ts.map +1 -1
- package/build/commands/datasets.js +1 -1
- package/build/commands/datasets.js.map +1 -1
- package/build/commands/experiment.d.ts.map +1 -1
- package/build/commands/experiment.js +2 -2
- package/build/commands/experiment.js.map +1 -1
- package/build/commands/experiments.d.ts.map +1 -1
- package/build/commands/experiments.js +3 -3
- package/build/commands/experiments.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 +3 -0
- package/build/commands/index.d.ts.map +1 -1
- package/build/commands/index.js +3 -0
- package/build/commands/index.js.map +1 -1
- package/build/commands/projects.d.ts.map +1 -1
- package/build/commands/projects.js +1 -1
- package/build/commands/projects.js.map +1 -1
- package/build/commands/prompt.d.ts.map +1 -1
- package/build/commands/prompt.js +1 -1
- package/build/commands/prompt.js.map +1 -1
- package/build/commands/prompts.d.ts.map +1 -1
- package/build/commands/prompts.js +1 -1
- package/build/commands/prompts.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/build/commands/trace.d.ts.map +1 -1
- package/build/commands/trace.js +2 -2
- package/build/commands/trace.js.map +1 -1
- package/build/commands/traces.d.ts.map +1 -1
- package/build/commands/traces.js +3 -3
- package/build/commands/traces.js.map +1 -1
- package/package.json +26 -27
package/README.md
CHANGED
|
@@ -22,287 +22,280 @@
|
|
|
22
22
|
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=8e8e8b34-7900-43fa-a38f-1f070bd48c64&page=js/packages/phoenix-cli/README.md" />
|
|
23
23
|
</p>
|
|
24
24
|
|
|
25
|
-
A command-line interface for [Arize Phoenix](https://github.com/Arize-ai/phoenix). Fetch traces,
|
|
25
|
+
A command-line interface for [Arize Phoenix](https://github.com/Arize-ai/phoenix). Fetch traces, inspect datasets, query experiments, and access prompts directly from your terminal—or pipe them into AI coding agents like Claude Code, Cursor, Codex, and Gemini CLI.
|
|
26
26
|
|
|
27
27
|
## Installation
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
npm install -g @arizeai/phoenix-cli
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
Or run directly with npx:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
31
|
+
# or run without installing:
|
|
36
32
|
npx @arizeai/phoenix-cli
|
|
37
33
|
```
|
|
38
34
|
|
|
39
|
-
##
|
|
35
|
+
## Configuration
|
|
40
36
|
|
|
41
37
|
```bash
|
|
42
|
-
# Configure your Phoenix instance
|
|
43
38
|
export PHOENIX_HOST=http://localhost:6006
|
|
44
39
|
export PHOENIX_PROJECT=my-project
|
|
45
40
|
export PHOENIX_API_KEY=your-api-key # if authentication is enabled
|
|
46
|
-
|
|
47
|
-
# Fetch the most recent trace
|
|
48
|
-
px traces --limit 1
|
|
49
|
-
|
|
50
|
-
# Fetch a specific trace by ID
|
|
51
|
-
px trace abc123def456
|
|
52
|
-
|
|
53
|
-
# Export traces to a directory
|
|
54
|
-
px traces ./my-traces --limit 50
|
|
55
41
|
```
|
|
56
42
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
| Variable | Description |
|
|
60
|
-
| ------------------------ | ---------------------------------------------------- |
|
|
61
|
-
| `PHOENIX_HOST` | Phoenix API endpoint (e.g., `http://localhost:6006`) |
|
|
62
|
-
| `PHOENIX_PROJECT` | Project name or ID |
|
|
63
|
-
| `PHOENIX_API_KEY` | API key for authentication (if required) |
|
|
64
|
-
| `PHOENIX_CLIENT_HEADERS` | Custom headers as JSON string |
|
|
43
|
+
CLI flags (`--endpoint`, `--project`, `--api-key`) override environment variables.
|
|
65
44
|
|
|
66
|
-
|
|
45
|
+
| Variable | Description |
|
|
46
|
+
| ------------------------ | ----------------------------- |
|
|
47
|
+
| `PHOENIX_HOST` | Phoenix API endpoint |
|
|
48
|
+
| `PHOENIX_PROJECT` | Project name or ID |
|
|
49
|
+
| `PHOENIX_API_KEY` | API key (if auth is enabled) |
|
|
50
|
+
| `PHOENIX_CLIENT_HEADERS` | Custom headers as JSON string |
|
|
67
51
|
|
|
68
52
|
## Commands
|
|
69
53
|
|
|
70
|
-
### `px
|
|
54
|
+
### `px traces [directory]`
|
|
71
55
|
|
|
72
|
-
|
|
56
|
+
Fetch recent traces from the configured project. All output is JSON.
|
|
73
57
|
|
|
74
58
|
```bash
|
|
75
|
-
px
|
|
76
|
-
px
|
|
59
|
+
px traces --limit 10 # stdout (pretty)
|
|
60
|
+
px traces --format raw --no-progress | jq # pipe-friendly compact JSON
|
|
61
|
+
px traces ./my-traces --limit 50 # save as JSON files to directory
|
|
62
|
+
px traces --last-n-minutes 60 --limit 20 # filter by time window
|
|
63
|
+
px traces --since 2026-01-13T10:00:00Z # since ISO timestamp
|
|
77
64
|
```
|
|
78
65
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
66
|
+
| Option | Description | Default |
|
|
67
|
+
| --------------------------- | -------------------------------------- | -------- |
|
|
68
|
+
| `[directory]` | Save traces as JSON files to directory | stdout |
|
|
69
|
+
| `-n, --limit <number>` | Number of traces (newest first) | 10 |
|
|
70
|
+
| `--last-n-minutes <number>` | Only traces from the last N minutes | — |
|
|
71
|
+
| `--since <timestamp>` | Traces since ISO timestamp | — |
|
|
72
|
+
| `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
73
|
+
| `--no-progress` | Suppress progress output | — |
|
|
74
|
+
| `--include-annotations` | Include span annotations | — |
|
|
82
75
|
|
|
83
76
|
```bash
|
|
84
|
-
|
|
85
|
-
px traces
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
px traces --format raw --no-progress | jq
|
|
77
|
+
# Find ERROR traces
|
|
78
|
+
px traces --limit 50 --format raw --no-progress | jq '.[] | select(.status == "ERROR")'
|
|
79
|
+
|
|
80
|
+
# Sort by duration, take top 5 slowest
|
|
81
|
+
px traces --limit 20 --format raw --no-progress | jq 'sort_by(-.duration) | .[0:5]'
|
|
82
|
+
|
|
83
|
+
# Extract LLM model names used
|
|
84
|
+
px traces --limit 50 --format raw --no-progress | \
|
|
85
|
+
jq -r '.[].spans[] | select(.span_kind == "LLM") | .attributes["llm.model_name"]' | sort -u
|
|
89
86
|
```
|
|
90
87
|
|
|
91
|
-
|
|
92
|
-
| --------------------------- | ----------------------------------------- | -------- |
|
|
93
|
-
| `[directory]` | Save traces as JSON files to directory | stdout |
|
|
94
|
-
| `-n, --limit <number>` | Number of traces to fetch (newest first) | 10 |
|
|
95
|
-
| `--last-n-minutes <number>` | Only fetch traces from the last N minutes | — |
|
|
96
|
-
| `--since <timestamp>` | Fetch traces since ISO timestamp | — |
|
|
97
|
-
| `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
98
|
-
| `--no-progress` | Disable progress output | — |
|
|
99
|
-
| `--include-annotations` | Include span annotations in trace export | — |
|
|
88
|
+
---
|
|
100
89
|
|
|
101
90
|
### `px trace <trace-id>`
|
|
102
91
|
|
|
103
|
-
Fetch a
|
|
92
|
+
Fetch a single trace by ID.
|
|
104
93
|
|
|
105
94
|
```bash
|
|
106
95
|
px trace abc123def456
|
|
107
|
-
px trace abc123def456 --
|
|
108
|
-
px trace abc123def456 --
|
|
96
|
+
px trace abc123def456 --format raw | jq '.spans[] | select(.status_code != "OK")'
|
|
97
|
+
px trace abc123def456 --file trace.json
|
|
109
98
|
```
|
|
110
99
|
|
|
111
|
-
|
|
112
|
-
| ----------------------- | ---------------------------------------- | -------- |
|
|
113
|
-
| `--file <path>` | Save to file instead of stdout | stdout |
|
|
114
|
-
| `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
115
|
-
| `--include-annotations` | Include span annotations in trace export | — |
|
|
100
|
+
---
|
|
116
101
|
|
|
117
102
|
### `px datasets`
|
|
118
103
|
|
|
119
|
-
List all
|
|
104
|
+
List all datasets.
|
|
120
105
|
|
|
121
106
|
```bash
|
|
122
|
-
px datasets
|
|
123
|
-
px datasets --format json # JSON output
|
|
124
|
-
px datasets --format raw --no-progress | jq # Pipe to jq
|
|
107
|
+
px datasets --format raw --no-progress | jq '.[].name'
|
|
125
108
|
```
|
|
126
109
|
|
|
127
|
-
|
|
128
|
-
| ------------------- | -------------------------- | -------- |
|
|
129
|
-
| `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
130
|
-
| `--limit <number>` | Maximum number of datasets | — |
|
|
110
|
+
---
|
|
131
111
|
|
|
132
112
|
### `px dataset <dataset-identifier>`
|
|
133
113
|
|
|
134
114
|
Fetch examples from a dataset.
|
|
135
115
|
|
|
136
116
|
```bash
|
|
137
|
-
px dataset
|
|
138
|
-
px dataset
|
|
139
|
-
px dataset
|
|
140
|
-
px dataset
|
|
141
|
-
px dataset query_response --file dataset.json # Save to file
|
|
142
|
-
px dataset query_response --format raw | jq '.examples[].input'
|
|
117
|
+
px dataset my-dataset --format raw | jq '.examples[].input'
|
|
118
|
+
px dataset my-dataset --split train --split test
|
|
119
|
+
px dataset my-dataset --version <version-id>
|
|
120
|
+
px dataset my-dataset --file dataset.json
|
|
143
121
|
```
|
|
144
122
|
|
|
145
|
-
|
|
146
|
-
| ---------------- | ---------------------------------------- | -------- |
|
|
147
|
-
| `--split <name>` | Filter by split (can be used repeatedly) | — |
|
|
148
|
-
| `--version <id>` | Fetch from specific dataset version | latest |
|
|
149
|
-
| `--file <path>` | Save to file instead of stdout | stdout |
|
|
150
|
-
| `--format <fmt>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
123
|
+
---
|
|
151
124
|
|
|
152
125
|
### `px experiments --dataset <name-or-id>`
|
|
153
126
|
|
|
154
|
-
List experiments for a dataset
|
|
127
|
+
List experiments for a dataset.
|
|
155
128
|
|
|
156
129
|
```bash
|
|
157
|
-
px experiments --dataset my-dataset
|
|
158
|
-
|
|
159
|
-
px experiments --dataset my-dataset ./experiments # Export to directory
|
|
130
|
+
px experiments --dataset my-dataset --format raw --no-progress | \
|
|
131
|
+
jq '.[] | {id, successful_run_count, failed_run_count}'
|
|
160
132
|
```
|
|
161
133
|
|
|
162
|
-
|
|
163
|
-
| ------------------------ | ----------------------------------------- | -------- |
|
|
164
|
-
| `--dataset <name-or-id>` | Dataset name or ID (required) | — |
|
|
165
|
-
| `[directory]` | Export experiment JSON files to directory | stdout |
|
|
166
|
-
| `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
167
|
-
| `--limit <number>` | Maximum number of experiments | — |
|
|
134
|
+
---
|
|
168
135
|
|
|
169
136
|
### `px experiment <experiment-id>`
|
|
170
137
|
|
|
171
|
-
Fetch a single experiment with all run data.
|
|
138
|
+
Fetch a single experiment with all run data (inputs, outputs, evaluations, trace IDs).
|
|
172
139
|
|
|
173
140
|
```bash
|
|
174
|
-
|
|
175
|
-
px experiment RXhwZXJpbWVudDox --
|
|
176
|
-
|
|
141
|
+
# Find failed runs
|
|
142
|
+
px experiment RXhwZXJpbWVudDox --format raw --no-progress | \
|
|
143
|
+
jq '.[] | select(.error != null) | {input, error}'
|
|
144
|
+
|
|
145
|
+
# Average latency
|
|
146
|
+
px experiment RXhwZXJpbWVudDox --format raw --no-progress | \
|
|
147
|
+
jq '[.[].latency_ms] | add / length'
|
|
177
148
|
```
|
|
178
149
|
|
|
179
|
-
|
|
180
|
-
| ------------------- | ------------------------------ | -------- |
|
|
181
|
-
| `--file <path>` | Save to file instead of stdout | stdout |
|
|
182
|
-
| `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
|
|
150
|
+
---
|
|
183
151
|
|
|
184
|
-
|
|
152
|
+
### `px prompts`
|
|
185
153
|
|
|
186
|
-
|
|
154
|
+
List all prompts.
|
|
187
155
|
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
│
|
|
191
|
-
│ Input: What is the weather in San Francisco?
|
|
192
|
-
│ Output: The weather is currently sunny...
|
|
193
|
-
│
|
|
194
|
-
│ Spans:
|
|
195
|
-
│ └─ ✓ agent_run (CHAIN) - 1250ms
|
|
196
|
-
│ ├─ ✓ llm_call (LLM) - 800ms
|
|
197
|
-
│ └─ ✓ tool_execution (TOOL) - 400ms
|
|
198
|
-
└─
|
|
156
|
+
```bash
|
|
157
|
+
px prompts --format raw --no-progress | jq '.[].name'
|
|
199
158
|
```
|
|
200
159
|
|
|
201
|
-
|
|
160
|
+
---
|
|
202
161
|
|
|
203
|
-
|
|
162
|
+
### `px prompt <prompt-identifier>`
|
|
204
163
|
|
|
205
|
-
|
|
164
|
+
Fetch a prompt. The `text` format is ideal for piping to AI assistants.
|
|
206
165
|
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
"spans": [
|
|
211
|
-
{
|
|
212
|
-
"name": "chat_completion",
|
|
213
|
-
"context": {
|
|
214
|
-
"trace_id": "abc123def456",
|
|
215
|
-
"span_id": "span-1"
|
|
216
|
-
},
|
|
217
|
-
"span_kind": "LLM",
|
|
218
|
-
"parent_id": null,
|
|
219
|
-
"start_time": "2026-01-17T10:00:00.000Z",
|
|
220
|
-
"end_time": "2026-01-17T10:00:01.250Z",
|
|
221
|
-
"status_code": "OK",
|
|
222
|
-
"attributes": {
|
|
223
|
-
"llm.model_name": "gpt-4",
|
|
224
|
-
"llm.token_count.prompt": 512,
|
|
225
|
-
"llm.token_count.completion": 256,
|
|
226
|
-
"input.value": "What is the weather?",
|
|
227
|
-
"output.value": "The weather is sunny..."
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
],
|
|
231
|
-
"rootSpan": { ... },
|
|
232
|
-
"startTime": "2026-01-17T10:00:00.000Z",
|
|
233
|
-
"endTime": "2026-01-17T10:00:01.250Z",
|
|
234
|
-
"duration": 1250,
|
|
235
|
-
"status": "OK"
|
|
236
|
-
}
|
|
166
|
+
```bash
|
|
167
|
+
px prompt my-evaluator --format text --no-progress | claude -p "Review this prompt"
|
|
168
|
+
px prompt my-evaluator --tag production --format json | jq '.template'
|
|
237
169
|
```
|
|
238
170
|
|
|
239
|
-
|
|
171
|
+
| Option | Description | Default |
|
|
172
|
+
| ------------------- | ---------------------------------- | -------- |
|
|
173
|
+
| `--tag <name>` | Get version by tag | — |
|
|
174
|
+
| `--version <id>` | Get specific version | latest |
|
|
175
|
+
| `--format <format>` | `pretty`, `json`, `raw`, or `text` | `pretty` |
|
|
240
176
|
|
|
241
|
-
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
### `px api graphql <query>`
|
|
242
180
|
|
|
243
|
-
|
|
181
|
+
Make authenticated GraphQL queries against the Phoenix API. Output is `{"data": {...}}` JSON — pipe with `jq '.data.<field>'` to extract values. Only queries are permitted; mutations and subscriptions are rejected.
|
|
244
182
|
|
|
245
183
|
```bash
|
|
246
|
-
px
|
|
184
|
+
px api graphql '<query>' [--endpoint <url>] [--api-key <key>]
|
|
247
185
|
```
|
|
248
186
|
|
|
249
|
-
|
|
187
|
+
Use introspection to discover what fields are available:
|
|
250
188
|
|
|
251
189
|
```bash
|
|
252
|
-
px
|
|
190
|
+
$ px api graphql '{ __schema { queryType { fields { name } } } }' | jq '.data.__schema.queryType.fields[].name'
|
|
191
|
+
"projects"
|
|
192
|
+
"datasets"
|
|
193
|
+
"prompts"
|
|
194
|
+
"evaluators"
|
|
195
|
+
"projectCount"
|
|
196
|
+
"datasetCount"
|
|
197
|
+
...
|
|
198
|
+
|
|
199
|
+
$ px api graphql '{ __type(name: "Experiment") { fields { name type { name } } } }' | \
|
|
200
|
+
jq '.data.__type.fields[] | {name, type: .type.name}'
|
|
201
|
+
{"name":"id","type":"ID"}
|
|
202
|
+
{"name":"name","type":"String"}
|
|
203
|
+
{"name":"runCount","type":"Int"}
|
|
204
|
+
{"name":"errorRate","type":"Float"}
|
|
205
|
+
{"name":"averageRunLatencyMs","type":"Float"}
|
|
253
206
|
```
|
|
254
207
|
|
|
255
|
-
|
|
208
|
+
**Projects:**
|
|
256
209
|
|
|
257
210
|
```bash
|
|
258
|
-
px
|
|
259
|
-
|
|
211
|
+
$ px api graphql '{ projects { edges { node { name traceCount tokenCountTotal } } } }' | \
|
|
212
|
+
jq '.data.projects.edges[].node'
|
|
213
|
+
{"name": "default", "traceCount": 1482, "tokenCountTotal": 219083}
|
|
260
214
|
```
|
|
261
215
|
|
|
262
|
-
|
|
216
|
+
**Datasets:**
|
|
263
217
|
|
|
264
218
|
```bash
|
|
265
|
-
px
|
|
219
|
+
$ px api graphql '{ datasets { edges { node { name exampleCount experimentCount } } } }' | \
|
|
220
|
+
jq '.data.datasets.edges[].node'
|
|
221
|
+
{"name": "eval-golden-set", "exampleCount": 120, "experimentCount": 4}
|
|
222
|
+
{"name": "rag-test-cases", "exampleCount": 50, "experimentCount": 1}
|
|
266
223
|
```
|
|
267
224
|
|
|
268
|
-
|
|
225
|
+
**Experiments:**
|
|
269
226
|
|
|
270
227
|
```bash
|
|
271
|
-
# List
|
|
272
|
-
px
|
|
273
|
-
|
|
228
|
+
# List experiments per dataset with error rate and avg latency
|
|
229
|
+
$ px api graphql '{
|
|
230
|
+
datasets {
|
|
231
|
+
edges {
|
|
232
|
+
node {
|
|
233
|
+
name
|
|
234
|
+
experiments {
|
|
235
|
+
edges {
|
|
236
|
+
node { name runCount errorRate averageRunLatencyMs }
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}' | jq '.data.datasets.edges[].node | {dataset: .name, experiments: [.experiments.edges[].node]}'
|
|
274
243
|
|
|
275
|
-
#
|
|
276
|
-
px
|
|
277
|
-
|
|
278
|
-
|
|
244
|
+
# Find experiments with failures
|
|
245
|
+
$ px api graphql '{
|
|
246
|
+
datasets { edges { node { name experiments { edges { node { name errorRate runCount } } } } } }
|
|
247
|
+
}' | jq '.. | objects | select(.errorRate? > 0) | {name, errorRate, runCount}'
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Counts at a glance:**
|
|
279
251
|
|
|
280
|
-
|
|
281
|
-
px
|
|
252
|
+
```bash
|
|
253
|
+
$ px api graphql '{ projectCount datasetCount promptCount evaluatorCount }'
|
|
254
|
+
{"data": {"projectCount": 1, "datasetCount": 12, "promptCount": 3, "evaluatorCount": 2}}
|
|
282
255
|
```
|
|
283
256
|
|
|
284
|
-
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## JSON output shape
|
|
260
|
+
|
|
261
|
+
All commands output JSON. Use `--format raw` for compact JSON and `--no-progress` to suppress stderr when piping:
|
|
285
262
|
|
|
286
263
|
```bash
|
|
287
|
-
|
|
288
|
-
px
|
|
289
|
-
|
|
264
|
+
px traces --format raw --no-progress | jq ...
|
|
265
|
+
px datasets --format raw --no-progress | jq ...
|
|
266
|
+
```
|
|
290
267
|
|
|
291
|
-
|
|
292
|
-
px experiment RXhwZXJpbWVudDox --format raw --no-progress | \
|
|
293
|
-
jq '.[] | select(.error != null) | {query: .input.query, error}'
|
|
294
|
-
# Output: {"query":"looking for complex fodmap meal ideas","error":"peer closed connection..."}
|
|
268
|
+
Trace JSON structure:
|
|
295
269
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"traceId": "abc123def456",
|
|
273
|
+
"status": "OK",
|
|
274
|
+
"duration": 1250,
|
|
275
|
+
"spans": [
|
|
276
|
+
{
|
|
277
|
+
"name": "chat_completion",
|
|
278
|
+
"span_kind": "LLM",
|
|
279
|
+
"status_code": "OK",
|
|
280
|
+
"attributes": {
|
|
281
|
+
"llm.model_name": "gpt-4",
|
|
282
|
+
"llm.token_count.prompt": 512,
|
|
283
|
+
"llm.token_count.completion": 256,
|
|
284
|
+
"input.value": "What is the weather?",
|
|
285
|
+
"output.value": "The weather is sunny..."
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
]
|
|
289
|
+
}
|
|
299
290
|
```
|
|
300
291
|
|
|
292
|
+
`px api graphql` output always wraps results in `{"data": {...}}`. Pipe with `jq '.data.<field>'` to extract.
|
|
293
|
+
|
|
301
294
|
---
|
|
302
295
|
|
|
303
296
|
## Community
|
|
304
297
|
|
|
305
|
-
- 🌍 [Slack community](https://
|
|
298
|
+
- 🌍 [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-3r07iavnk-ammtATWSlF0pSrd1DsMW7g)
|
|
306
299
|
- 📚 [Documentation](https://arize.com/docs/phoenix)
|
|
307
300
|
- 🌟 [GitHub](https://github.com/Arize-ai/phoenix)
|
|
308
301
|
- 🐞 [Report bugs](https://github.com/Arize-ai/phoenix/issues)
|
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
|
-
import { createAuthCommand, createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
|
|
3
2
|
import { Command } from "commander";
|
|
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,10 +15,13 @@ 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());
|
|
21
23
|
program.addCommand(createPromptCommand());
|
|
24
|
+
program.addCommand(createApiCommand());
|
|
22
25
|
// Show help if no command provided
|
|
23
26
|
if (process.argv.length === 2) {
|
|
24
27
|
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,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,
|
|
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,10 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Returns true if the query string is a GraphQL mutation or subscription.
|
|
4
|
+
* Strips # comments first to avoid false positives.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isNonQuery({ query }: {
|
|
7
|
+
query: string;
|
|
8
|
+
}): boolean;
|
|
9
|
+
export declare function createApiCommand(): Command;
|
|
10
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAGhE;AA+GD,wBAAgB,gBAAgB,IAAI,OAAO,CAK1C"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { getConfigErrorMessage, resolveConfig } from "../config.js";
|
|
3
|
+
import { writeError, writeOutput } from "../io.js";
|
|
4
|
+
/**
|
|
5
|
+
* Returns true if the query string is a GraphQL mutation or subscription.
|
|
6
|
+
* Strips # comments first to avoid false positives.
|
|
7
|
+
*/
|
|
8
|
+
export function isNonQuery({ query }) {
|
|
9
|
+
const stripped = query.replace(/#[^\n]*/g, "");
|
|
10
|
+
return /^\s*(mutation|subscription)[\s({]/m.test(stripped);
|
|
11
|
+
}
|
|
12
|
+
async function apiGraphqlHandler(query, options) {
|
|
13
|
+
try {
|
|
14
|
+
// 1. Reject mutations and subscriptions
|
|
15
|
+
if (isNonQuery({ query })) {
|
|
16
|
+
writeError({
|
|
17
|
+
message: "Error: Only queries are permitted. Mutations and subscriptions are not allowed.",
|
|
18
|
+
});
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
// 2. Resolve config (endpoint only — no project required)
|
|
22
|
+
const config = resolveConfig({
|
|
23
|
+
cliOptions: { endpoint: options.endpoint, apiKey: options.apiKey },
|
|
24
|
+
});
|
|
25
|
+
if (!config.endpoint) {
|
|
26
|
+
writeError({
|
|
27
|
+
message: getConfigErrorMessage({
|
|
28
|
+
errors: [
|
|
29
|
+
"Phoenix endpoint not configured. Set PHOENIX_HOST environment variable or use --endpoint flag.",
|
|
30
|
+
],
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
// 3. Build URL and auth headers
|
|
36
|
+
const graphqlUrl = `${config.endpoint.replace(/\/$/, "")}/graphql`;
|
|
37
|
+
const headers = {
|
|
38
|
+
"Content-Type": "application/json",
|
|
39
|
+
...(config.headers ?? {}),
|
|
40
|
+
};
|
|
41
|
+
if (config.apiKey) {
|
|
42
|
+
headers["Authorization"] = `Bearer ${config.apiKey}`;
|
|
43
|
+
}
|
|
44
|
+
// 4. POST using Node 22 built-in fetch
|
|
45
|
+
const response = await fetch(graphqlUrl, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers,
|
|
48
|
+
body: JSON.stringify({ query }),
|
|
49
|
+
});
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
writeError({
|
|
52
|
+
message: `Error: HTTP ${response.status} ${response.statusText} from ${graphqlUrl}`,
|
|
53
|
+
});
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
// 5. Parse and output response
|
|
57
|
+
const json = (await response.json());
|
|
58
|
+
if (json.errors && json.errors.length > 0) {
|
|
59
|
+
const msgs = json.errors.map((e) => ` • ${e.message}`).join("\n");
|
|
60
|
+
writeError({ message: `GraphQL Errors:\n${msgs}` });
|
|
61
|
+
}
|
|
62
|
+
// Always write full response to stdout (2-space indent, pipeable)
|
|
63
|
+
writeOutput({ message: JSON.stringify(json, null, 2) });
|
|
64
|
+
if (json.errors && json.errors.length > 0 && json.data == null) {
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
writeError({
|
|
70
|
+
message: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
71
|
+
});
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function createApiGraphqlCommand() {
|
|
76
|
+
return new Command("graphql")
|
|
77
|
+
.description("Execute a GraphQL query against the Phoenix API.\n" +
|
|
78
|
+
"\n" +
|
|
79
|
+
" Only queries are permitted — mutations are rejected.\n" +
|
|
80
|
+
"\n" +
|
|
81
|
+
" Examples:\n" +
|
|
82
|
+
"\n" +
|
|
83
|
+
" # List project names\n" +
|
|
84
|
+
" px api graphql '{ projects { edges { node { name } } } }'\n" +
|
|
85
|
+
"\n" +
|
|
86
|
+
" # Filter inline\n" +
|
|
87
|
+
" px api graphql '{ datasets(first: 5) { edges { node { name } } } }'\n" +
|
|
88
|
+
"\n" +
|
|
89
|
+
" # Pipe to jq to extract fields\n" +
|
|
90
|
+
" px api graphql '{ projects { edges { node { name } } } }' | \\\n" +
|
|
91
|
+
" jq '.data.projects.edges[].node.name'")
|
|
92
|
+
.argument("<query>", "GraphQL query string")
|
|
93
|
+
.option("--endpoint <url>", "Phoenix API endpoint (or set PHOENIX_HOST)")
|
|
94
|
+
.option("--api-key <key>", "Phoenix API key (or set PHOENIX_API_KEY)")
|
|
95
|
+
.action(apiGraphqlHandler);
|
|
96
|
+
}
|
|
97
|
+
export function createApiCommand() {
|
|
98
|
+
const command = new Command("api");
|
|
99
|
+
command.description("Make authenticated requests to the Phoenix API");
|
|
100
|
+
command.addCommand(createApiGraphqlCommand());
|
|
101
|
+
return command;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKpD;AAqDD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
|
package/build/commands/auth.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
1
2
|
import { resolveConfig } from "../config.js";
|
|
2
3
|
import { writeError, writeOutput } from "../io.js";
|
|
3
|
-
import { Command } from "commander";
|
|
4
4
|
/**
|
|
5
5
|
* Obscure an API key for display using asterisks.
|
|
6
6
|
* Shows a fixed number of asterisks regardless of key length for security.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAOhD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,sCAAsC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,OAA0B;IACzD,wBAAwB;IACxB,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,UAAU,CAAC;YACT,OAAO,EAAE,2DAA2D;SACrE,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,mBAAmB;IACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5B,yBAAyB;IACzB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO;SACJ,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;SAC/D,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAErD,kBAAkB;IAClB,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/commands/dataset.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/commands/dataset.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqLpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAyB9C"}
|