@arizeai/phoenix-client 6.5.0 → 6.5.1

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 (44) hide show
  1. package/dist/esm/constants/serverRequirements.d.ts +1 -0
  2. package/dist/esm/constants/serverRequirements.d.ts.map +1 -1
  3. package/dist/esm/constants/serverRequirements.js +8 -0
  4. package/dist/esm/constants/serverRequirements.js.map +1 -1
  5. package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -1
  6. package/dist/esm/prompts/sdks/toAI.js +29 -6
  7. package/dist/esm/prompts/sdks/toAI.js.map +1 -1
  8. package/dist/esm/spans/getSpans.d.ts +8 -1
  9. package/dist/esm/spans/getSpans.d.ts.map +1 -1
  10. package/dist/esm/spans/getSpans.js +14 -2
  11. package/dist/esm/spans/getSpans.js.map +1 -1
  12. package/dist/esm/spans/index.d.ts +1 -0
  13. package/dist/esm/spans/index.d.ts.map +1 -1
  14. package/dist/esm/spans/index.js.map +1 -1
  15. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  16. package/dist/esm/types/spans.d.ts +11 -0
  17. package/dist/esm/types/spans.d.ts.map +1 -0
  18. package/dist/esm/types/spans.js +2 -0
  19. package/dist/esm/types/spans.js.map +1 -0
  20. package/dist/src/constants/serverRequirements.d.ts +1 -0
  21. package/dist/src/constants/serverRequirements.d.ts.map +1 -1
  22. package/dist/src/constants/serverRequirements.js +9 -1
  23. package/dist/src/constants/serverRequirements.js.map +1 -1
  24. package/dist/src/prompts/sdks/toAI.d.ts.map +1 -1
  25. package/dist/src/prompts/sdks/toAI.js +28 -7
  26. package/dist/src/prompts/sdks/toAI.js.map +1 -1
  27. package/dist/src/spans/getSpans.d.ts +8 -1
  28. package/dist/src/spans/getSpans.d.ts.map +1 -1
  29. package/dist/src/spans/getSpans.js +13 -1
  30. package/dist/src/spans/getSpans.js.map +1 -1
  31. package/dist/src/spans/index.d.ts +1 -0
  32. package/dist/src/spans/index.d.ts.map +1 -1
  33. package/dist/src/spans/index.js.map +1 -1
  34. package/dist/src/types/spans.d.ts +11 -0
  35. package/dist/src/types/spans.d.ts.map +1 -0
  36. package/dist/src/types/spans.js +3 -0
  37. package/dist/src/types/spans.js.map +1 -0
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +1 -1
  40. package/src/constants/serverRequirements.ts +9 -0
  41. package/src/prompts/sdks/toAI.ts +34 -8
  42. package/src/spans/getSpans.ts +29 -1
  43. package/src/spans/index.ts +1 -0
  44. package/src/types/spans.ts +12 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arizeai/phoenix-client",
3
- "version": "6.5.0",
3
+ "version": "6.5.1",
4
4
  "description": "A client for the Phoenix API",
5
5
  "keywords": [
6
6
  "arize",
@@ -61,6 +61,14 @@ export const GET_SPANS_TRACE_IDS: ParameterRequirement = {
61
61
  minServerVersion: [13, 9, 0],
62
62
  };
63
63
 
64
+ export const GET_SPANS_FILTERS: ParameterRequirement = {
65
+ kind: "parameter",
66
+ parameterName: "span_kind",
67
+ parameterLocation: "query",
68
+ route: "GET /v1/projects/{id}/spans",
69
+ minServerVersion: [13, 15, 0],
70
+ };
71
+
64
72
  /**
65
73
  * Aggregate list of every known capability requirement.
66
74
  *
@@ -74,4 +82,5 @@ export const ALL_REQUIREMENTS: readonly CapabilityRequirement[] = [
74
82
  LIST_PROJECT_SESSIONS,
75
83
  ANNOTATE_SESSIONS,
76
84
  GET_SPANS_TRACE_IDS,
85
+ GET_SPANS_FILTERS,
77
86
  ] as const;
@@ -1,7 +1,12 @@
1
1
  import type { ModelMessage, ToolChoice, ToolSet } from "ai";
2
2
  import invariant from "tiny-invariant";
3
3
 
4
- import { safelyConvertMessageToProvider } from "../../schemas/llm/converters";
4
+ import {
5
+ safelyConvertMessageToProvider,
6
+ safelyConvertToolChoiceToProvider,
7
+ safelyConvertToolDefinitionToProvider,
8
+ } from "../../schemas/llm/converters";
9
+ import { findToolDefinitionName } from "../../schemas/llm/utils";
5
10
  import { formatPromptMessages } from "../../utils/formatPromptMessages";
6
11
  import type { Variables, toSDKParamsBase } from "./types";
7
12
 
@@ -62,19 +67,40 @@ export const toAI = <V extends Variables>({
62
67
  return vercelAIMessage;
63
68
  });
64
69
 
65
- const tools = undefined;
66
- if (prompt.tools?.tools && prompt.tools?.tools.length) {
67
- // eslint-disable-next-line no-console
68
- console.warn(
69
- "Phoenix client does not automatically convert tools to AI SDK tools, please manually convert them."
70
- );
70
+ let tools: ToolSet | undefined;
71
+ if (prompt.tools?.tools && prompt.tools.tools.length > 0) {
72
+ const toolsRecord: Record<string, unknown> = {};
73
+ for (const tool of prompt.tools.tools) {
74
+ const name = findToolDefinitionName(tool);
75
+ invariant(name, "Tool definition name is not valid");
76
+ const converted = safelyConvertToolDefinitionToProvider({
77
+ toolDefinition: tool,
78
+ targetProvider: "VERCEL_AI",
79
+ });
80
+ invariant(converted, "Tool definition is not valid");
81
+ toolsRecord[name] = converted;
82
+ }
83
+ tools =
84
+ Object.keys(toolsRecord).length > 0
85
+ ? (toolsRecord as ToolSet)
86
+ : undefined;
87
+ }
88
+
89
+ let toolChoice: PartialAIParams["toolChoice"];
90
+ if (tools && prompt.tools?.tool_choice) {
91
+ toolChoice =
92
+ safelyConvertToolChoiceToProvider({
93
+ toolChoice: prompt.tools.tool_choice,
94
+ targetProvider: "VERCEL_AI",
95
+ }) ?? undefined;
71
96
  }
72
97
 
73
98
  // combine base and computed params
74
99
  const completionParams: PartialAIParams = {
75
100
  ...baseCompletionParams,
76
101
  messages,
77
- tools,
102
+ ...(tools !== undefined && { tools }),
103
+ ...(toolChoice !== undefined && { toolChoice }),
78
104
  };
79
105
 
80
106
  return completionParams;
@@ -1,9 +1,13 @@
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
+ import {
4
+ GET_SPANS_FILTERS,
5
+ GET_SPANS_TRACE_IDS,
6
+ } from "../constants/serverRequirements";
4
7
  import type { ClientFn } from "../types/core";
5
8
  import type { ProjectIdentifier } from "../types/projects";
6
9
  import { resolveProjectIdentifier } from "../types/projects";
10
+ import type { SpanKindFilter, SpanStatusCode } from "../types/spans";
7
11
  import { ensureServerCapability } from "../utils/serverVersionUtils";
8
12
 
9
13
  /**
@@ -24,6 +28,12 @@ export interface GetSpansParams extends ClientFn {
24
28
  traceIds?: string[] | null;
25
29
  /** Filter by parent span ID. Use `null` or the string `"null"` to get root spans only. */
26
30
  parentId?: string | null;
31
+ /** Filter by span name(s) */
32
+ name?: string | string[] | null;
33
+ /** Filter by span kind(s) (LLM, CHAIN, TOOL, RETRIEVER, etc.) */
34
+ spanKind?: SpanKindFilter | SpanKindFilter[] | null;
35
+ /** Filter by status code(s) (OK, ERROR, UNSET) */
36
+ statusCode?: SpanStatusCode | SpanStatusCode[] | null;
27
37
  }
28
38
 
29
39
  export type GetSpansResponse = operations["getSpans"]["responses"]["200"];
@@ -103,11 +113,17 @@ export async function getSpans({
103
113
  endTime,
104
114
  traceIds,
105
115
  parentId,
116
+ name,
117
+ spanKind,
118
+ statusCode,
106
119
  }: GetSpansParams): Promise<GetSpansResult> {
107
120
  const client = _client ?? createClient();
108
121
  if (traceIds) {
109
122
  await ensureServerCapability({ client, requirement: GET_SPANS_TRACE_IDS });
110
123
  }
124
+ if (name != null || spanKind != null || statusCode != null) {
125
+ await ensureServerCapability({ client, requirement: GET_SPANS_FILTERS });
126
+ }
111
127
  const projectIdentifier = resolveProjectIdentifier(project);
112
128
 
113
129
  const params: NonNullable<operations["getSpans"]["parameters"]["query"]> = {
@@ -135,6 +151,18 @@ export async function getSpans({
135
151
  params.parent_id = parentId === null ? "null" : parentId;
136
152
  }
137
153
 
154
+ if (name) {
155
+ params.name = Array.isArray(name) ? name : [name];
156
+ }
157
+
158
+ if (spanKind) {
159
+ params.span_kind = Array.isArray(spanKind) ? spanKind : [spanKind];
160
+ }
161
+
162
+ if (statusCode) {
163
+ params.status_code = Array.isArray(statusCode) ? statusCode : [statusCode];
164
+ }
165
+
138
166
  const { data, error } = await client.GET(
139
167
  "/v1/projects/{project_identifier}/spans",
140
168
  {
@@ -4,5 +4,6 @@ export * from "./logSpanAnnotations";
4
4
  export * from "./addDocumentAnnotation";
5
5
  export * from "./logDocumentAnnotations";
6
6
  export * from "./getSpans";
7
+ export type { SpanKindFilter, SpanStatusCode } from "../types/spans";
7
8
  export * from "./getSpanAnnotations";
8
9
  export * from "./deleteSpan";
@@ -0,0 +1,12 @@
1
+ import type { OpenInferenceSpanKind } from "@arizeai/openinference-semantic-conventions";
2
+
3
+ /**
4
+ * Status codes for spans.
5
+ */
6
+ export type SpanStatusCode = "OK" | "ERROR" | "UNSET";
7
+
8
+ /**
9
+ * Span kind filter value. Accepts well-known OpenInference span kinds
10
+ * as well as arbitrary strings for forward-compatibility.
11
+ */
12
+ export type SpanKindFilter = OpenInferenceSpanKind | (string & {});