nsarrazin HF Staff commited on
Commit
371a45e
·
unverified ·
1 Parent(s): c03be55

feat(models): add transferTo property on old models (#1453)

Browse files

* feat(models): add transferTo property on old models

used to transfer assistants to new models if specified

* make sure transferTo is an existing model

src/lib/migrations/routines/02-update-assistants-models.ts CHANGED
@@ -7,17 +7,36 @@ const updateAssistantsModels: Migration = {
7
  name: "Update deprecated models in assistants with the default model",
8
  up: async () => {
9
  const models = (await import("$lib/server/models")).models;
10
-
11
  const { assistants } = collections;
12
 
13
- const modelIds = models.map((el) => el.id); // string[]
14
  const defaultModelId = models[0].id;
15
 
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
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
  return true;
23
  },
 
7
  name: "Update deprecated models in assistants with the default model",
8
  up: async () => {
9
  const models = (await import("$lib/server/models")).models;
10
+ const oldModels = (await import("$lib/server/models")).oldModels;
11
  const { assistants } = collections;
12
 
13
+ const modelIds = models.map((el) => el.id);
14
  const defaultModelId = models[0].id;
15
 
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
+ }
40
 
41
  return true;
42
  },
src/lib/server/models.ts CHANGED
@@ -320,6 +320,9 @@ export const models: ProcessedModel[] = await Promise.all(
320
  modelsRaw.map((e) => processModel(e).then(addEndpoint))
321
  );
322
 
 
 
 
323
  export const defaultModel = models[0];
324
 
325
  // Models that have been deprecated
@@ -330,6 +333,7 @@ export const oldModels = env.OLD_MODELS
330
  id: z.string().optional(),
331
  name: z.string().min(1),
332
  displayName: z.string().min(1).optional(),
 
333
  })
334
  )
335
  .parse(JSON5.parse(env.OLD_MODELS))
 
320
  modelsRaw.map((e) => processModel(e).then(addEndpoint))
321
  );
322
 
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
+
326
  export const defaultModel = models[0];
327
 
328
  // Models that have been deprecated
 
333
  id: z.string().optional(),
334
  name: z.string().min(1),
335
  displayName: z.string().min(1).optional(),
336
+ transferTo: validModelIdSchema.optional(),
337
  })
338
  )
339
  .parse(JSON5.parse(env.OLD_MODELS))