UNPKG

@arizeai/phoenix-client

Version:

A client for the Phoenix API

133 lines 5.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.phoenixToolChoiceToOpenAI = exports.phoenixToolDefinitionToOpenAI = exports.phoenixToolCallToOpenAI = exports.phoenixResponseFormatToOpenAI = exports.phoenixMessageToOpenAI = exports.phoenixMessagePartToOpenAI = void 0; const assertUnreachable_1 = require("../../../utils/assertUnreachable"); const safelyStringifyJSON_1 = require("../../../utils/safelyStringifyJSON"); const jsonSchema_1 = require("../../jsonSchema"); const messagePartSchemas_1 = require("./messagePartSchemas"); const messageSchemas_1 = require("./messageSchemas"); const responseFormatSchema_1 = require("./responseFormatSchema"); const toolCallSchemas_1 = require("./toolCallSchemas"); const toolChoiceSchemas_1 = require("./toolChoiceSchemas"); const toolSchemas_1 = require("./toolSchemas"); /* * Conversion Functions * * These follow a hub-and-spoke model where OpenAI is the hub format. * All conversions between different formats go through OpenAI as an intermediate step. */ exports.phoenixMessagePartToOpenAI = messagePartSchemas_1.phoenixContentPartSchema.transform((part) => { const type = part.type; switch (type) { case "text": return { type: "text", text: part.text, }; case "tool_call": return null; case "tool_result": return null; default: return (0, assertUnreachable_1.assertUnreachable)(type); } }); /** * Spoke → Hub: Convert a Prompt message to OpenAI format */ exports.phoenixMessageToOpenAI = messageSchemas_1.phoenixMessageSchema.transform((prompt) => { const content = typeof prompt.content == "string" ? [{ type: "text", text: prompt.content }] : prompt.content; // Special handling for TOOL role messages if (prompt.role === "tool") { const toolResult = content .map((part) => (0, messagePartSchemas_1.asToolResultPart)(part)) .find((part) => !!part); if (!toolResult) { throw new Error("TOOL role message must have a ToolResultContentPart"); } return { role: "tool", content: typeof toolResult.tool_result === "string" ? toolResult.tool_result : (0, safelyStringifyJSON_1.safelyStringifyJSON)(toolResult.tool_result).json || "", tool_call_id: toolResult.tool_call_id, }; } // Handle other roles const role = prompt.role; switch (role) { case "system": case "developer": return { role: "system", content: content .map((part) => exports.phoenixMessagePartToOpenAI.parse(part)) .filter((part) => part !== null && part.type === "text"), }; case "user": return { role: "user", content: content .map((part) => exports.phoenixMessagePartToOpenAI.parse(part)) .filter((part) => part !== null && part.type === "text"), }; case "assistant": case "ai": case "model": return { role: "assistant", content: content .map((part) => exports.phoenixMessagePartToOpenAI.parse(part)) .filter((part) => part !== null && part.type === "text"), tool_calls: content.some((part) => part.type === "tool_call") ? content .filter((part) => part.type === "tool_call") .map((part) => exports.phoenixToolCallToOpenAI.parse(part)) .filter((part) => part !== null) : undefined, }; default: return (0, assertUnreachable_1.assertUnreachable)(role); } }); exports.phoenixResponseFormatToOpenAI = responseFormatSchema_1.phoenixResponseFormatSchema.transform((phoenix) => ({ type: "json_schema", json_schema: { name: phoenix.json_schema.name, description: phoenix.json_schema.description, schema: jsonSchema_1.jsonSchemaZodSchema.parse(phoenix.json_schema.schema), }, })); exports.phoenixToolCallToOpenAI = toolCallSchemas_1.phoenixToolCallSchema.transform((prompt) => { var _a; return ({ type: "function", id: prompt.tool_call_id, function: Object.assign(Object.assign({}, prompt.tool_call), { arguments: typeof prompt.tool_call.arguments === "string" ? prompt.tool_call.arguments : ((_a = (0, safelyStringifyJSON_1.safelyStringifyJSON)(prompt.tool_call.arguments).json) !== null && _a !== void 0 ? _a : "") }), }); }); exports.phoenixToolDefinitionToOpenAI = toolSchemas_1.phoenixToolDefinitionSchema.transform((phoenix) => ({ type: "function", function: { name: phoenix.function.name, description: phoenix.function.description, parameters: jsonSchema_1.jsonSchemaZodSchema.parse(phoenix.function.parameters), }, })); exports.phoenixToolChoiceToOpenAI = toolChoiceSchemas_1.phoenixToolChoiceSchema.transform((phoenix) => { switch (phoenix.type) { case "none": return "none"; case "zero_or_more": return "auto"; case "one_or_more": return "required"; case "specific_function": return { type: "function", function: { name: phoenix.function_name } }; } }); //# sourceMappingURL=converters.js.map