| 127 | ), |
| 128 | models: (() => { |
| 129 | const normalize = (model: z.infer<typeof ModelSchema>) => { |
| 130 | const providers = model.providers.map((p) => ({ |
| 131 | ...p, |
| 132 | priority: p.priority ?? Infinity, |
| 133 | weight: p.weight ?? 1, |
| 134 | })) |
| 135 | const composite = providers.find((p) => compositeProviders[p.id].length > 1) |
| 136 | if (!composite) |
| 137 | return { |
| 138 | trialProvider: model.trialProvider ? [model.trialProvider] : undefined, |
| 139 | providers, |
| 140 | } |
| 141 | |
| 142 | const weightMulti = compositeProviders[composite.id].length |
| 143 | |
| 144 | return { |
| 145 | trialProvider: (() => { |
| 146 | if (!model.trialProvider) return undefined |
| 147 | if (model.trialProvider === composite.id) return compositeProviders[composite.id].map((p) => p.id) |
| 148 | return [model.trialProvider] |
| 149 | })(), |
| 150 | providers: providers.flatMap((p) => |
| 151 | p.id === composite.id |
| 152 | ? compositeProviders[p.id].map((sub) => ({ |
| 153 | ...p, |
| 154 | id: sub.id, |
| 155 | })) |
| 156 | : [ |
| 157 | { |
| 158 | ...p, |
| 159 | weight: p.weight * weightMulti, |
| 160 | }, |
| 161 | ], |
| 162 | ), |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | return Object.fromEntries( |
| 167 | Object.entries(modelList === "lite" ? liteModels : zenModels).map(([modelId, model]) => { |