saving prompt configs works

This commit is contained in:
Kyle Corbitt
2023-06-23 12:18:09 -07:00
parent a31c112745
commit ca78406ad1
13 changed files with 291 additions and 61 deletions

View File

@@ -1,13 +1,68 @@
import { z } from "zod";
import { createTRPCRouter, publicProcedure, protectedProcedure } from "~/server/api/trpc";
import { prisma } from "~/server/db";
import { JSONSerializable, OpenAIChatConfig } from "~/server/types";
export const promptVariantsRouter = createTRPCRouter({
list: publicProcedure.input(z.object({ experimentId: z.string() })).query(async ({ input }) => {
return await prisma.promptVariant.findMany({
where: {
experimentId: input.experimentId,
visible: true,
},
orderBy: {
sortIndex: "asc",
},
});
}),
replaceWithConfig: publicProcedure
.input(
z.object({
id: z.string(),
config: z.string(),
})
)
.mutation(async ({ input }) => {
const existing = await prisma.promptVariant.findUnique({
where: {
id: input.id,
},
});
console.log("got existing", existing);
console.log("config", input.config);
let parsedConfig;
try {
parsedConfig = JSON.parse(input.config) as OpenAIChatConfig;
} catch (e) {
throw new Error(`Invalid JSON: ${(e as Error).message}`);
}
if (!existing) {
throw new Error(`Prompt Variant with id ${input.id} does not exist`);
}
// Create a duplicate with only the config changed
const newVariant = await prisma.promptVariant.create({
data: {
experimentId: existing.experimentId,
label: existing.label,
sortIndex: existing.sortIndex,
config: parsedConfig,
},
});
await prisma.promptVariant.update({
where: {
id: input.id,
},
data: {
visible: false,
},
});
return newVariant;
}),
});