48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { apiError, apiJson } from "@/lib/api-handler";
|
|
import { resolveApiAuth } from "@/lib/api-auth";
|
|
import { getAssistantPreferences } from "@/lib/assistant-preference";
|
|
import { isValidAssistantModelRoute, listLlmModels, resolveAssistantModel } from "@/lib/llm/models";
|
|
|
|
export const dynamic = "force-dynamic";
|
|
|
|
function noStore(response: Response): Response {
|
|
response.headers.set("Cache-Control", "no-store");
|
|
return response;
|
|
}
|
|
|
|
export async function GET(request: Request) {
|
|
const auth = await resolveApiAuth(request);
|
|
if (!auth?.userId) {
|
|
return noStore(apiError("Unauthorized", 401));
|
|
}
|
|
|
|
const assistant = await getAssistantPreferences(auth.userId);
|
|
if (!assistant.enabled) {
|
|
return noStore(apiError("Assistant not enabled", 403));
|
|
}
|
|
|
|
const requestedRoute = new URL(request.url).searchParams.get("route");
|
|
if (requestedRoute !== null && !isValidAssistantModelRoute(requestedRoute)) {
|
|
return noStore(apiError("Invalid assistant model route", 400));
|
|
}
|
|
|
|
const modelRoute = requestedRoute ?? assistant.modelRoute;
|
|
const modelList = await listLlmModels({ route: modelRoute });
|
|
const resolved = resolveAssistantModel({
|
|
requestedModel: null,
|
|
savedModel: requestedRoute === null ? assistant.model : null,
|
|
fallbackModel: modelList.fallbackModel,
|
|
models: modelList.models,
|
|
});
|
|
|
|
return noStore(
|
|
apiJson({
|
|
models: modelList.models,
|
|
selectedModel: resolved.model,
|
|
fallbackModel: modelList.fallbackModel,
|
|
route: modelList.route,
|
|
degraded: modelList.degraded,
|
|
}),
|
|
);
|
|
}
|