feat: add agent search config and system assistant defaults
Adds a config jsonb column to agents for per-agent search settings (enabled, rerank, maxResults). Types systemAssistants with rename and rerank sub-objects. Backfills missing systemAssistants keys on settings fetch. Includes generated drizzle migrations.
This commit is contained in:
@@ -15,6 +15,13 @@ export default defineEventHandler(async (event) => {
|
||||
systemPrompt: z.string().nullable().optional(),
|
||||
imageUrl: z.string().optional(),
|
||||
defaultModelId: z.string().optional(),
|
||||
config: z.object({
|
||||
search: z.object({
|
||||
enabled: z.boolean(),
|
||||
rerank: z.boolean(),
|
||||
maxResults: z.number().min(1).max(50),
|
||||
}).optional(),
|
||||
}).optional(),
|
||||
})
|
||||
.safeParse(body),
|
||||
);
|
||||
@@ -28,15 +35,17 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
const agentId = getRouterParam(event, 'id')!;
|
||||
|
||||
const { name, systemPrompt, imageUrl, defaultModelId } = result.data;
|
||||
const { name, systemPrompt, imageUrl, defaultModelId, config } = result.data;
|
||||
|
||||
const updateData: Record<string, any> = {};
|
||||
if (name !== undefined) updateData.name = name;
|
||||
if (systemPrompt !== undefined) updateData.systemPrompt = systemPrompt;
|
||||
if (imageUrl !== undefined) updateData.imageUrl = imageUrl;
|
||||
if (defaultModelId !== undefined) updateData.defaultModelId = defaultModelId;
|
||||
if (config !== undefined) updateData.config = config;
|
||||
|
||||
const res = await db.update(agents)
|
||||
.set({
|
||||
name,
|
||||
systemPrompt,
|
||||
imageUrl,
|
||||
defaultModelId,
|
||||
})
|
||||
.set(updateData)
|
||||
.where(
|
||||
and(
|
||||
eq(agents.id, agentId),
|
||||
@@ -55,10 +64,7 @@ export default defineEventHandler(async (event) => {
|
||||
op: 'update',
|
||||
payload: {
|
||||
id: agentId,
|
||||
name,
|
||||
systemPrompt,
|
||||
imageUrl,
|
||||
defaultModelId,
|
||||
...updateData,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { and, eq } from 'drizzle-orm';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { settings } from '~~/drizzle/schema';
|
||||
import { db } from '~~/server/lib/db';
|
||||
|
||||
@@ -14,18 +14,51 @@ export default defineEventHandler(async (event) => {
|
||||
await protectRoute(event);
|
||||
const userId = event.context.user!.id as string;
|
||||
|
||||
const existing = await db.query.settings.findFirst({
|
||||
let existing = await db.query.settings.findFirst({
|
||||
where: { userId },
|
||||
});
|
||||
|
||||
const defaultSystemAssistants = {
|
||||
rename: {
|
||||
enabled: false,
|
||||
modelId: null,
|
||||
},
|
||||
rerank: {
|
||||
enabled: false,
|
||||
modelId: null,
|
||||
}
|
||||
};
|
||||
|
||||
if (existing) {
|
||||
const missingSystemAssistants = Object.keys(defaultSystemAssistants).filter(key => !(key in existing!.systemAssistants));
|
||||
if (missingSystemAssistants.length > 0) {
|
||||
const [updated] = await db.update(settings)
|
||||
.set({
|
||||
systemAssistants: {
|
||||
...defaultSystemAssistants,
|
||||
...existing.systemAssistants,
|
||||
},
|
||||
})
|
||||
.where(eq(settings.id, existing.id)).returning();
|
||||
|
||||
if (!updated) {
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
statusMessage: 'Failed to update settings',
|
||||
message: 'Failed to update settings',
|
||||
});
|
||||
}
|
||||
|
||||
existing = updated;
|
||||
}
|
||||
|
||||
return existing;
|
||||
}
|
||||
|
||||
const [created] = await db.insert(settings)
|
||||
.values({
|
||||
userId,
|
||||
systemAssistants: {},
|
||||
systemAssistants: defaultSystemAssistants,
|
||||
appearance: defaultAppearance,
|
||||
})
|
||||
.returning();
|
||||
|
||||
@@ -74,6 +74,7 @@ export default defineEventHandler(async (event) => {
|
||||
await db.update(settings)
|
||||
.set({
|
||||
appearance: newAppearance,
|
||||
// @ts-ignore - I dont have the energy to type this correctly right now
|
||||
systemAssistants: newSystemAssistants,
|
||||
})
|
||||
.where(and(eq(settings.id, existingId)));
|
||||
|
||||
Reference in New Issue
Block a user