import { z } from "zod"; export const ModelApiSchema = z.enum([ "openai-responses", "openai-completions", "anthropic-messages", ]); export const ModelConnectionInputSchema = z.object({ providerId: z.string().trim().min(1).max(80).regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/), api: ModelApiSchema, baseUrl: z.url().max(2048).optional(), apiKey: z.string().min(1).max(8192).optional(), modelId: z.string().trim().min(1).max(200), displayName: z.string().trim().min(1).max(200).optional(), supportsImages: z.boolean(), contextWindow: z.int().positive().max(10_000_000).optional(), maxTokens: z.int().positive().max(1_000_000).optional(), }).strict(); export type ModelApi = z.infer; export type ModelConnectionInput = z.infer; export const RedactedModelConnectionSchema = ModelConnectionInputSchema .omit({ apiKey: true }) .extend({ configured: z.boolean(), source: z.enum(["session", "environment", "missing"]), keyHint: z.string().max(12).optional(), }) .strict(); export type RedactedModelConnection = z.infer;