@arizeai/phoenix-client
Version:
A client for the Phoenix API
77 lines • 3.21 kB
JavaScript
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