chatbot-template/lib/types.ts

55 lines
1.5 KiB
TypeScript

import type { InferUITool, UIMessage } from "ai";
import { z } from "zod";
import type { ArtifactKind } from "@/components/chat/artifact";
import type { createDocument } from "./ai/tools/create-document";
import type { getWeather } from "./ai/tools/get-weather";
import type { requestSuggestions } from "./ai/tools/request-suggestions";
import type { updateDocument } from "./ai/tools/update-document";
import type { Suggestion } from "./db/schema";
export const messageMetadataSchema = z.object({
createdAt: z.string(),
});
export type MessageMetadata = z.infer<typeof messageMetadataSchema>;
type weatherTool = InferUITool<typeof getWeather>;
type createDocumentTool = InferUITool<ReturnType<typeof createDocument>>;
type updateDocumentTool = InferUITool<ReturnType<typeof updateDocument>>;
type requestSuggestionsTool = InferUITool<
ReturnType<typeof requestSuggestions>
>;
export type ChatTools = {
getWeather: weatherTool;
createDocument: createDocumentTool;
updateDocument: updateDocumentTool;
requestSuggestions: requestSuggestionsTool;
};
export type CustomUIDataTypes = {
textDelta: string;
imageDelta: string;
sheetDelta: string;
codeDelta: string;
suggestion: Suggestion;
appendMessage: string;
id: string;
title: string;
kind: ArtifactKind;
clear: null;
finish: null;
"chat-title": string;
};
export type ChatMessage = UIMessage<
MessageMetadata,
CustomUIDataTypes,
ChatTools
>;
export type Attachment = {
name: string;
url: string;
contentType: string;
};