feat(agent): let users choose model route

This commit is contained in:
ginnoir
2026-07-08 19:50:46 -05:00
parent b279f16ba0
commit ec3f96dab1
13 changed files with 235 additions and 45 deletions
+22 -2
View File
@@ -9,9 +9,15 @@ import {
MAX_ASSISTANT_NAME_LENGTH,
MAX_ASSISTANT_SYSTEM_PROMPT_LENGTH,
} from "@/lib/assistant-config";
import { isValidLlmModelId, listLlmModels } from "@/lib/llm/models";
import {
isValidAssistantModelRoute,
isValidLlmModelId,
listLlmModels,
type AssistantModelRoute,
} from "@/lib/llm/models";
import { users } from "@/modules/_core/schema";
import { getCurrentSession } from "@/lib/session";
import { getAssistantPreferences } from "@/lib/assistant-preference";
const assistantNameSchema = z
.string()
@@ -51,6 +57,19 @@ export async function setAssistantSystemPrompt(prompt: string | null): Promise<v
revalidateAssistantSurfaces();
}
export async function setAssistantModelRoute(route: AssistantModelRoute): Promise<void> {
if (!isValidAssistantModelRoute(route)) {
throw new Error("Invalid assistant model route");
}
const { user } = await getCurrentSession();
await db
.update(users)
.set({ assistantModelRoute: route, assistantModel: null })
.where(eq(users.id, user.id));
revalidateAssistantSurfaces();
}
export async function setAssistantModel(model: string | null): Promise<void> {
const { user } = await getCurrentSession();
const normalized = model?.trim() || null;
@@ -59,7 +78,8 @@ export async function setAssistantModel(model: string | null): Promise<void> {
throw new Error("Invalid assistant model");
}
const available = await listLlmModels();
const assistant = await getAssistantPreferences(user.id);
const available = await listLlmModels({ route: assistant.modelRoute });
const requested = normalized === available.fallbackModel ? null : normalized;
if (requested !== null && !available.models.some((option) => option.id === requested)) {