resolveWebSearchChain function
Resolves providerIds (auto expands to the default chain) into an
ordered, deduplicated list of available providers (omp's
resolveProviderCandidates, reduced). Keyed providers without a key in
secrets are skipped; unknown ids throw.
Implementation
List<WebSearchProvider> resolveWebSearchChain(
List<String> providerIds, {
required Map<String, String> secrets,
}) {
final byId = {for (final p in defaultWebSearchProviders) p.id: p};
final resolved = <WebSearchProvider>[];
for (final id in providerIds.isEmpty ? const ['auto'] : providerIds) {
if (id == 'auto') {
resolved.addAll(defaultWebSearchProviders);
continue;
}
final provider = byId[id];
if (provider == null) {
throw StateError(
'Unknown web search provider: $id '
'(known: ${byId.keys.join(', ')}, auto)',
);
}
resolved.add(provider);
}
final seen = <String>{};
return [
for (final provider in resolved)
if (seen.add(provider.id) &&
isWebSearchProviderAvailable(provider, secrets))
provider,
];
}