Skip to content

Commit f7ed4a4

Browse files
authored
feat(models): add transferTo property on old models (#1453)
* feat(models): add transferTo property on old models used to transfer assistants to new models if specified * make sure transferTo is an existing model
1 parent c5fd1c3 commit f7ed4a4

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/lib/migrations/routines/02-update-assistants-models.ts

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,36 @@ const updateAssistantsModels: Migration = {
77
name: "Update deprecated models in assistants with the default model",
88
up: async () => {
99
const models = (await import("$lib/server/models")).models;
10-
10+
const oldModels = (await import("$lib/server/models")).oldModels;
1111
const { assistants } = collections;
1212

13-
const modelIds = models.map((el) => el.id); // string[]
13+
const modelIds = models.map((el) => el.id);
1414
const defaultModelId = models[0].id;
1515

16-
// Find all assistants whose modelId is not in modelIds, and update it to use defaultModelId
17-
await assistants.updateMany(
18-
{ modelId: { $nin: modelIds } },
19-
{ $set: { modelId: defaultModelId } }
20-
);
16+
// Find all assistants whose modelId is not in modelIds, and update it
17+
const bulkOps = await assistants
18+
.find({ modelId: { $nin: modelIds } })
19+
.map((assistant) => {
20+
// has an old model
21+
let newModelId = defaultModelId;
22+
23+
const oldModel = oldModels.find((m) => m.id === assistant.modelId);
24+
if (oldModel && oldModel.transferTo && !!models.find((m) => m.id === oldModel.transferTo)) {
25+
newModelId = oldModel.transferTo;
26+
}
27+
28+
return {
29+
updateOne: {
30+
filter: { _id: assistant._id },
31+
update: { $set: { modelId: newModelId } },
32+
},
33+
};
34+
})
35+
.toArray();
36+
37+
if (bulkOps.length > 0) {
38+
await assistants.bulkWrite(bulkOps);
39+
}
2140

2241
return true;
2342
},

src/lib/server/models.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,9 @@ export const models: ProcessedModel[] = await Promise.all(
320320
modelsRaw.map((e) => processModel(e).then(addEndpoint))
321321
);
322322

323+
// super ugly but not sure how to make typescript happier
324+
const validModelIdSchema = z.enum(models.map((m) => m.id) as [string, ...string[]]);
325+
323326
export const defaultModel = models[0];
324327

325328
// Models that have been deprecated
@@ -330,6 +333,7 @@ export const oldModels = env.OLD_MODELS
330333
id: z.string().optional(),
331334
name: z.string().min(1),
332335
displayName: z.string().min(1).optional(),
336+
transferTo: validModelIdSchema.optional(),
333337
})
334338
)
335339
.parse(JSON5.parse(env.OLD_MODELS))

0 commit comments

Comments
 (0)