UNPKG

@arizeai/phoenix-client

Version:
77 lines 3.27 kB
import invariant from "tiny-invariant"; import { safelyConvertMessageToProvider, safelyConvertToolChoiceToProvider, safelyConvertToolDefinitionToProvider, } from "../../schemas/llm/converters.js"; import { findToolDefinitionName } from "../../schemas/llm/utils.js"; import { formatPromptMessages } from "../../utils/formatPromptMessages.js"; /** * Converts a Phoenix prompt to Vercel AI sdk params. * * - note: To use response format, you must pass `prompt.response_format.json_schema.schema` to generateObject or streamObject * via `jsonSchema()`, through the `schema` argument. */ export const toAI = ({ prompt, variables, }) => { // eslint-disable-next-line no-console console.warn("Prompt invocation parameters not currently supported in AI SDK, falling back to default invocation parameters"); try { // parts of the prompt that can be directly converted to OpenAI params const baseCompletionParams = { // Invocation parameters are validated on the phoenix-side }; if (!("messages" in prompt.template)) { return null; } let formattedMessages = prompt.template.messages; if (variables) { formattedMessages = formatPromptMessages(prompt.template_format, formattedMessages, variables); } const messages = formattedMessages.map((message) => { const vercelAIMessage = safelyConvertMessageToProvider({ message, targetProvider: "VERCEL_AI", }); invariant(vercelAIMessage, "Message is not valid"); return vercelAIMessage; }); let tools; if (prompt.tools?.tools && prompt.tools.tools.length > 0) { const toolsRecord = {}; for (const tool of prompt.tools.tools) { const name = findToolDefinitionName(tool); invariant(name, "Tool definition name is not valid"); const converted = safelyConvertToolDefinitionToProvider({ toolDefinition: tool, targetProvider: "VERCEL_AI", }); invariant(converted, "Tool definition is not valid"); toolsRecord[name] = converted; } tools = Object.keys(toolsRecord).length > 0 ? toolsRecord : undefined; } let toolChoice; if (tools && prompt.tools?.tool_choice) { toolChoice = safelyConvertToolChoiceToProvider({ toolChoice: prompt.tools.tool_choice, targetProvider: "VERCEL_AI", }) ?? undefined; } // combine base and computed params const completionParams = { ...baseCompletionParams, messages, ...(tools !== undefined && { tools }), ...(toolChoice !== undefined && { toolChoice }), }; return completionParams; } catch (error) { // eslint-disable-next-line no-console console.warn(`Failed to convert prompt to AI params`); // eslint-disable-next-line no-console console.error(error); return null; } }; //# sourceMappingURL=toAI.js.map