UNPKG

@arizeai/phoenix-client

Version:

A client for the Phoenix API

77 lines 3.21 kB
import { safelyConvertMessageToProvider, safelyConvertToolChoiceToProvider, safelyConvertToolDefinitionToProvider, } from "../../schemas/llm/converters.js"; import { phoenixResponseFormatToOpenAI } from "../../schemas/llm/phoenixPrompt/converters.js"; import { formatPromptMessages } from "../../utils/formatPromptMessages.js"; import invariant from "tiny-invariant"; /** * Convert a Phoenix prompt to OpenAI client sdk's chat completion parameters * * @returns The converted chat completion parameters */ export const toOpenAI = ({ prompt, variables, }) => { try { let invocationParameters; if (prompt.invocation_parameters.type === "openai") { invocationParameters = prompt.invocation_parameters.openai; } else { // eslint-disable-next-line no-console console.warn("Prompt is not an OpenAI prompt, falling back to default OpenAI invocation parameters"); invocationParameters = {}; } // parts of the prompt that can be directly converted to OpenAI params const baseCompletionParams = { model: prompt.model_name, // Invocation parameters are validated on the phoenix-side ...invocationParameters, }; 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 openAIMessage = safelyConvertMessageToProvider({ message, targetProvider: "OPENAI", }); invariant(openAIMessage, "Message is not valid"); return openAIMessage; }); let tools = prompt.tools?.tools.map((tool) => { const openAIToolDefinition = safelyConvertToolDefinitionToProvider({ toolDefinition: tool, targetProvider: "OPENAI", }); invariant(openAIToolDefinition, "Tool definition is not valid"); return openAIToolDefinition; }); tools = (tools?.length ?? 0) > 0 ? tools : undefined; let tool_choice = safelyConvertToolChoiceToProvider({ toolChoice: prompt?.tools?.tool_choice, targetProvider: "OPENAI", }) || undefined; tool_choice = tools?.length ? tool_choice : undefined; const response_format = prompt.response_format ? phoenixResponseFormatToOpenAI.parse(prompt.response_format) : undefined; // combine base and computed params const completionParams = { ...baseCompletionParams, messages, tools, tool_choice, response_format, }; return completionParams; } catch (e) { // eslint-disable-next-line no-console console.warn(`Failed to convert prompt to OpenAI params`); // eslint-disable-next-line no-console console.error(e); return null; } }; //# sourceMappingURL=toOpenAI.js.map