coyotte508
A new start
fc69895
import { Elysia, status } from "elysia";
import { refreshModels, lastModelRefreshSummary } from "$lib/server/models";
import type { BackendModel } from "$lib/server/models";
import { authPlugin } from "../../authPlugin";
import { authCondition } from "$lib/server/auth";
import { collections } from "$lib/server/database";
export type GETModelsResponse = Array<{
id: string;
name: string;
websiteUrl?: string;
modelUrl?: string;
datasetName?: string;
datasetUrl?: string;
displayName: string;
description?: string;
logoUrl?: string;
providers?: Array<{ provider: string } & Record<string, unknown>>;
promptExamples?: { title: string; prompt: string }[];
parameters: BackendModel["parameters"];
preprompt?: string;
multimodal: boolean;
multimodalAcceptedMimetypes?: string[];
unlisted: boolean;
hasInferenceAPI: boolean;
// Mark router entry for UI decoration — always present
isRouter: boolean;
}>;
export type GETOldModelsResponse = Array<{
id: string;
name: string;
displayName: string;
transferTo?: string;
}>;
export const modelGroup = new Elysia().group("/models", (app) =>
app
.get("/", async () => {
try {
const { models } = await import("$lib/server/models");
return models
.filter((m) => m.unlisted == false)
.map((model) => ({
id: model.id,
name: model.name,
websiteUrl: model.websiteUrl,
modelUrl: model.modelUrl,
datasetName: model.datasetName,
datasetUrl: model.datasetUrl,
displayName: model.displayName,
description: model.description,
logoUrl: model.logoUrl,
providers: model.providers as unknown as Array<
{ provider: string } & Record<string, unknown>
>,
promptExamples: model.promptExamples,
parameters: model.parameters,
preprompt: model.preprompt,
multimodal: model.multimodal,
multimodalAcceptedMimetypes: model.multimodalAcceptedMimetypes,
unlisted: model.unlisted,
hasInferenceAPI: model.hasInferenceAPI,
isRouter: model.isRouter,
})) satisfies GETModelsResponse;
} catch (e) {
// Return empty list instead of crashing the whole page
return [] as GETModelsResponse;
}
})
.get("/old", async () => {
return [] as GETOldModelsResponse;
})
.group("/refresh", (app) =>
app.use(authPlugin).post("", async ({ locals }) => {
if (!locals.user && !locals.sessionId) {
throw status(401, "Unauthorized");
}
if (!locals.isAdmin) {
throw status(403, "Admin privileges required");
}
const previous = lastModelRefreshSummary;
try {
const summary = await refreshModels();
return {
refreshedAt: summary.refreshedAt.toISOString(),
durationMs: summary.durationMs,
added: summary.added,
removed: summary.removed,
changed: summary.changed,
total: summary.total,
hadChanges:
summary.added.length > 0 || summary.removed.length > 0 || summary.changed.length > 0,
previous:
previous.refreshedAt.getTime() > 0
? {
refreshedAt: previous.refreshedAt.toISOString(),
total: previous.total,
}
: null,
};
} catch (err) {
throw status(502, "Model refresh failed");
}
})
)
.group("/:namespace/:model?", (app) =>
app
.derive(async ({ params, error }) => {
let modelId: string = params.namespace;
if (params.model) {
modelId += "/" + params.model;
}
try {
const { models } = await import("$lib/server/models");
const model = models.find((m) => m.id === modelId);
if (!model || model.unlisted) {
return error(404, "Model not found");
}
return { model };
} catch (e) {
return error(500, "Models not available");
}
})
.get("/", ({ model }) => {
return model;
})
.use(authPlugin)
.post("/subscribe", async ({ locals, model, error }) => {
if (!locals.sessionId) {
return error(401, "Unauthorized");
}
await collections.settings.updateOne(
authCondition(locals),
{
$set: {
activeModel: model.id,
updatedAt: new Date(),
},
$setOnInsert: {
createdAt: new Date(),
},
},
{
upsert: true,
}
);
return new Response();
})
)
);