@arizeai/phoenix-client 7.6.0 → 7.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/CHANGELOG.md +12 -0
- package/README.md +27 -3
- package/dist/esm/__generated__/api/v1.d.ts +1 -1
- package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
- package/dist/esm/constants/serverRequirements.d.ts +1 -0
- package/dist/esm/constants/serverRequirements.d.ts.map +1 -1
- package/dist/esm/constants/serverRequirements.js +7 -0
- package/dist/esm/constants/serverRequirements.js.map +1 -1
- package/dist/esm/projects/index.d.ts +1 -0
- package/dist/esm/projects/index.d.ts.map +1 -1
- package/dist/esm/projects/index.js +1 -0
- package/dist/esm/projects/index.js.map +1 -1
- package/dist/esm/projects/setProjectRetentionPolicy.d.ts +49 -0
- package/dist/esm/projects/setProjectRetentionPolicy.d.ts.map +1 -0
- package/dist/esm/projects/setProjectRetentionPolicy.js +52 -0
- package/dist/esm/projects/setProjectRetentionPolicy.js.map +1 -0
- package/dist/esm/traces/getTraces.d.ts +1 -1
- package/dist/esm/traces/getTraces.d.ts.map +1 -1
- package/dist/esm/traces/index.d.ts +1 -0
- package/dist/esm/traces/index.d.ts.map +1 -1
- package/dist/esm/traces/index.js +1 -0
- package/dist/esm/traces/index.js.map +1 -1
- package/dist/esm/traces/transferTraces.d.ts +56 -0
- package/dist/esm/traces/transferTraces.d.ts.map +1 -0
- package/dist/esm/traces/transferTraces.js +56 -0
- package/dist/esm/traces/transferTraces.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/users/getCurrentUser.d.ts +25 -0
- package/dist/esm/users/getCurrentUser.d.ts.map +1 -0
- package/dist/esm/users/getCurrentUser.js +30 -0
- package/dist/esm/users/getCurrentUser.js.map +1 -0
- package/dist/esm/users/index.d.ts +2 -0
- package/dist/esm/users/index.d.ts.map +1 -0
- package/dist/esm/users/index.js +2 -0
- package/dist/esm/users/index.js.map +1 -0
- package/dist/src/__generated__/api/v1.d.ts +1 -1
- package/dist/src/__generated__/api/v1.d.ts.map +1 -1
- package/dist/src/constants/serverRequirements.d.ts +1 -0
- package/dist/src/constants/serverRequirements.d.ts.map +1 -1
- package/dist/src/constants/serverRequirements.js +8 -1
- package/dist/src/constants/serverRequirements.js.map +1 -1
- package/dist/src/projects/index.d.ts +1 -0
- package/dist/src/projects/index.d.ts.map +1 -1
- package/dist/src/projects/index.js +1 -0
- package/dist/src/projects/index.js.map +1 -1
- package/dist/src/projects/setProjectRetentionPolicy.d.ts +49 -0
- package/dist/src/projects/setProjectRetentionPolicy.d.ts.map +1 -0
- package/dist/src/projects/setProjectRetentionPolicy.js +59 -0
- package/dist/src/projects/setProjectRetentionPolicy.js.map +1 -0
- package/dist/src/traces/getTraces.d.ts +1 -1
- package/dist/src/traces/getTraces.d.ts.map +1 -1
- package/dist/src/traces/index.d.ts +1 -0
- package/dist/src/traces/index.d.ts.map +1 -1
- package/dist/src/traces/index.js +1 -0
- package/dist/src/traces/index.js.map +1 -1
- package/dist/src/traces/transferTraces.d.ts +56 -0
- package/dist/src/traces/transferTraces.d.ts.map +1 -0
- package/dist/src/traces/transferTraces.js +59 -0
- package/dist/src/traces/transferTraces.js.map +1 -0
- package/dist/src/users/getCurrentUser.d.ts +25 -0
- package/dist/src/users/getCurrentUser.d.ts.map +1 -0
- package/dist/src/users/getCurrentUser.js +36 -0
- package/dist/src/users/getCurrentUser.js.map +1 -0
- package/dist/src/users/index.d.ts +2 -0
- package/dist/src/users/index.d.ts.map +1 -0
- package/dist/src/users/index.js +18 -0
- package/dist/src/users/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/overview.mdx +8 -4
- package/docs/projects.mdx +71 -0
- package/docs/traces.mdx +28 -2
- package/docs/users.mdx +44 -0
- package/package.json +6 -2
- package/src/__generated__/api/v1.ts +1 -1
- package/src/constants/serverRequirements.ts +8 -0
- package/src/projects/index.ts +1 -0
- package/src/projects/setProjectRetentionPolicy.ts +80 -0
- package/src/traces/getTraces.ts +1 -1
- package/src/traces/index.ts +1 -0
- package/src/traces/transferTraces.ts +89 -0
- package/src/users/getCurrentUser.ts +39 -0
- package/src/users/index.ts +1 -0
package/docs/overview.mdx
CHANGED
|
@@ -3,7 +3,7 @@ title: "Overview"
|
|
|
3
3
|
description: "Typed TypeScript client for Phoenix platform APIs"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
`@arizeai/phoenix-client` is the typed TypeScript client for Phoenix platform APIs. It ships a small root REST client plus focused module entrypoints for prompts, datasets, experiments, spans, sessions, traces, and CI-friendly dataset-backed eval tests.
|
|
6
|
+
`@arizeai/phoenix-client` is the typed TypeScript client for Phoenix platform APIs. It ships a small root REST client plus focused module entrypoints for projects, prompts, datasets, experiments, spans, sessions, traces, users, and CI-friendly dataset-backed eval tests.
|
|
7
7
|
|
|
8
8
|
## Install
|
|
9
9
|
|
|
@@ -37,12 +37,14 @@ That gives the agent version-matched docs plus the exact implementation and gene
|
|
|
37
37
|
| Import | Purpose |
|
|
38
38
|
|--------|---------|
|
|
39
39
|
| `@arizeai/phoenix-client` | `createClient`, generated OpenAPI types, config helpers |
|
|
40
|
+
| `@arizeai/phoenix-client/projects` | Project listing and retention-policy assignment |
|
|
40
41
|
| `@arizeai/phoenix-client/prompts` | Prompt CRUD plus `toSDK` conversion |
|
|
41
42
|
| `@arizeai/phoenix-client/datasets` | Dataset creation and retrieval |
|
|
42
43
|
| `@arizeai/phoenix-client/experiments` | Experiment execution and lifecycle |
|
|
43
44
|
| `@arizeai/phoenix-client/spans` | Span search, notes, and span/document annotations |
|
|
44
45
|
| `@arizeai/phoenix-client/sessions` | Session listing, retrieval, and session annotations |
|
|
45
|
-
| `@arizeai/phoenix-client/traces` | Project trace retrieval and trace annotations |
|
|
46
|
+
| `@arizeai/phoenix-client/traces` | Project trace retrieval, transfers, and trace annotations |
|
|
47
|
+
| `@arizeai/phoenix-client/users` | Current authenticated user retrieval |
|
|
46
48
|
| `@arizeai/phoenix-client/vitest` | Vitest entrypoint for dataset-backed eval tests |
|
|
47
49
|
| `@arizeai/phoenix-client/vitest/reporter` | Vitest reporter for Phoenix eval summaries |
|
|
48
50
|
| `@arizeai/phoenix-client/jest` | Jest entrypoint for dataset-backed eval tests |
|
|
@@ -158,10 +160,10 @@ Prefer this layer when:
|
|
|
158
160
|
|
|
159
161
|
## Where To Start
|
|
160
162
|
|
|
161
|
-
- [Prompts](./prompts), [Datasets](./datasets), [Experiments](./experiments) — higher-level workflows
|
|
163
|
+
- [Projects](./projects), [Prompts](./prompts), [Datasets](./datasets), [Experiments](./experiments) — higher-level workflows
|
|
162
164
|
- [Annotations](./annotations) — annotation concepts, then [Span](./span-annotations), [Document](./document-annotations), and [Session](./session-annotations) annotations for detailed usage
|
|
163
165
|
- [CI Eval Tests](./ci-evals) — Vitest/Jest eval suites backed by Phoenix datasets and experiments
|
|
164
|
-
- [Spans](./spans), [Sessions](./sessions), [Traces](./traces) — retrieval and maintenance
|
|
166
|
+
- [Spans](./spans), [Sessions](./sessions), [Traces](./traces), [Users](./users) — retrieval and maintenance
|
|
165
167
|
|
|
166
168
|
<section className="hidden" data-agent-context="source-map" aria-label="Source map">
|
|
167
169
|
<h2>Source Map</h2>
|
|
@@ -171,12 +173,14 @@ Prefer this layer when:
|
|
|
171
173
|
<li><code>src/config.ts</code></li>
|
|
172
174
|
<li><code>src/__generated__/api/v1.ts</code></li>
|
|
173
175
|
<li><code>src/types/core.ts</code></li>
|
|
176
|
+
<li><code>src/projects/</code></li>
|
|
174
177
|
<li><code>src/prompts/</code></li>
|
|
175
178
|
<li><code>src/datasets/</code></li>
|
|
176
179
|
<li><code>src/experiments/</code></li>
|
|
177
180
|
<li><code>src/spans/</code></li>
|
|
178
181
|
<li><code>src/sessions/</code></li>
|
|
179
182
|
<li><code>src/traces/</code></li>
|
|
183
|
+
<li><code>src/users/</code></li>
|
|
180
184
|
<li><code>src/vitest/</code></li>
|
|
181
185
|
<li><code>src/jest/</code></li>
|
|
182
186
|
<li><code>src/testing/</code></li>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Projects"
|
|
3
|
+
description: "List projects and manage project retention-policy assignments"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The projects module lists Phoenix projects and assigns existing trace retention policies to them.
|
|
7
|
+
|
|
8
|
+
<section className="hidden" data-agent-context="relevant-source-files" aria-label="Relevant source files">
|
|
9
|
+
<h2>Relevant Source Files</h2>
|
|
10
|
+
<ul>
|
|
11
|
+
<li><code>src/projects/getProjects.ts</code></li>
|
|
12
|
+
<li><code>src/projects/setProjectRetentionPolicy.ts</code></li>
|
|
13
|
+
<li><code>src/types/projects.ts</code></li>
|
|
14
|
+
</ul>
|
|
15
|
+
</section>
|
|
16
|
+
|
|
17
|
+
## List Projects
|
|
18
|
+
|
|
19
|
+
`getProjects` handles cursor pagination automatically. Use `nameContains` for a case-insensitive, server-side substring filter.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { getProjects } from "@arizeai/phoenix-client/projects";
|
|
23
|
+
|
|
24
|
+
const projects = await getProjects({ nameContains: "support" });
|
|
25
|
+
|
|
26
|
+
for (const project of projects) {
|
|
27
|
+
console.log(`${project.name} (${project.id})`);
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Assign A Retention Policy
|
|
32
|
+
|
|
33
|
+
`setProjectRetentionPolicy` accepts a project name or project GlobalID and the GlobalID of an existing trace retention policy.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { setProjectRetentionPolicy } from "@arizeai/phoenix-client/projects";
|
|
37
|
+
|
|
38
|
+
const assignment = await setProjectRetentionPolicy({
|
|
39
|
+
projectName: "support-bot",
|
|
40
|
+
policyId: "UHJvamVjdFRyYWNlUmV0ZW50aW9uUG9saWN5OjI=",
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
console.log(assignment.project_id, assignment.policy_id);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
You can select the project with `projectName`, `projectId`, or the shorthand `project`. `projectId` must be the project's GlobalID.
|
|
47
|
+
|
|
48
|
+
This helper only changes which existing retention policy the project uses. It does not create, read, update, or delete retention policies; policy CRUD is outside the TypeScript client's projects helper.
|
|
49
|
+
|
|
50
|
+
## Reset To The Default Policy
|
|
51
|
+
|
|
52
|
+
Pass `null` as `policyId` to remove the explicit assignment and return the project to Phoenix's default retention policy.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
await setProjectRetentionPolicy({
|
|
56
|
+
projectId: "UHJvamVjdDox",
|
|
57
|
+
policyId: null,
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Assigning or resetting a retention policy requires an admin when authentication is enabled. Invalid policy GlobalIDs produce a `422` response, while callers without permission receive `403`; both are surfaced as `HttpError` instances by the client.
|
|
62
|
+
|
|
63
|
+
<section className="hidden" data-agent-context="source-map" aria-label="Source map">
|
|
64
|
+
<h2>Source Map</h2>
|
|
65
|
+
<ul>
|
|
66
|
+
<li><code>src/projects/getProjects.ts</code></li>
|
|
67
|
+
<li><code>src/projects/setProjectRetentionPolicy.ts</code></li>
|
|
68
|
+
<li><code>src/projects/index.ts</code></li>
|
|
69
|
+
<li><code>src/types/projects.ts</code></li>
|
|
70
|
+
</ul>
|
|
71
|
+
</section>
|
package/docs/traces.mdx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Traces"
|
|
3
|
-
description: "Retrieve
|
|
3
|
+
description: "Retrieve, move, and annotate traces with @arizeai/phoenix-client"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The traces module provides trace retrieval and trace-level annotation functions.
|
|
6
|
+
The traces module provides trace retrieval, project transfer, and trace-level annotation functions.
|
|
7
7
|
|
|
8
8
|
<section className="hidden" data-agent-context="relevant-source-files" aria-label="Relevant source files">
|
|
9
9
|
<h2>Relevant Source Files</h2>
|
|
@@ -18,6 +18,9 @@ The traces module provides trace retrieval and trace-level annotation functions.
|
|
|
18
18
|
<li>
|
|
19
19
|
<code>src/traces/logTraceAnnotations.ts</code> for batched annotation writes
|
|
20
20
|
</li>
|
|
21
|
+
<li>
|
|
22
|
+
<code>src/traces/transferTraces.ts</code> for moving traces between projects
|
|
23
|
+
</li>
|
|
21
24
|
<li>
|
|
22
25
|
<code>src/traces/types.ts</code> for the <code>TraceAnnotation</code> type
|
|
23
26
|
</li>
|
|
@@ -65,6 +68,28 @@ console.log(result.nextCursor);
|
|
|
65
68
|
- Set `includeSpans` when you need a trace-centric fetch that also contains span details
|
|
66
69
|
- `project` accepts `{ project }`, `{ projectId }`, or `{ projectName }`
|
|
67
70
|
|
|
71
|
+
## Move Traces To Another Project
|
|
72
|
+
|
|
73
|
+
Use `transferTraces` to move one or more traces from their current project to a destination project. This operation **moves rather than copies** the traces: after a successful transfer, they no longer appear in the source project.
|
|
74
|
+
|
|
75
|
+
All traces in one call must currently belong to the same source project. Each trace identifier can be either an OpenTelemetry trace ID or a Phoenix trace GlobalID, and the destination can be either a project name or project GlobalID.
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { transferTraces } from "@arizeai/phoenix-client/traces";
|
|
79
|
+
|
|
80
|
+
const result = await transferTraces({
|
|
81
|
+
traceIdentifiers: ["8f3a...", "VHJhY2U6Mg=="],
|
|
82
|
+
destinationProjectIdentifier: "production",
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
console.log(`Moved ${result.transferredTraceCount} traces`);
|
|
86
|
+
console.log(`Destination project: ${result.destinationProjectId}`);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The result contains the number of distinct traces moved and the resolved GlobalID of the destination project. Phoenix rejects an empty list, trace or project identifiers that do not resolve, and requests that combine traces from multiple source projects.
|
|
90
|
+
|
|
91
|
+
`transferTraces` requires Phoenix server 20.4.0 or newer.
|
|
92
|
+
|
|
68
93
|
## Annotate a Single Trace
|
|
69
94
|
|
|
70
95
|
Use `addTraceAnnotation` to attach a label, score, or explanation to one trace. If you supply an `identifier`, Phoenix upserts the annotation when an annotation with that identifier already exists.
|
|
@@ -128,6 +153,7 @@ for (const r of results) {
|
|
|
128
153
|
<li><code>src/traces/getTraces.ts</code></li>
|
|
129
154
|
<li><code>src/traces/addTraceAnnotation.ts</code></li>
|
|
130
155
|
<li><code>src/traces/logTraceAnnotations.ts</code></li>
|
|
156
|
+
<li><code>src/traces/transferTraces.ts</code></li>
|
|
131
157
|
<li><code>src/traces/types.ts</code></li>
|
|
132
158
|
<li><code>src/types/projects.ts</code></li>
|
|
133
159
|
</ul>
|
package/docs/users.mdx
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Users"
|
|
3
|
+
description: "Get the current Phoenix user with @arizeai/phoenix-client"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The users module identifies the user associated with the client's current credentials.
|
|
7
|
+
|
|
8
|
+
## Get The Current User
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
import { getCurrentUser } from "@arizeai/phoenix-client/users";
|
|
12
|
+
|
|
13
|
+
const user = await getCurrentUser();
|
|
14
|
+
|
|
15
|
+
if (user.auth_method === "ANONYMOUS") {
|
|
16
|
+
console.log("Authentication is disabled");
|
|
17
|
+
} else {
|
|
18
|
+
console.log(`${user.username} has the ${user.role} role`);
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`getCurrentUser()` returns the generated Phoenix API user union. Authenticated deployments return a local, OAuth 2, or LDAP user profile. When authentication is disabled, it returns `{ auth_method: "ANONYMOUS" }`. Invalid credentials reject with an `HttpError` whose `status` is `401`; other authorization failures retain their HTTP status as well.
|
|
23
|
+
|
|
24
|
+
Pass a client explicitly when you need custom configuration:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { createClient } from "@arizeai/phoenix-client";
|
|
28
|
+
import { getCurrentUser } from "@arizeai/phoenix-client/users";
|
|
29
|
+
|
|
30
|
+
const client = createClient({
|
|
31
|
+
options: { baseUrl: "https://phoenix.example.com" },
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const user = await getCurrentUser({ client });
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
<section className="hidden" data-agent-context="source-map" aria-label="Source map">
|
|
38
|
+
<h2>Source Map</h2>
|
|
39
|
+
<ul>
|
|
40
|
+
<li><code>src/users/getCurrentUser.ts</code></li>
|
|
41
|
+
<li><code>src/users/index.ts</code></li>
|
|
42
|
+
<li><code>src/__generated__/api/v1.ts</code></li>
|
|
43
|
+
</ul>
|
|
44
|
+
</section>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arizeai/phoenix-client",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.7.0",
|
|
4
4
|
"description": "A client for the Phoenix API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"arize",
|
|
@@ -57,6 +57,10 @@
|
|
|
57
57
|
"import": "./dist/esm/projects/index.js",
|
|
58
58
|
"require": "./dist/src/projects/index.js"
|
|
59
59
|
},
|
|
60
|
+
"./users": {
|
|
61
|
+
"import": "./dist/esm/users/index.js",
|
|
62
|
+
"require": "./dist/src/users/index.js"
|
|
63
|
+
},
|
|
60
64
|
"./traces": {
|
|
61
65
|
"import": "./dist/esm/traces/index.js",
|
|
62
66
|
"require": "./dist/src/traces/index.js"
|
|
@@ -129,7 +133,7 @@
|
|
|
129
133
|
"@anthropic-ai/sdk": "^0.35.0",
|
|
130
134
|
"ai": "^7.0.0",
|
|
131
135
|
"jest": ">=27",
|
|
132
|
-
"openai": "^6.10.0",
|
|
136
|
+
"openai": "^6.10.0 || ^7.0.0",
|
|
133
137
|
"vitest": ">=1"
|
|
134
138
|
},
|
|
135
139
|
"peerDependenciesMeta": {
|
|
@@ -9987,7 +9987,7 @@ export interface operations {
|
|
|
9987
9987
|
order?: "asc" | "desc";
|
|
9988
9988
|
/** @description Maximum number of traces to return */
|
|
9989
9989
|
limit?: number;
|
|
9990
|
-
/** @description Pagination cursor
|
|
9990
|
+
/** @description Pagination cursor returned by a previous request */
|
|
9991
9991
|
cursor?: string | null;
|
|
9992
9992
|
/** @description If true, include full span details for each trace. This significantly increases response size and query latency, especially with large page sizes. Prefer fetching spans lazily for individual traces when possible. */
|
|
9993
9993
|
include_spans?: boolean;
|
|
@@ -98,6 +98,13 @@ export const LIST_PROJECT_TRACES: RouteRequirement = {
|
|
|
98
98
|
minServerVersion: [13, 15, 0],
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
+
export const TRANSFER_TRACES: RouteRequirement = {
|
|
102
|
+
kind: "route",
|
|
103
|
+
method: "POST",
|
|
104
|
+
path: "/v1/traces/transfer",
|
|
105
|
+
minServerVersion: [20, 4, 0],
|
|
106
|
+
};
|
|
107
|
+
|
|
101
108
|
export const GET_SPANS_BY_ATTRIBUTE: ParameterRequirement = {
|
|
102
109
|
kind: "parameter",
|
|
103
110
|
parameterName: "attribute",
|
|
@@ -227,6 +234,7 @@ export const ALL_REQUIREMENTS: readonly CapabilityRequirement[] = [
|
|
|
227
234
|
GET_SPANS_FILTERS,
|
|
228
235
|
GET_SPANS_BY_ATTRIBUTE,
|
|
229
236
|
LIST_PROJECT_TRACES,
|
|
237
|
+
TRANSFER_TRACES,
|
|
230
238
|
DATASET_UPLOAD_EXAMPLE_IDS,
|
|
231
239
|
ADD_TRACE_NOTE_IDENTIFIER,
|
|
232
240
|
ADD_SPAN_NOTE_IDENTIFIER,
|
package/src/projects/index.ts
CHANGED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import invariant from "tiny-invariant";
|
|
2
|
+
|
|
3
|
+
import type { components } from "../__generated__/api/v1";
|
|
4
|
+
import { createClient } from "../client";
|
|
5
|
+
import type { ClientFn } from "../types/core";
|
|
6
|
+
import type { ProjectIdentifier } from "../types/projects";
|
|
7
|
+
import { resolveProjectIdentifier } from "../types/projects";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The retention-policy assignment returned for a project.
|
|
11
|
+
*/
|
|
12
|
+
export type ProjectRetentionPolicyAssignment =
|
|
13
|
+
components["schemas"]["ProjectRetentionPolicyData"];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Parameters for assigning or resetting a project's retention policy.
|
|
17
|
+
*/
|
|
18
|
+
export type SetProjectRetentionPolicyParams = ClientFn &
|
|
19
|
+
ProjectIdentifier & {
|
|
20
|
+
/**
|
|
21
|
+
* The GlobalID of an existing trace retention policy, or `null` to reset
|
|
22
|
+
* the project to the default policy.
|
|
23
|
+
*/
|
|
24
|
+
policyId: string | null;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Assign an existing trace retention policy to a project, or reset the project
|
|
29
|
+
* to the default policy.
|
|
30
|
+
*
|
|
31
|
+
* This helper only changes the project's assignment. It does not create,
|
|
32
|
+
* retrieve, update, or delete retention policies.
|
|
33
|
+
*
|
|
34
|
+
* @param params - The project and policy assignment.
|
|
35
|
+
* @param params.project - A project name or GlobalID.
|
|
36
|
+
* @param params.projectId - A project GlobalID.
|
|
37
|
+
* @param params.projectName - A project name.
|
|
38
|
+
* @param params.policyId - An existing policy GlobalID, or `null` to reset.
|
|
39
|
+
* @param params.client - An optional Phoenix client instance.
|
|
40
|
+
* @returns The project's resulting retention-policy assignment.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import { setProjectRetentionPolicy } from "@arizeai/phoenix-client/projects";
|
|
45
|
+
*
|
|
46
|
+
* await setProjectRetentionPolicy({
|
|
47
|
+
* projectName: "support-bot",
|
|
48
|
+
* policyId: "UHJvamVjdFRyYWNlUmV0ZW50aW9uUG9saWN5OjI=",
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* await setProjectRetentionPolicy({
|
|
52
|
+
* projectId: "UHJvamVjdDox",
|
|
53
|
+
* policyId: null,
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export async function setProjectRetentionPolicy(
|
|
58
|
+
params: SetProjectRetentionPolicyParams
|
|
59
|
+
): Promise<ProjectRetentionPolicyAssignment> {
|
|
60
|
+
const client = params.client ?? createClient();
|
|
61
|
+
const projectIdentifier = resolveProjectIdentifier(params);
|
|
62
|
+
|
|
63
|
+
const { data, error } = await client.PATCH(
|
|
64
|
+
"/v1/projects/{project_identifier}/retention",
|
|
65
|
+
{
|
|
66
|
+
params: {
|
|
67
|
+
path: {
|
|
68
|
+
project_identifier: projectIdentifier,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
body: {
|
|
72
|
+
policy_id: params.policyId,
|
|
73
|
+
},
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
if (error) throw error;
|
|
78
|
+
invariant(data?.data, "Failed to set project retention policy");
|
|
79
|
+
return data.data;
|
|
80
|
+
}
|
package/src/traces/getTraces.ts
CHANGED
|
@@ -22,7 +22,7 @@ export interface GetTracesParams extends ClientFn {
|
|
|
22
22
|
order?: "asc" | "desc";
|
|
23
23
|
/** Maximum number of traces to return */
|
|
24
24
|
limit?: number;
|
|
25
|
-
/** Pagination cursor
|
|
25
|
+
/** Pagination cursor */
|
|
26
26
|
cursor?: string | null;
|
|
27
27
|
/** If true, include full span details for each trace */
|
|
28
28
|
includeSpans?: boolean;
|
package/src/traces/index.ts
CHANGED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createClient } from "../client";
|
|
2
|
+
import { TRANSFER_TRACES } from "../constants/serverRequirements";
|
|
3
|
+
import type { ClientFn } from "../types/core";
|
|
4
|
+
import { ensureServerCapability } from "../utils/serverVersionUtils";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Parameters for moving traces to another project.
|
|
8
|
+
*/
|
|
9
|
+
export interface TransferTracesParams extends ClientFn {
|
|
10
|
+
/**
|
|
11
|
+
* Trace GlobalIDs or OpenTelemetry trace IDs to move. All traces must
|
|
12
|
+
* currently belong to the same source project.
|
|
13
|
+
*/
|
|
14
|
+
traceIdentifiers: string[];
|
|
15
|
+
/**
|
|
16
|
+
* The destination project name or GlobalID.
|
|
17
|
+
*/
|
|
18
|
+
destinationProjectIdentifier: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The result of moving traces to another project.
|
|
23
|
+
*/
|
|
24
|
+
export interface TransferTracesResult {
|
|
25
|
+
/** The number of distinct traces moved. */
|
|
26
|
+
transferredTraceCount: number;
|
|
27
|
+
/** The destination project's GlobalID. */
|
|
28
|
+
destinationProjectId: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Move traces from one project to another.
|
|
33
|
+
*
|
|
34
|
+
* This operation re-parents the traces; it does not copy them. After the move,
|
|
35
|
+
* the traces no longer appear in their original project. Every trace must
|
|
36
|
+
* currently belong to the same source project.
|
|
37
|
+
*
|
|
38
|
+
* @param params - The parameters for moving traces.
|
|
39
|
+
* @param params.traceIdentifiers - Trace GlobalIDs or OpenTelemetry trace IDs to move.
|
|
40
|
+
* @param params.destinationProjectIdentifier - The destination project name or GlobalID.
|
|
41
|
+
* @returns The number of traces moved and the destination project's GlobalID.
|
|
42
|
+
* @throws {RangeError} If no trace identifiers are provided.
|
|
43
|
+
* @throws {HttpError} If a trace or destination project is missing, the traces
|
|
44
|
+
* belong to multiple source projects, or the transfer otherwise fails.
|
|
45
|
+
*
|
|
46
|
+
* @requires Phoenix server >= 20.4.0
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* import { transferTraces } from "@arizeai/phoenix-client/traces";
|
|
51
|
+
*
|
|
52
|
+
* const result = await transferTraces({
|
|
53
|
+
* traceIdentifiers: ["8f3a...", "VHJhY2U6Mg=="],
|
|
54
|
+
* destinationProjectIdentifier: "production",
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* console.log(result.transferredTraceCount);
|
|
58
|
+
* console.log(result.destinationProjectId);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export async function transferTraces({
|
|
62
|
+
client: _client,
|
|
63
|
+
traceIdentifiers,
|
|
64
|
+
destinationProjectIdentifier,
|
|
65
|
+
}: TransferTracesParams): Promise<TransferTracesResult> {
|
|
66
|
+
if (traceIdentifiers.length === 0) {
|
|
67
|
+
throw new RangeError("At least one trace identifier is required");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const client = _client ?? createClient();
|
|
71
|
+
await ensureServerCapability({ client, requirement: TRANSFER_TRACES });
|
|
72
|
+
|
|
73
|
+
const { data, error } = await client.POST("/v1/traces/transfer", {
|
|
74
|
+
body: {
|
|
75
|
+
trace_identifiers: traceIdentifiers,
|
|
76
|
+
destination_project_identifier: destinationProjectIdentifier,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
if (error) throw error;
|
|
81
|
+
if (!data?.data) {
|
|
82
|
+
throw new Error("Failed to transfer traces: no data returned");
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
transferredTraceCount: data.data.transferred_trace_count,
|
|
87
|
+
destinationProjectId: data.data.destination_project_id,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import invariant from "tiny-invariant";
|
|
2
|
+
|
|
3
|
+
import type { components } from "../__generated__/api/v1";
|
|
4
|
+
import { createClient } from "../client";
|
|
5
|
+
import type { ClientFn } from "../types/core";
|
|
6
|
+
|
|
7
|
+
/** The user profile returned for the current Phoenix client credentials. */
|
|
8
|
+
export type CurrentUser =
|
|
9
|
+
components["schemas"]["GetViewerResponseBody"]["data"];
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Get the currently authenticated user.
|
|
13
|
+
*
|
|
14
|
+
* When authentication is disabled, Phoenix returns an anonymous user with
|
|
15
|
+
* `auth_method: "ANONYMOUS"`.
|
|
16
|
+
*
|
|
17
|
+
* @param params - The parameters for fetching the current user.
|
|
18
|
+
* @param params.client - An optional Phoenix client instance.
|
|
19
|
+
* @returns The current user's generated API profile shape.
|
|
20
|
+
* @throws {HttpError} If the request is not authenticated or is forbidden.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { getCurrentUser } from "@arizeai/phoenix-client/users";
|
|
25
|
+
*
|
|
26
|
+
* const user = await getCurrentUser();
|
|
27
|
+
* console.log(user.auth_method);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export async function getCurrentUser({
|
|
31
|
+
client: _client,
|
|
32
|
+
}: ClientFn = {}): Promise<CurrentUser> {
|
|
33
|
+
const client = _client ?? createClient();
|
|
34
|
+
const { data, error } = await client.GET("/v1/user");
|
|
35
|
+
|
|
36
|
+
if (error) throw error;
|
|
37
|
+
invariant(data?.data, "Failed to get current user");
|
|
38
|
+
return data.data;
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./getCurrentUser";
|