@arizeai/phoenix-client
Version:
A client for the Phoenix API
121 lines • 5.49 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toOpenAI = void 0;
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
const converters_1 = require("../../schemas/llm/converters");
const converters_2 = require("../../schemas/llm/phoenixPrompt/converters");
const prompts_1 = require("../../types/prompts");
const formatPromptMessages_1 = require("../../utils/formatPromptMessages");
/**
* Convert a Phoenix prompt to OpenAI client sdk's chat completion parameters
*
* @returns The converted chat completion parameters
*/
const toOpenAI = ({ prompt, variables, }) => {
var _a, _b;
var _c, _d;
try {
let invocationParameters;
switch (prompt.invocation_parameters.type) {
case "openai":
invocationParameters = prompt.invocation_parameters.openai;
break;
case "azure_openai":
invocationParameters = prompt.invocation_parameters.azure_openai;
break;
case "deepseek":
invocationParameters = prompt.invocation_parameters.deepseek;
break;
case "xai":
invocationParameters = prompt.invocation_parameters.xai;
break;
case "ollama":
invocationParameters = prompt.invocation_parameters.ollama;
break;
case "cerebras":
invocationParameters = prompt.invocation_parameters.cerebras;
break;
case "fireworks":
invocationParameters = prompt.invocation_parameters.fireworks;
break;
case "groq":
invocationParameters = prompt.invocation_parameters.groq;
break;
case "moonshot":
invocationParameters = prompt.invocation_parameters.moonshot;
break;
case "perplexity":
invocationParameters = prompt.invocation_parameters.perplexity;
break;
case "together":
invocationParameters = prompt.invocation_parameters.together;
break;
default:
// eslint-disable-next-line no-console
console.warn("Prompt is not an OpenAI-family prompt, falling back to default OpenAI invocation parameters");
invocationParameters = {};
break;
}
// parts of the prompt that can be directly converted to OpenAI params
const baseCompletionParams = Object.assign({ model: prompt.model_name }, invocationParameters);
if (!("messages" in prompt.template)) {
return null;
}
let formattedMessages = prompt.template.messages;
if (variables) {
formattedMessages = (0, formatPromptMessages_1.formatPromptMessages)(prompt.template_format, formattedMessages, variables);
}
const messages = formattedMessages.map((message) => {
const openAIMessage = (0, converters_1.safelyConvertMessageToProvider)({
message,
targetProvider: "OPENAI",
});
(0, tiny_invariant_1.default)(openAIMessage, "Message is not valid");
return openAIMessage;
});
const toolsList = (_c = (_a = prompt.tools) === null || _a === void 0 ? void 0 : _a.tools) !== null && _c !== void 0 ? _c : [];
// Cast: raw tools are `Record<string, unknown>` straight from the prompt
// store. We trust the upstream caller to have stored a shape OpenAI's
// SDK accepts; no validation here.
const tools = toolsList.length === 0
? undefined
: toolsList.map((tool) => {
if ((0, prompts_1.isPromptToolRaw)(tool)) {
return tool.raw;
}
const openAIToolDefinition = (0, converters_1.safelyConvertToolDefinitionToProvider)({
toolDefinition: tool,
targetProvider: "OPENAI",
});
(0, tiny_invariant_1.default)(openAIToolDefinition, "Tool definition is not valid");
return openAIToolDefinition;
});
const tool_choice = tools
? ((_d = (0, converters_1.safelyConvertToolChoiceToProvider)({
toolChoice: (_b = prompt === null || prompt === void 0 ? void 0 : prompt.tools) === null || _b === void 0 ? void 0 : _b.tool_choice,
targetProvider: "OPENAI",
})) !== null && _d !== void 0 ? _d : undefined)
: undefined;
const response_format = prompt.response_format
? converters_2.phoenixResponseFormatToOpenAI.parse(prompt.response_format)
: undefined;
// combine base and computed params
const completionParams = Object.assign(Object.assign({}, 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;
}
};
exports.toOpenAI = toOpenAI;
//# sourceMappingURL=toOpenAI.js.map