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