|
import { HF_ACCESS_TOKEN, MODELS } from "$env/static/private"; |
|
import { z } from "zod"; |
|
|
|
const modelsRaw = z |
|
.array( |
|
z.object({ |
|
name: z.string().min(1), |
|
displayName: z.string().min(1).optional(), |
|
description: z.string().min(1).optional(), |
|
websiteUrl: z.string().url().optional(), |
|
datasetName: z.string().min(1).optional(), |
|
userMessageToken: z.string().min(1), |
|
assistantMessageToken: z.string().min(1), |
|
messageEndToken: z.string().min(1).optional(), |
|
preprompt: z.string().default(""), |
|
prepromptUrl: z.string().url().optional(), |
|
promptExamples: z |
|
.array( |
|
z.object({ |
|
title: z.string().min(1), |
|
prompt: z.string().min(1), |
|
}) |
|
) |
|
.optional(), |
|
endpoints: z |
|
.array( |
|
z.object({ |
|
url: z.string().url(), |
|
authorization: z.string().min(1).default(`Bearer ${HF_ACCESS_TOKEN}`), |
|
weight: z.number().int().positive().default(1), |
|
}) |
|
) |
|
.optional(), |
|
parameters: z |
|
.object({ |
|
temperature: z.number().min(0).max(1), |
|
truncate: z.number().int().positive(), |
|
max_new_tokens: z.number().int().positive(), |
|
stop: z.array(z.string()).optional(), |
|
}) |
|
.passthrough(), |
|
}) |
|
) |
|
.parse(JSON.parse(MODELS)); |
|
|
|
export const models = await Promise.all( |
|
modelsRaw.map(async (m) => ({ |
|
...m, |
|
displayName: m.displayName || m.name, |
|
preprompt: m.prepromptUrl ? await fetch(m.prepromptUrl).then((r) => r.text()) : m.preprompt, |
|
})) |
|
); |
|
|
|
export type BackendModel = (typeof models)[0]; |
|
|
|
export const defaultModel = models[0]; |
|
|