(input: {
readonly directory: string
readonly providers: Record<ProviderV2.ID, Provider.Info>
readonly modes: readonly ModeOption[]
readonly defaultModeID: string
readonly commands: readonly Command.Info[]
readonly defaultModel?: DefaultModel
})
| 60 | export const variants = (snapshot: Snapshot, model: DefaultModel) => snapshot.variantsByModel[modelKey(model)] |
| 61 | |
| 62 | export const build = (input: { |
| 63 | readonly directory: string |
| 64 | readonly providers: Record<ProviderV2.ID, Provider.Info> |
| 65 | readonly modes: readonly ModeOption[] |
| 66 | readonly defaultModeID: string |
| 67 | readonly commands: readonly Command.Info[] |
| 68 | readonly defaultModel?: DefaultModel |
| 69 | }): Snapshot => { |
| 70 | const modelOptions = Provider.sort( |
| 71 | Object.values(input.providers).flatMap((provider) => |
| 72 | Object.values(provider.models).map((model) => ({ |
| 73 | id: model.id, |
| 74 | providerID: provider.id, |
| 75 | providerName: provider.name, |
| 76 | modelID: model.id, |
| 77 | modelName: model.name, |
| 78 | })), |
| 79 | ), |
| 80 | ).map((model) => ({ |
| 81 | providerID: model.providerID, |
| 82 | providerName: model.providerName, |
| 83 | modelID: model.modelID, |
| 84 | modelName: model.modelName, |
| 85 | })) |
| 86 | |
| 87 | return { |
| 88 | directory: input.directory, |
| 89 | providers: input.providers, |
| 90 | modelOptions, |
| 91 | variantsByModel: Object.fromEntries( |
| 92 | Object.values(input.providers).flatMap((provider) => |
| 93 | Object.values(provider.models).flatMap((model) => |
| 94 | model.variants ? [[modelKey({ providerID: provider.id, modelID: model.id }), model.variants]] : [], |
| 95 | ), |
| 96 | ), |
| 97 | ), |
| 98 | availableModes: input.modes, |
| 99 | defaultModeID: input.modes.some((mode) => mode.id === input.defaultModeID) |
| 100 | ? input.defaultModeID |
| 101 | : (input.modes[0]?.id ?? input.defaultModeID), |
| 102 | availableCommands: input.commands, |
| 103 | ...(input.defaultModel ? { defaultModel: input.defaultModel } : {}), |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | export const loaderLayer = Layer.effect( |
| 108 | Loader, |
no test coverage detected