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