66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { normalizeProviderId } from "../agents/model-selection.js";
|
|
import type { OpenClawConfig } from "../config/config.js";
|
|
import type { ModelProviderConfig } from "../config/types.js";
|
|
import { resolvePluginProviders } from "./providers.js";
|
|
import type { ProviderDiscoveryOrder, ProviderPlugin } from "./types.js";
|
|
|
|
const DISCOVERY_ORDER: readonly ProviderDiscoveryOrder[] = ["simple", "profile", "paired", "late"];
|
|
|
|
export function resolvePluginDiscoveryProviders(params: {
|
|
config?: OpenClawConfig;
|
|
workspaceDir?: string;
|
|
env?: NodeJS.ProcessEnv;
|
|
}): ProviderPlugin[] {
|
|
return resolvePluginProviders(params).filter((provider) => provider.discovery);
|
|
}
|
|
|
|
export function groupPluginDiscoveryProvidersByOrder(
|
|
providers: ProviderPlugin[],
|
|
): Record<ProviderDiscoveryOrder, ProviderPlugin[]> {
|
|
const grouped = {
|
|
simple: [],
|
|
profile: [],
|
|
paired: [],
|
|
late: [],
|
|
} as Record<ProviderDiscoveryOrder, ProviderPlugin[]>;
|
|
|
|
for (const provider of providers) {
|
|
const order = provider.discovery?.order ?? "late";
|
|
grouped[order].push(provider);
|
|
}
|
|
|
|
for (const order of DISCOVERY_ORDER) {
|
|
grouped[order].sort((a, b) => a.label.localeCompare(b.label));
|
|
}
|
|
|
|
return grouped;
|
|
}
|
|
|
|
export function normalizePluginDiscoveryResult(params: {
|
|
provider: ProviderPlugin;
|
|
result:
|
|
| { provider: ModelProviderConfig }
|
|
| { providers: Record<string, ModelProviderConfig> }
|
|
| null
|
|
| undefined;
|
|
}): Record<string, ModelProviderConfig> {
|
|
const result = params.result;
|
|
if (!result) {
|
|
return {};
|
|
}
|
|
|
|
if ("provider" in result) {
|
|
return { [normalizeProviderId(params.provider.id)]: result.provider };
|
|
}
|
|
|
|
const normalized: Record<string, ModelProviderConfig> = {};
|
|
for (const [key, value] of Object.entries(result.providers)) {
|
|
const normalizedKey = normalizeProviderId(key);
|
|
if (!normalizedKey || !value) {
|
|
continue;
|
|
}
|
|
normalized[normalizedKey] = value;
|
|
}
|
|
return normalized;
|
|
}
|