mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-04-25 00:16:29 +02:00
67 lines
No EOL
1.6 KiB
TypeScript
67 lines
No EOL
1.6 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export const ProviderOptions = z.record(z.string(), z.record(z.string(), z.json()));
|
|
|
|
export const TextPart = z.object({
|
|
type: z.literal("text"),
|
|
text: z.string(),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const ReasoningPart = z.object({
|
|
type: z.literal("reasoning"),
|
|
text: z.string(),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const ToolCallPart = z.object({
|
|
type: z.literal("tool-call"),
|
|
toolCallId: z.string(),
|
|
toolName: z.string(),
|
|
arguments: z.any(),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const AssistantContentPart = z.union([
|
|
TextPart,
|
|
ReasoningPart,
|
|
ToolCallPart,
|
|
]);
|
|
|
|
export const UserMessage = z.object({
|
|
role: z.literal("user"),
|
|
content: z.string(),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const AssistantMessage = z.object({
|
|
role: z.literal("assistant"),
|
|
content: z.union([
|
|
z.string(),
|
|
z.array(AssistantContentPart),
|
|
]),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const SystemMessage = z.object({
|
|
role: z.literal("system"),
|
|
content: z.string(),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const ToolMessage = z.object({
|
|
role: z.literal("tool"),
|
|
content: z.string(),
|
|
toolCallId: z.string(),
|
|
toolName: z.string(),
|
|
providerOptions: ProviderOptions.optional(),
|
|
});
|
|
|
|
export const Message = z.discriminatedUnion("role", [
|
|
AssistantMessage,
|
|
SystemMessage,
|
|
ToolMessage,
|
|
UserMessage,
|
|
]);
|
|
|
|
export const MessageList = z.array(Message); |