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