34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
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<typeof ModelApiSchema>;
|
|
export type ModelConnectionInput = z.infer<typeof ModelConnectionInputSchema>;
|
|
|
|
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<typeof RedactedModelConnectionSchema>;
|