@arizeai/phoenix-client
Version:
A client for the Phoenix API
60 lines • 1.95 kB
JavaScript
import { schemaMatches } from "../../../utils/schemaMatches.js";
import z from "zod";
export const textPartSchema = schemaMatches()(z.object({
type: z.literal("text"),
text: z.string(),
}));
export const toolCallPartSchema = schemaMatches()(z.object({
type: z.literal("tool_call"),
tool_call_id: z.string(),
tool_call: z.object({
type: z.literal("function"),
name: z.string(),
arguments: z.string(),
}),
}));
export const toolResultPartSchema = schemaMatches()(z.object({
type: z.literal("tool_result"),
tool_call_id: z.string(),
tool_result: z.union([
z.string(),
z.number(),
z.boolean(),
z.null(),
z.record(z.unknown()),
z.array(z.unknown()),
]),
}));
export const phoenixContentPartSchema = schemaMatches()(z.discriminatedUnion("type", [
textPartSchema,
toolCallPartSchema,
toolResultPartSchema,
]));
/*
*
* Creation helpers
*
*/
export const asTextPart = (maybePart) => {
const parsed = textPartSchema.safeParse(maybePart);
return parsed.success ? parsed.data : null;
};
export const makeTextPart = (text) => {
const optimisticTextPart = { text: { text } };
const parsed = textPartSchema.safeParse(optimisticTextPart);
return parsed.success ? parsed.data : null;
};
export const asToolCallPart = (maybePart) => {
const parsed = toolCallPartSchema.safeParse(maybePart);
return parsed.success ? parsed.data : null;
};
export const asToolResultPart = (maybePart) => {
const parsed = toolResultPartSchema.safeParse(maybePart);
return parsed.success ? parsed.data : null;
};
export const makeToolResultPart = (toolCallId, result) => {
const optimisticToolResultPart = { toolResult: { toolCallId, result } };
const parsed = toolResultPartSchema.safeParse(optimisticToolResultPart);
return parsed.success ? parsed.data : null;
};
//# sourceMappingURL=messagePartSchemas.js.map