@arizeai/phoenix-client 6.3.0 → 6.5.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.
Files changed (147) hide show
  1. package/dist/esm/__generated__/api/v1.d.ts +149 -0
  2. package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
  3. package/dist/esm/client.d.ts +16 -0
  4. package/dist/esm/client.d.ts.map +1 -1
  5. package/dist/esm/client.js +55 -0
  6. package/dist/esm/client.js.map +1 -1
  7. package/dist/esm/constants/serverRequirements.d.ts +28 -0
  8. package/dist/esm/constants/serverRequirements.d.ts.map +1 -0
  9. package/dist/esm/constants/serverRequirements.js +65 -0
  10. package/dist/esm/constants/serverRequirements.js.map +1 -0
  11. package/dist/esm/sessions/addSessionAnnotation.d.ts +2 -0
  12. package/dist/esm/sessions/addSessionAnnotation.d.ts.map +1 -1
  13. package/dist/esm/sessions/addSessionAnnotation.js +5 -0
  14. package/dist/esm/sessions/addSessionAnnotation.js.map +1 -1
  15. package/dist/esm/sessions/deleteSession.d.ts +2 -0
  16. package/dist/esm/sessions/deleteSession.d.ts.map +1 -1
  17. package/dist/esm/sessions/deleteSession.js +5 -0
  18. package/dist/esm/sessions/deleteSession.js.map +1 -1
  19. package/dist/esm/sessions/deleteSessions.d.ts +2 -0
  20. package/dist/esm/sessions/deleteSessions.d.ts.map +1 -1
  21. package/dist/esm/sessions/deleteSessions.js +5 -0
  22. package/dist/esm/sessions/deleteSessions.js.map +1 -1
  23. package/dist/esm/sessions/getSession.d.ts +2 -0
  24. package/dist/esm/sessions/getSession.d.ts.map +1 -1
  25. package/dist/esm/sessions/getSession.js +5 -0
  26. package/dist/esm/sessions/getSession.js.map +1 -1
  27. package/dist/esm/sessions/getSessionTurns.d.ts +72 -0
  28. package/dist/esm/sessions/getSessionTurns.d.ts.map +1 -0
  29. package/dist/esm/sessions/getSessionTurns.js +127 -0
  30. package/dist/esm/sessions/getSessionTurns.js.map +1 -0
  31. package/dist/esm/sessions/index.d.ts +1 -0
  32. package/dist/esm/sessions/index.d.ts.map +1 -1
  33. package/dist/esm/sessions/index.js +1 -0
  34. package/dist/esm/sessions/index.js.map +1 -1
  35. package/dist/esm/sessions/listSessions.d.ts +2 -0
  36. package/dist/esm/sessions/listSessions.d.ts.map +1 -1
  37. package/dist/esm/sessions/listSessions.js +5 -0
  38. package/dist/esm/sessions/listSessions.js.map +1 -1
  39. package/dist/esm/sessions/logSessionAnnotations.d.ts +2 -0
  40. package/dist/esm/sessions/logSessionAnnotations.d.ts.map +1 -1
  41. package/dist/esm/sessions/logSessionAnnotations.js +5 -0
  42. package/dist/esm/sessions/logSessionAnnotations.js.map +1 -1
  43. package/dist/esm/spans/getSpans.d.ts +2 -0
  44. package/dist/esm/spans/getSpans.d.ts.map +1 -1
  45. package/dist/esm/spans/getSpans.js +7 -0
  46. package/dist/esm/spans/getSpans.js.map +1 -1
  47. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  48. package/dist/esm/types/semver.d.ts +3 -0
  49. package/dist/esm/types/semver.d.ts.map +1 -0
  50. package/dist/esm/types/semver.js +2 -0
  51. package/dist/esm/types/semver.js.map +1 -0
  52. package/dist/esm/types/serverRequirements.d.ts +39 -0
  53. package/dist/esm/types/serverRequirements.d.ts.map +1 -0
  54. package/dist/esm/types/serverRequirements.js +14 -0
  55. package/dist/esm/types/serverRequirements.js.map +1 -0
  56. package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
  57. package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
  58. package/dist/esm/utils/semverUtils.d.ts +21 -0
  59. package/dist/esm/utils/semverUtils.d.ts.map +1 -0
  60. package/dist/esm/utils/semverUtils.js +52 -0
  61. package/dist/esm/utils/semverUtils.js.map +1 -0
  62. package/dist/esm/utils/serverVersionUtils.d.ts +47 -0
  63. package/dist/esm/utils/serverVersionUtils.d.ts.map +1 -0
  64. package/dist/esm/utils/serverVersionUtils.js +64 -0
  65. package/dist/esm/utils/serverVersionUtils.js.map +1 -0
  66. package/dist/src/__generated__/api/v1.d.ts +149 -0
  67. package/dist/src/__generated__/api/v1.d.ts.map +1 -1
  68. package/dist/src/client.d.ts +16 -0
  69. package/dist/src/client.d.ts.map +1 -1
  70. package/dist/src/client.js +57 -2
  71. package/dist/src/client.js.map +1 -1
  72. package/dist/src/constants/serverRequirements.d.ts +28 -0
  73. package/dist/src/constants/serverRequirements.d.ts.map +1 -0
  74. package/dist/src/constants/serverRequirements.js +68 -0
  75. package/dist/src/constants/serverRequirements.js.map +1 -0
  76. package/dist/src/sessions/addSessionAnnotation.d.ts +2 -0
  77. package/dist/src/sessions/addSessionAnnotation.d.ts.map +1 -1
  78. package/dist/src/sessions/addSessionAnnotation.js +5 -0
  79. package/dist/src/sessions/addSessionAnnotation.js.map +1 -1
  80. package/dist/src/sessions/deleteSession.d.ts +2 -0
  81. package/dist/src/sessions/deleteSession.d.ts.map +1 -1
  82. package/dist/src/sessions/deleteSession.js +5 -0
  83. package/dist/src/sessions/deleteSession.js.map +1 -1
  84. package/dist/src/sessions/deleteSessions.d.ts +2 -0
  85. package/dist/src/sessions/deleteSessions.d.ts.map +1 -1
  86. package/dist/src/sessions/deleteSessions.js +5 -0
  87. package/dist/src/sessions/deleteSessions.js.map +1 -1
  88. package/dist/src/sessions/getSession.d.ts +2 -0
  89. package/dist/src/sessions/getSession.d.ts.map +1 -1
  90. package/dist/src/sessions/getSession.js +5 -0
  91. package/dist/src/sessions/getSession.js.map +1 -1
  92. package/dist/src/sessions/getSessionTurns.d.ts +72 -0
  93. package/dist/src/sessions/getSessionTurns.d.ts.map +1 -0
  94. package/dist/src/sessions/getSessionTurns.js +124 -0
  95. package/dist/src/sessions/getSessionTurns.js.map +1 -0
  96. package/dist/src/sessions/index.d.ts +1 -0
  97. package/dist/src/sessions/index.d.ts.map +1 -1
  98. package/dist/src/sessions/index.js +1 -0
  99. package/dist/src/sessions/index.js.map +1 -1
  100. package/dist/src/sessions/listSessions.d.ts +2 -0
  101. package/dist/src/sessions/listSessions.d.ts.map +1 -1
  102. package/dist/src/sessions/listSessions.js +5 -0
  103. package/dist/src/sessions/listSessions.js.map +1 -1
  104. package/dist/src/sessions/logSessionAnnotations.d.ts +2 -0
  105. package/dist/src/sessions/logSessionAnnotations.d.ts.map +1 -1
  106. package/dist/src/sessions/logSessionAnnotations.js +5 -0
  107. package/dist/src/sessions/logSessionAnnotations.js.map +1 -1
  108. package/dist/src/spans/getSpans.d.ts +2 -0
  109. package/dist/src/spans/getSpans.d.ts.map +1 -1
  110. package/dist/src/spans/getSpans.js +7 -0
  111. package/dist/src/spans/getSpans.js.map +1 -1
  112. package/dist/src/types/semver.d.ts +3 -0
  113. package/dist/src/types/semver.d.ts.map +1 -0
  114. package/dist/src/types/semver.js +3 -0
  115. package/dist/src/types/semver.js.map +1 -0
  116. package/dist/src/types/serverRequirements.d.ts +39 -0
  117. package/dist/src/types/serverRequirements.d.ts.map +1 -0
  118. package/dist/src/types/serverRequirements.js +15 -0
  119. package/dist/src/types/serverRequirements.js.map +1 -0
  120. package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
  121. package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
  122. package/dist/src/utils/semverUtils.d.ts +21 -0
  123. package/dist/src/utils/semverUtils.d.ts.map +1 -0
  124. package/dist/src/utils/semverUtils.js +57 -0
  125. package/dist/src/utils/semverUtils.js.map +1 -0
  126. package/dist/src/utils/serverVersionUtils.d.ts +47 -0
  127. package/dist/src/utils/serverVersionUtils.d.ts.map +1 -0
  128. package/dist/src/utils/serverVersionUtils.js +68 -0
  129. package/dist/src/utils/serverVersionUtils.js.map +1 -0
  130. package/dist/tsconfig.tsbuildinfo +1 -1
  131. package/package.json +1 -1
  132. package/src/__generated__/api/v1.ts +149 -0
  133. package/src/client.ts +61 -0
  134. package/src/constants/serverRequirements.ts +77 -0
  135. package/src/sessions/addSessionAnnotation.ts +5 -0
  136. package/src/sessions/deleteSession.ts +5 -0
  137. package/src/sessions/deleteSessions.ts +5 -0
  138. package/src/sessions/getSession.ts +5 -0
  139. package/src/sessions/getSessionTurns.ts +220 -0
  140. package/src/sessions/index.ts +1 -0
  141. package/src/sessions/listSessions.ts +5 -0
  142. package/src/sessions/logSessionAnnotations.ts +5 -0
  143. package/src/spans/getSpans.ts +7 -0
  144. package/src/types/semver.ts +2 -0
  145. package/src/types/serverRequirements.ts +42 -0
  146. package/src/utils/semverUtils.ts +66 -0
  147. package/src/utils/serverVersionUtils.ts +79 -0
@@ -2,10 +2,12 @@ import invariant from "tiny-invariant";
2
2
 
3
3
  import type { components } from "../__generated__/api/v1";
4
4
  import { createClient } from "../client";
5
+ import { LIST_PROJECT_SESSIONS } from "../constants/serverRequirements";
5
6
  import type { ClientFn } from "../types/core";
6
7
  import type { ProjectIdentifier } from "../types/projects";
7
8
  import { resolveProjectIdentifier } from "../types/projects";
8
9
  import type { Session } from "../types/sessions";
10
+ import { ensureServerCapability } from "../utils/serverVersionUtils";
9
11
  import { toSession } from "./sessionUtils";
10
12
 
11
13
  export type ListSessionsParams = ClientFn & ProjectIdentifier;
@@ -17,6 +19,8 @@ const DEFAULT_PAGE_SIZE = 100;
17
19
  /**
18
20
  * List all sessions for a project with automatic pagination handling.
19
21
  *
22
+ * @requires Phoenix server >= 13.5.0
23
+ *
20
24
  * @example
21
25
  * ```ts
22
26
  * import { listSessions } from "@arizeai/phoenix-client/sessions";
@@ -34,6 +38,7 @@ export async function listSessions(
34
38
  params: ListSessionsParams
35
39
  ): Promise<Session[]> {
36
40
  const client = params.client || createClient();
41
+ await ensureServerCapability({ client, requirement: LIST_PROJECT_SESSIONS });
37
42
  const projectIdentifier = resolveProjectIdentifier(params);
38
43
 
39
44
  const sessions: Session[] = [];
@@ -1,5 +1,7 @@
1
1
  import { createClient } from "../client";
2
+ import { ANNOTATE_SESSIONS } from "../constants/serverRequirements";
2
3
  import type { ClientFn } from "../types/core";
4
+ import { ensureServerCapability } from "../utils/serverVersionUtils";
3
5
  import type { SessionAnnotation } from "./types";
4
6
  import { toSessionAnnotationData } from "./types";
5
7
 
@@ -28,6 +30,8 @@ export interface LogSessionAnnotationsParams extends ClientFn {
28
30
  * @param params - The parameters to log session annotations
29
31
  * @returns The IDs of the created or updated annotations
30
32
  *
33
+ * @requires Phoenix server >= 12.0.0
34
+ *
31
35
  * @example
32
36
  * ```ts
33
37
  * const results = await logSessionAnnotations({
@@ -60,6 +64,7 @@ export async function logSessionAnnotations({
60
64
  sync = false,
61
65
  }: LogSessionAnnotationsParams): Promise<{ id: string }[]> {
62
66
  const client = _client ?? createClient();
67
+ await ensureServerCapability({ client, requirement: ANNOTATE_SESSIONS });
63
68
 
64
69
  const { data, error } = await client.POST("/v1/session_annotations", {
65
70
  params: {
@@ -1,8 +1,10 @@
1
1
  import type { operations } from "../__generated__/api/v1";
2
2
  import { createClient } from "../client";
3
+ import { GET_SPANS_TRACE_IDS } from "../constants/serverRequirements";
3
4
  import type { ClientFn } from "../types/core";
4
5
  import type { ProjectIdentifier } from "../types/projects";
5
6
  import { resolveProjectIdentifier } from "../types/projects";
7
+ import { ensureServerCapability } from "../utils/serverVersionUtils";
6
8
 
7
9
  /**
8
10
  * Parameters to get spans from a project using auto-generated types
@@ -44,6 +46,8 @@ export type GetSpansResult = {
44
46
  * @param params - The parameters to search for spans
45
47
  * @returns A paginated response containing spans and optional next cursor
46
48
  *
49
+ * @requires Phoenix server >= 13.9.0 when filtering by `traceIds`
50
+ *
47
51
  * @example
48
52
  * ```ts
49
53
  * // Get recent spans from a project
@@ -101,6 +105,9 @@ export async function getSpans({
101
105
  parentId,
102
106
  }: GetSpansParams): Promise<GetSpansResult> {
103
107
  const client = _client ?? createClient();
108
+ if (traceIds) {
109
+ await ensureServerCapability({ client, requirement: GET_SPANS_TRACE_IDS });
110
+ }
104
111
  const projectIdentifier = resolveProjectIdentifier(project);
105
112
 
106
113
  const params: NonNullable<operations["getSpans"]["parameters"]["query"]> = {
@@ -0,0 +1,2 @@
1
+ /** A semantic version triple: [major, minor, patch]. */
2
+ export type SemanticVersion = [number, number, number];
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Server capability requirements.
3
+ *
4
+ * A "capability" represents a specific server-side feature — such as an HTTP
5
+ * route or query parameter — that is gated behind a minimum Phoenix server
6
+ * version. Each {@link CapabilityRequirement} declares *what* the capability
7
+ * is and *which* server version first introduced it.
8
+ *
9
+ * The client checks these requirements at call time via
10
+ * {@link ensureServerCapability} so that callers get a clear, actionable error
11
+ * instead of an opaque 404 or 400 from an older server.
12
+ */
13
+
14
+ import type { SemanticVersion } from "./semver";
15
+
16
+ export interface RouteRequirement {
17
+ kind: "route";
18
+ /** HTTP method (e.g. "GET", "POST", "DELETE"). */
19
+ method: string;
20
+ /** URL path template (e.g. "/v1/sessions/{session_id}"). */
21
+ path: string;
22
+ /** Minimum Phoenix server version as [major, minor, patch]. */
23
+ minServerVersion: SemanticVersion;
24
+ /** Optional human-readable description override. */
25
+ description?: string;
26
+ }
27
+
28
+ export interface ParameterRequirement {
29
+ kind: "parameter";
30
+ /** Name of the query/path/header parameter. */
31
+ parameterName: string;
32
+ /** Location of the parameter (e.g. "query", "path", "header"). */
33
+ parameterLocation: string;
34
+ /** The route this parameter belongs to (e.g. "GET /v1/projects/{id}/spans"). */
35
+ route: string;
36
+ /** Minimum Phoenix server version as [major, minor, patch]. */
37
+ minServerVersion: SemanticVersion;
38
+ /** Optional human-readable description override. */
39
+ description?: string;
40
+ }
41
+
42
+ export type CapabilityRequirement = RouteRequirement | ParameterRequirement;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Lightweight semantic version utilities.
3
+ */
4
+
5
+ import type { SemanticVersion } from "../types/semver";
6
+
7
+ // ---------------------------------------------------------------------------
8
+ // Parsing
9
+ // ---------------------------------------------------------------------------
10
+
11
+ /**
12
+ * Parse a semver-like version string (e.g. "13.14.0") into a triple.
13
+ * Returns `null` if the string is not a valid version.
14
+ */
15
+ export function parseSemanticVersion(raw: string): SemanticVersion | null {
16
+ const parts = raw.trim().split(".");
17
+ if (parts.length < 3) return null;
18
+ const major = parseInt(parts[0]!, 10);
19
+ const minor = parseInt(parts[1]!, 10);
20
+ const patch = parseInt(parts[2]!, 10);
21
+ if (
22
+ Number.isNaN(major) ||
23
+ Number.isNaN(minor) ||
24
+ Number.isNaN(patch) ||
25
+ major < 0 ||
26
+ minor < 0 ||
27
+ patch < 0
28
+ ) {
29
+ return null;
30
+ }
31
+ return [major, minor, patch];
32
+ }
33
+
34
+ // ---------------------------------------------------------------------------
35
+ // Formatting
36
+ // ---------------------------------------------------------------------------
37
+
38
+ /**
39
+ * Format a `SemanticVersion` as a `"major.minor.patch"` string.
40
+ */
41
+ export function formatVersion(version: SemanticVersion): string {
42
+ return `${version[0]}.${version[1]}.${version[2]}`;
43
+ }
44
+
45
+ // ---------------------------------------------------------------------------
46
+ // Comparison
47
+ // ---------------------------------------------------------------------------
48
+
49
+ /**
50
+ * Returns `true` if `version` is greater than or equal to `minVersion`.
51
+ */
52
+ export function satisfiesMinVersion({
53
+ version,
54
+ minVersion,
55
+ }: {
56
+ version: SemanticVersion;
57
+ minVersion: SemanticVersion;
58
+ }): boolean {
59
+ const [serverVersionMajor, serverVersionMinor, serverVersionPatch] = version;
60
+ const [minVersionMajor, minVersionMinor, minVersionPatch] = minVersion;
61
+ if (serverVersionMajor !== minVersionMajor)
62
+ return serverVersionMajor > minVersionMajor;
63
+ if (serverVersionMinor !== minVersionMinor)
64
+ return serverVersionMinor > minVersionMinor;
65
+ return serverVersionPatch >= minVersionPatch;
66
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Phoenix server version utilities.
3
+ *
4
+ * Provides guards for capabilities that require a minimum Phoenix **server**
5
+ * version. The server version is detected from the
6
+ * `x-phoenix-server-version` response header or by calling
7
+ * `GET /arize_phoenix_version`.
8
+ *
9
+ * ## Capability guard pattern
10
+ *
11
+ * Each server-side feature that was introduced after the initial release is
12
+ * represented by a {@link CapabilityRequirement} constant (defined in
13
+ * `constants/serverRequirements`). Before calling such a feature, the client
14
+ * passes the requirement to {@link ensureServerCapability}, which compares the
15
+ * connected server's version against the requirement's minimum version and
16
+ * throws a descriptive error when the server is too old. This lets callers
17
+ * see *exactly* which feature is unavailable and which version they need,
18
+ * rather than receiving an opaque HTTP 404 or 400 response.
19
+ */
20
+
21
+ import type { PhoenixClient } from "../client";
22
+ import type { CapabilityRequirement } from "../types/serverRequirements";
23
+ import { formatVersion, satisfiesMinVersion } from "./semverUtils";
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // Capability label
27
+ // ---------------------------------------------------------------------------
28
+
29
+ /**
30
+ * Derive a human-readable label from a structured capability requirement.
31
+ * Uses `description` if provided, otherwise auto-derives from metadata.
32
+ */
33
+ export function capabilityLabel(req: CapabilityRequirement): string {
34
+ if (req.description) return req.description;
35
+ switch (req.kind) {
36
+ case "route":
37
+ return `The ${req.method} ${req.path} route`;
38
+ case "parameter":
39
+ return `The '${req.parameterName}' ${req.parameterLocation} parameter on ${req.route}`;
40
+ }
41
+ }
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // Guards
45
+ // ---------------------------------------------------------------------------
46
+
47
+ /**
48
+ * Check the **Phoenix server version** before allowing a capability to proceed.
49
+ *
50
+ * Throws if the connected Phoenix server is older than the minimum version
51
+ * required by the given capability. Also throws if the server version cannot
52
+ * be determined — this typically means the server is too old to report its
53
+ * version at all and is therefore incompatible with this client.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * import { ensureServerCapability } from "../utils/serverVersionUtils";
58
+ * import { GET_SESSION } from "../constants/serverRequirements";
59
+ *
60
+ * await ensureServerCapability({ client, requirement: GET_SESSION });
61
+ * ```
62
+ */
63
+ export async function ensureServerCapability({
64
+ client,
65
+ requirement,
66
+ }: {
67
+ client: PhoenixClient;
68
+ requirement: CapabilityRequirement;
69
+ }): Promise<void> {
70
+ const version = await client.getServerVersion();
71
+ if (
72
+ !satisfiesMinVersion({ version, minVersion: requirement.minServerVersion })
73
+ ) {
74
+ throw new Error(
75
+ `${capabilityLabel(requirement)} requires Phoenix server >= ${formatVersion(requirement.minServerVersion)}, ` +
76
+ `but connected to server ${formatVersion(version)}. Please upgrade your Phoenix server.`
77
+ );
78
+ }
79
+ }