UNPKG

@arizeai/phoenix-client

Version:

A client for the Phoenix API

132 lines 5.21 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.anthropicToolDefinitionToOpenAI = exports.anthropicToolChoiceToOpenAI = exports.anthropicToolCallToOpenAI = exports.anthropicMessageToOpenAI = exports.anthropicMessagePartToOpenAI = void 0; const assertUnreachable_1 = require("../../../utils/assertUnreachable"); const safelyStringifyJSON_1 = require("../../../utils/safelyStringifyJSON"); const messageSchemas_1 = require("../openai/messageSchemas"); const messagePartSchemas_1 = require("./messagePartSchemas"); const messageSchemas_2 = require("./messageSchemas"); const toolCallSchemas_1 = require("./toolCallSchemas"); const toolChoiceSchemas_1 = require("./toolChoiceSchemas"); const toolSchemas_1 = require("./toolSchemas"); const tiny_invariant_1 = __importDefault(require("tiny-invariant")); /* * 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.anthropicMessagePartToOpenAI = messagePartSchemas_1.anthropicMessagePartSchema.transform((anthropic) => { const type = anthropic.type; switch (type) { case "text": return { type: "text", text: anthropic.text, }; case "image": return { type: "image_url", image_url: { url: anthropic.source.data }, }; case "tool_use": return null; case "tool_result": return null; default: return (0, assertUnreachable_1.assertUnreachable)(type); } }); /** * Spoke → Hub: Convert an Anthropic message to OpenAI format */ exports.anthropicMessageToOpenAI = messageSchemas_2.anthropicMessageSchema.transform((anthropic) => { let role = messageSchemas_1.openAIMessageRoleSchema.parse(anthropic.role); if (Array.isArray(anthropic.content) && anthropic.content.some((part) => part.type === "tool_result")) { role = "tool"; } const initialContentArray = typeof anthropic.content === "string" ? [{ type: "text", text: anthropic.content }] : anthropic.content; const toolCallParts = initialContentArray.filter((part) => part.type === "tool_use"); const nonToolCallParts = initialContentArray.filter((part) => part.type !== "tool_use"); (0, tiny_invariant_1.default)(role === "user" || role === "assistant", `Unexpected anthropic role: ${role}`); switch (role) { case "assistant": { const content = nonToolCallParts .map((part) => exports.anthropicMessagePartToOpenAI.parse(part)) .filter((part) => part !== null && part.type === "text"); return { role: "assistant", tool_calls: toolCallParts.length > 0 ? toolCallParts.map((tc) => exports.anthropicToolCallToOpenAI.parse(tc)) : undefined, content, }; } case "user": { const content = nonToolCallParts .map((part) => exports.anthropicMessagePartToOpenAI.parse(part)) .filter((part) => part !== null); return { role: "user", content, }; } default: return (0, assertUnreachable_1.assertUnreachable)(role); } }); /** * Parse incoming object as an Anthropic tool call and immediately convert to OpenAI format */ exports.anthropicToolCallToOpenAI = toolCallSchemas_1.anthropicToolCallSchema.transform((anthropic) => { var _a; return ({ type: "function", id: anthropic.id, function: { name: anthropic.name, arguments: typeof anthropic.input === "string" ? anthropic.input : ((_a = (0, safelyStringifyJSON_1.safelyStringifyJSON)(anthropic.input).json) !== null && _a !== void 0 ? _a : ""), }, }); }); /** * Parse incoming object as an Anthropic tool choice and immediately convert to OpenAI format */ exports.anthropicToolChoiceToOpenAI = toolChoiceSchemas_1.anthropicToolChoiceSchema.transform((anthropic) => { switch (anthropic.type) { case "any": return "required"; case "auto": return "auto"; case "tool": if (!anthropic.name) { return "auto"; } return { type: "function", function: { name: anthropic.name }, }; default: return "auto"; } }); /** * Parse incoming object as an Anthropic tool call and immediately convert to OpenAI format */ exports.anthropicToolDefinitionToOpenAI = toolSchemas_1.anthropicToolDefinitionSchema.transform((anthropic) => ({ type: "function", function: { name: anthropic.name, description: anthropic.description, parameters: anthropic.input_schema, }, })); //# sourceMappingURL=converters.js.map