@arizeai/phoenix-client 6.9.1 → 6.9.3

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 (92) hide show
  1. package/dist/esm/__generated__/api/v1.d.ts +1809 -18
  2. package/dist/esm/__generated__/api/v1.d.ts.map +1 -1
  3. package/dist/esm/client.d.ts +1 -0
  4. package/dist/esm/client.d.ts.map +1 -1
  5. package/dist/esm/prompts/sdks/toAI.d.ts.map +1 -1
  6. package/dist/esm/prompts/sdks/toAI.js +31 -11
  7. package/dist/esm/prompts/sdks/toAI.js.map +1 -1
  8. package/dist/esm/prompts/sdks/toAnthropic.d.ts.map +1 -1
  9. package/dist/esm/prompts/sdks/toAnthropic.js +23 -13
  10. package/dist/esm/prompts/sdks/toAnthropic.js.map +1 -1
  11. package/dist/esm/prompts/sdks/toOpenAI.d.ts.map +1 -1
  12. package/dist/esm/prompts/sdks/toOpenAI.js +62 -20
  13. package/dist/esm/prompts/sdks/toOpenAI.js.map +1 -1
  14. package/dist/esm/schemas/llm/constants.d.ts +1 -1
  15. package/dist/esm/schemas/llm/converters.d.ts +4 -4
  16. package/dist/esm/schemas/llm/openai/converters.d.ts +1 -1
  17. package/dist/esm/schemas/llm/openai/messageSchemas.d.ts +1 -1
  18. package/dist/esm/schemas/llm/phoenixPrompt/converters.d.ts +2 -2
  19. package/dist/esm/schemas/llm/phoenixPrompt/converters.js +2 -2
  20. package/dist/esm/schemas/llm/phoenixPrompt/converters.js.map +1 -1
  21. package/dist/esm/schemas/llm/phoenixPrompt/messageSchemas.d.ts +3 -3
  22. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts +2 -2
  23. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -1
  24. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js +1 -1
  25. package/dist/esm/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -1
  26. package/dist/esm/schemas/llm/schemas.d.ts +1 -1
  27. package/dist/esm/schemas/llm/schemas.js +2 -2
  28. package/dist/esm/schemas/llm/schemas.js.map +1 -1
  29. package/dist/esm/schemas/llm/utils.js +2 -2
  30. package/dist/esm/schemas/llm/utils.js.map +1 -1
  31. package/dist/esm/schemas/llm/vercel/messageSchemas.d.ts +1 -1
  32. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  33. package/dist/esm/types/prompts.d.ts +4 -0
  34. package/dist/esm/types/prompts.d.ts.map +1 -1
  35. package/dist/esm/types/prompts.js +6 -1
  36. package/dist/esm/types/prompts.js.map +1 -1
  37. package/dist/esm/utils/formatPromptMessages.d.ts.map +1 -1
  38. package/dist/esm/utils/getPromptBySelector.d.ts +294 -5
  39. package/dist/esm/utils/getPromptBySelector.d.ts.map +1 -1
  40. package/dist/src/__generated__/api/v1.d.ts +1809 -18
  41. package/dist/src/__generated__/api/v1.d.ts.map +1 -1
  42. package/dist/src/client.d.ts +11 -10
  43. package/dist/src/client.d.ts.map +1 -1
  44. package/dist/src/prompts/sdks/toAI.d.ts.map +1 -1
  45. package/dist/src/prompts/sdks/toAI.js +35 -15
  46. package/dist/src/prompts/sdks/toAI.js.map +1 -1
  47. package/dist/src/prompts/sdks/toAnthropic.d.ts.map +1 -1
  48. package/dist/src/prompts/sdks/toAnthropic.js +24 -14
  49. package/dist/src/prompts/sdks/toAnthropic.js.map +1 -1
  50. package/dist/src/prompts/sdks/toOpenAI.d.ts.map +1 -1
  51. package/dist/src/prompts/sdks/toOpenAI.js +63 -21
  52. package/dist/src/prompts/sdks/toOpenAI.js.map +1 -1
  53. package/dist/src/schemas/llm/constants.d.ts +1 -1
  54. package/dist/src/schemas/llm/converters.d.ts +4 -4
  55. package/dist/src/schemas/llm/openai/converters.d.ts +1 -1
  56. package/dist/src/schemas/llm/openai/messageSchemas.d.ts +1 -1
  57. package/dist/src/schemas/llm/phoenixPrompt/converters.d.ts +2 -2
  58. package/dist/src/schemas/llm/phoenixPrompt/converters.js +1 -1
  59. package/dist/src/schemas/llm/phoenixPrompt/converters.js.map +1 -1
  60. package/dist/src/schemas/llm/phoenixPrompt/messageSchemas.d.ts +3 -3
  61. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts +2 -2
  62. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.d.ts.map +1 -1
  63. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js +2 -2
  64. package/dist/src/schemas/llm/phoenixPrompt/toolSchemas.js.map +1 -1
  65. package/dist/src/schemas/llm/schemas.d.ts +1 -1
  66. package/dist/src/schemas/llm/schemas.js +1 -1
  67. package/dist/src/schemas/llm/schemas.js.map +1 -1
  68. package/dist/src/schemas/llm/utils.js +1 -1
  69. package/dist/src/schemas/llm/utils.js.map +1 -1
  70. package/dist/src/schemas/llm/vercel/messageSchemas.d.ts +1 -1
  71. package/dist/src/types/prompts.d.ts +4 -0
  72. package/dist/src/types/prompts.d.ts.map +1 -1
  73. package/dist/src/types/prompts.js +8 -0
  74. package/dist/src/types/prompts.js.map +1 -1
  75. package/dist/src/utils/formatPromptMessages.d.ts.map +1 -1
  76. package/dist/src/utils/getPromptBySelector.d.ts +294 -5
  77. package/dist/src/utils/getPromptBySelector.d.ts.map +1 -1
  78. package/dist/tsconfig.tsbuildinfo +1 -1
  79. package/docs/annotations.mdx +7 -3
  80. package/docs/overview.mdx +1 -1
  81. package/docs/sessions.mdx +20 -0
  82. package/docs/traces.mdx +76 -5
  83. package/package.json +3 -3
  84. package/src/__generated__/api/v1.ts +1809 -18
  85. package/src/prompts/sdks/toAI.ts +33 -11
  86. package/src/prompts/sdks/toAnthropic.ts +26 -15
  87. package/src/prompts/sdks/toOpenAI.ts +66 -23
  88. package/src/schemas/llm/phoenixPrompt/converters.ts +2 -2
  89. package/src/schemas/llm/phoenixPrompt/toolSchemas.ts +16 -13
  90. package/src/schemas/llm/schemas.ts +2 -2
  91. package/src/schemas/llm/utils.ts +2 -2
  92. package/src/types/prompts.ts +13 -0
@@ -7,9 +7,27 @@ import {
7
7
  safelyConvertToolDefinitionToProvider,
8
8
  } from "../../schemas/llm/converters";
9
9
  import { findToolDefinitionName } from "../../schemas/llm/utils";
10
+ import type { PromptToolRaw } from "../../types/prompts";
11
+ import { isPromptToolRaw } from "../../types/prompts";
10
12
  import { formatPromptMessages } from "../../utils/formatPromptMessages";
11
13
  import type { Variables, toSDKParamsBase } from "./types";
12
14
 
15
+ /**
16
+ * Best-effort name for a vendor-passthrough (raw) tool. Vercel AI SDK keys its
17
+ * `tools` record by tool name, so we need a stable string identifier even when
18
+ * the raw payload doesn't carry a conventional `name` field — fall back to
19
+ * `type` (e.g. "web_search") which the Responses-style SDKs use as the key.
20
+ */
21
+ const getRawToolName = (tool: PromptToolRaw): string | null => {
22
+ if (typeof tool.raw.name === "string") {
23
+ return tool.raw.name;
24
+ }
25
+ if (typeof tool.raw.type === "string") {
26
+ return tool.raw.type;
27
+ }
28
+ return null;
29
+ };
30
+
13
31
  export type PartialAIParams = {
14
32
  messages: ModelMessage[];
15
33
  /**
@@ -67,23 +85,27 @@ export const toAI = <V extends Variables>({
67
85
  return vercelAIMessage;
68
86
  });
69
87
 
88
+ const toolsList = prompt.tools?.tools ?? [];
70
89
  let tools: ToolSet | undefined;
71
- if (prompt.tools?.tools && prompt.tools.tools.length > 0) {
90
+ if (toolsList.length > 0) {
72
91
  const toolsRecord: Record<string, unknown> = {};
73
- for (const tool of prompt.tools.tools) {
74
- const name = findToolDefinitionName(tool);
92
+ for (const tool of toolsList) {
93
+ const name = isPromptToolRaw(tool)
94
+ ? getRawToolName(tool)
95
+ : findToolDefinitionName(tool);
75
96
  invariant(name, "Tool definition name is not valid");
76
- const converted = safelyConvertToolDefinitionToProvider({
77
- toolDefinition: tool,
78
- targetProvider: "VERCEL_AI",
79
- });
97
+ const converted = isPromptToolRaw(tool)
98
+ ? tool.raw
99
+ : safelyConvertToolDefinitionToProvider({
100
+ toolDefinition: tool,
101
+ targetProvider: "VERCEL_AI",
102
+ });
80
103
  invariant(converted, "Tool definition is not valid");
81
104
  toolsRecord[name] = converted;
82
105
  }
83
- tools =
84
- Object.keys(toolsRecord).length > 0
85
- ? (toolsRecord as ToolSet)
86
- : undefined;
106
+ if (Object.keys(toolsRecord).length > 0) {
107
+ tools = toolsRecord as ToolSet;
108
+ }
87
109
  }
88
110
 
89
111
  let toolChoice: PartialAIParams["toolChoice"];
@@ -7,6 +7,7 @@ import {
7
7
  safelyConvertToolChoiceToProvider,
8
8
  safelyConvertToolDefinitionToProvider,
9
9
  } from "../../schemas/llm/converters";
10
+ import { isPromptToolRaw } from "../../types/prompts";
10
11
  import { formatPromptMessages } from "../../utils/formatPromptMessages";
11
12
  import type { toSDKParamsBase, Variables } from "./types";
12
13
 
@@ -62,22 +63,32 @@ export const toAnthropic = <V extends Variables = Variables>({
62
63
  return anthropicMessage;
63
64
  });
64
65
 
65
- let tools = prompt.tools?.tools.map((tool) => {
66
- const anthropicToolDefinition = safelyConvertToolDefinitionToProvider({
67
- toolDefinition: tool,
68
- targetProvider: "ANTHROPIC",
69
- });
70
- invariant(anthropicToolDefinition, "Tool definition is not valid");
71
- return anthropicToolDefinition;
72
- });
73
- tools = (tools?.length ?? 0) > 0 ? tools : undefined;
66
+ const toolsList = prompt.tools?.tools ?? [];
67
+ // Cast: raw tools are `Record<string, unknown>` straight from the prompt
68
+ // store. We trust the upstream caller to have stored a shape Anthropic's
69
+ // SDK accepts; no validation here.
70
+ const tools =
71
+ toolsList.length === 0
72
+ ? undefined
73
+ : (toolsList.map((tool) => {
74
+ if (isPromptToolRaw(tool)) {
75
+ return tool.raw;
76
+ }
77
+ const anthropicToolDefinition =
78
+ safelyConvertToolDefinitionToProvider({
79
+ toolDefinition: tool,
80
+ targetProvider: "ANTHROPIC",
81
+ });
82
+ invariant(anthropicToolDefinition, "Tool definition is not valid");
83
+ return anthropicToolDefinition;
84
+ }) as MessageCreateParams["tools"]);
74
85
 
75
- let tool_choice: AnthropicToolChoice | undefined =
76
- safelyConvertToolChoiceToProvider({
77
- toolChoice: prompt?.tools?.tool_choice,
78
- targetProvider: "ANTHROPIC",
79
- }) || undefined;
80
- tool_choice = tools?.length ? tool_choice : undefined;
86
+ const tool_choice: AnthropicToolChoice | undefined = tools
87
+ ? (safelyConvertToolChoiceToProvider({
88
+ toolChoice: prompt?.tools?.tool_choice,
89
+ targetProvider: "ANTHROPIC",
90
+ }) ?? undefined)
91
+ : undefined;
81
92
 
82
93
  // combine base and computed params
83
94
  const completionParams = {
@@ -12,6 +12,7 @@ import {
12
12
  } from "../../schemas/llm/converters";
13
13
  import type { OpenaiToolChoice } from "../../schemas/llm/openai/toolChoiceSchemas";
14
14
  import { phoenixResponseFormatToOpenAI } from "../../schemas/llm/phoenixPrompt/converters";
15
+ import { isPromptToolRaw } from "../../types/prompts";
15
16
  import { formatPromptMessages } from "../../utils/formatPromptMessages";
16
17
  import type { toSDKParamsBase, Variables } from "./types";
17
18
 
@@ -35,14 +36,47 @@ export const toOpenAI = <V extends Variables = Variables>({
35
36
  }: ToOpenAIParams<V>): ChatCompletionCreateParams | null => {
36
37
  try {
37
38
  let invocationParameters: Partial<ChatCompletionCreateParams>;
38
- if (prompt.invocation_parameters.type === "openai") {
39
- invocationParameters = prompt.invocation_parameters.openai;
40
- } else {
41
- // eslint-disable-next-line no-console
42
- console.warn(
43
- "Prompt is not an OpenAI prompt, falling back to default OpenAI invocation parameters"
44
- );
45
- invocationParameters = {};
39
+ switch (prompt.invocation_parameters.type) {
40
+ case "openai":
41
+ invocationParameters = prompt.invocation_parameters.openai;
42
+ break;
43
+ case "azure_openai":
44
+ invocationParameters = prompt.invocation_parameters.azure_openai;
45
+ break;
46
+ case "deepseek":
47
+ invocationParameters = prompt.invocation_parameters.deepseek;
48
+ break;
49
+ case "xai":
50
+ invocationParameters = prompt.invocation_parameters.xai;
51
+ break;
52
+ case "ollama":
53
+ invocationParameters = prompt.invocation_parameters.ollama;
54
+ break;
55
+ case "cerebras":
56
+ invocationParameters = prompt.invocation_parameters.cerebras;
57
+ break;
58
+ case "fireworks":
59
+ invocationParameters = prompt.invocation_parameters.fireworks;
60
+ break;
61
+ case "groq":
62
+ invocationParameters = prompt.invocation_parameters.groq;
63
+ break;
64
+ case "moonshot":
65
+ invocationParameters = prompt.invocation_parameters.moonshot;
66
+ break;
67
+ case "perplexity":
68
+ invocationParameters = prompt.invocation_parameters.perplexity;
69
+ break;
70
+ case "together":
71
+ invocationParameters = prompt.invocation_parameters.together;
72
+ break;
73
+ default:
74
+ // eslint-disable-next-line no-console
75
+ console.warn(
76
+ "Prompt is not an OpenAI-family prompt, falling back to default OpenAI invocation parameters"
77
+ );
78
+ invocationParameters = {};
79
+ break;
46
80
  }
47
81
  // parts of the prompt that can be directly converted to OpenAI params
48
82
  const baseCompletionParams = {
@@ -74,22 +108,31 @@ export const toOpenAI = <V extends Variables = Variables>({
74
108
  return openAIMessage;
75
109
  });
76
110
 
77
- let tools = prompt.tools?.tools.map((tool) => {
78
- const openAIToolDefinition = safelyConvertToolDefinitionToProvider({
79
- toolDefinition: tool,
80
- targetProvider: "OPENAI",
81
- });
82
- invariant(openAIToolDefinition, "Tool definition is not valid");
83
- return openAIToolDefinition;
84
- });
85
- tools = (tools?.length ?? 0) > 0 ? tools : undefined;
111
+ const toolsList = prompt.tools?.tools ?? [];
112
+ // Cast: raw tools are `Record<string, unknown>` straight from the prompt
113
+ // store. We trust the upstream caller to have stored a shape OpenAI's
114
+ // SDK accepts; no validation here.
115
+ const tools =
116
+ toolsList.length === 0
117
+ ? undefined
118
+ : (toolsList.map((tool) => {
119
+ if (isPromptToolRaw(tool)) {
120
+ return tool.raw;
121
+ }
122
+ const openAIToolDefinition = safelyConvertToolDefinitionToProvider({
123
+ toolDefinition: tool,
124
+ targetProvider: "OPENAI",
125
+ });
126
+ invariant(openAIToolDefinition, "Tool definition is not valid");
127
+ return openAIToolDefinition;
128
+ }) as unknown as ChatCompletionCreateParams["tools"]);
86
129
 
87
- let tool_choice: OpenaiToolChoice | undefined =
88
- safelyConvertToolChoiceToProvider({
89
- toolChoice: prompt?.tools?.tool_choice,
90
- targetProvider: "OPENAI",
91
- }) || undefined;
92
- tool_choice = tools?.length ? tool_choice : undefined;
130
+ const tool_choice: OpenaiToolChoice | undefined = tools
131
+ ? (safelyConvertToolChoiceToProvider({
132
+ toolChoice: prompt?.tools?.tool_choice,
133
+ targetProvider: "OPENAI",
134
+ }) ?? undefined)
135
+ : undefined;
93
136
 
94
137
  const response_format = prompt.response_format
95
138
  ? phoenixResponseFormatToOpenAI.parse(prompt.response_format)
@@ -16,7 +16,7 @@ import { phoenixMessageSchema } from "./messageSchemas";
16
16
  import { phoenixResponseFormatSchema } from "./responseFormatSchema";
17
17
  import { phoenixToolCallSchema } from "./toolCallSchemas";
18
18
  import { phoenixToolChoiceSchema } from "./toolChoiceSchemas";
19
- import { phoenixToolDefinitionSchema } from "./toolSchemas";
19
+ import { phoenixToolFunctionDefinitionSchema } from "./toolSchemas";
20
20
 
21
21
  /*
22
22
  * Conversion Functions
@@ -150,7 +150,7 @@ export const phoenixToolCallToOpenAI = phoenixToolCallSchema.transform(
150
150
  );
151
151
 
152
152
  export const phoenixToolDefinitionToOpenAI =
153
- phoenixToolDefinitionSchema.transform(
153
+ phoenixToolFunctionDefinitionSchema.transform(
154
154
  (phoenix): OpenAIToolDefinition => ({
155
155
  type: "function",
156
156
  function: {
@@ -1,21 +1,24 @@
1
1
  import z from "zod";
2
2
 
3
- import type { PromptTool } from "../../../types/prompts";
3
+ import type { PromptToolFunction } from "../../../types/prompts";
4
4
  import { schemaMatches } from "../../../utils/schemaMatches";
5
5
 
6
6
  /**
7
7
  * The Phoenix tool definition schema
8
8
  */
9
- export const phoenixToolDefinitionSchema = schemaMatches<PromptTool>()(
10
- z.object({
11
- type: z.literal("function"),
12
- function: z.object({
13
- name: z.string(),
14
- description: z.string().optional(),
15
- parameters: z.record(z.string(), z.unknown()).optional(),
16
- strict: z.boolean().optional(),
17
- }),
18
- })
19
- );
9
+ export const phoenixToolFunctionDefinitionSchema =
10
+ schemaMatches<PromptToolFunction>()(
11
+ z.object({
12
+ type: z.literal("function"),
13
+ function: z.object({
14
+ name: z.string(),
15
+ description: z.string().optional(),
16
+ parameters: z.record(z.string(), z.unknown()).optional(),
17
+ strict: z.boolean().optional(),
18
+ }),
19
+ })
20
+ );
20
21
 
21
- export type PhoenixToolDefinition = z.infer<typeof phoenixToolDefinitionSchema>;
22
+ export type PhoenixToolDefinition = z.infer<
23
+ typeof phoenixToolFunctionDefinitionSchema
24
+ >;
@@ -11,7 +11,7 @@ import { openAIToolDefinitionSchema } from "./openai/toolSchemas";
11
11
  import { phoenixMessageSchema } from "./phoenixPrompt/messageSchemas";
12
12
  import { phoenixToolCallSchema } from "./phoenixPrompt/toolCallSchemas";
13
13
  import { phoenixToolChoiceSchema } from "./phoenixPrompt/toolChoiceSchemas";
14
- import { phoenixToolDefinitionSchema } from "./phoenixPrompt/toolSchemas";
14
+ import { phoenixToolFunctionDefinitionSchema } from "./phoenixPrompt/toolSchemas";
15
15
  import { vercelAIChatPartToolCallSchema } from "./vercel/messagePartSchemas";
16
16
  import { vercelAIMessageSchema } from "./vercel/messageSchemas";
17
17
  import { vercelAIToolChoiceSchema } from "./vercel/toolChoiceSchemas";
@@ -87,7 +87,7 @@ export type LlmProviderToolChoice = z.infer<typeof llmProviderToolChoiceSchema>;
87
87
  export const llmProviderToolDefinitionSchema = z.union([
88
88
  openAIToolDefinitionSchema,
89
89
  anthropicToolDefinitionSchema,
90
- phoenixToolDefinitionSchema,
90
+ phoenixToolFunctionDefinitionSchema,
91
91
  ]);
92
92
 
93
93
  export type LlmProviderToolDefinition = z.infer<
@@ -15,7 +15,7 @@ import { phoenixContentPartSchema } from "./phoenixPrompt/messagePartSchemas";
15
15
  import { phoenixMessageSchema } from "./phoenixPrompt/messageSchemas";
16
16
  import { phoenixToolCallSchema } from "./phoenixPrompt/toolCallSchemas";
17
17
  import { phoenixToolChoiceSchema } from "./phoenixPrompt/toolChoiceSchemas";
18
- import { phoenixToolDefinitionSchema } from "./phoenixPrompt/toolSchemas";
18
+ import { phoenixToolFunctionDefinitionSchema } from "./phoenixPrompt/toolSchemas";
19
19
  import { llmProviderToolDefinitionSchema } from "./schemas";
20
20
  import type {
21
21
  LLMMessagePart,
@@ -206,7 +206,7 @@ export const detectToolDefinitionProvider = (
206
206
  };
207
207
  }
208
208
  const { success: phoenixSuccess, data: phoenixData } =
209
- phoenixToolDefinitionSchema.safeParse(toolDefinition);
209
+ phoenixToolFunctionDefinitionSchema.safeParse(toolDefinition);
210
210
  if (phoenixSuccess) {
211
211
  return { provider: "PHOENIX", validatedToolDefinition: phoenixData };
212
212
  }
@@ -161,11 +161,24 @@ export type PromptChatMessagePart =
161
161
  | components["schemas"]["ToolCallContentPart"]
162
162
  | components["schemas"]["ToolResultContentPart"];
163
163
 
164
+ export type PromptToolFunction = components["schemas"]["PromptToolFunction"];
165
+ export type PromptToolRaw = components["schemas"]["PromptToolRaw"];
166
+
164
167
  /**
165
168
  * The Phoenix prompt tool type from the API.
166
169
  */
167
170
  export type PromptTool = components["schemas"]["PromptTools"]["tools"][number];
168
171
 
172
+ export function isPromptToolRaw(tool: PromptTool): tool is PromptToolRaw {
173
+ return tool.type === "raw";
174
+ }
175
+
176
+ export function isPromptToolFunction(
177
+ tool: PromptTool
178
+ ): tool is PromptToolFunction {
179
+ return tool.type === "function";
180
+ }
181
+
169
182
  /**
170
183
  * The Phoenix prompt tool choice type from the API.
171
184
  */