( configuredModel: string | undefined, providers: Record<ProviderV2.ID, Provider.Info>, )
| 775 | } |
| 776 | |
| 777 | function defaultModelFromConfig( |
| 778 | configuredModel: string | undefined, |
| 779 | providers: Record<ProviderV2.ID, Provider.Info>, |
| 780 | ): Directory.DefaultModel | undefined { |
| 781 | const configured = configuredModel ? Provider.parseModel(configuredModel) : undefined |
| 782 | if (configured && providers[configured.providerID]?.models[configured.modelID]) return configured |
| 783 | |
| 784 | // First-session ACP startup must not scan historical sessions just to infer |
| 785 | // a default. Configured model, opencode provider, then sorted best model keep |
| 786 | // the protocol response deterministic without extra session/message reads. |
| 787 | const opencodeProvider = providers[ProviderV2.ID.make("opencode")] |
| 788 | const opencodeModel = opencodeProvider ? Provider.sort(Object.values(opencodeProvider.models))[0] : undefined |
| 789 | if (opencodeProvider && opencodeModel) return { providerID: opencodeProvider.id, modelID: opencodeModel.id } |
| 790 | |
| 791 | const best = Provider.sort(Object.values(providers).flatMap((provider) => Object.values(provider.models)))[0] |
| 792 | if (best) return { providerID: best.providerID, modelID: best.id } |
| 793 | if (configured) return configured |
| 794 | } |
| 795 | |
| 796 | function selectDefaultModel(snapshot: Directory.Snapshot) { |
| 797 | if (snapshot.defaultModel) return snapshot.defaultModel |
no test coverage detected