mirror of https://github.com/openclaw/openclaw.git
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import type { ModelProviderConfig } from "../config/types.js";
|
|
import type { ProviderCatalogContext, ProviderCatalogResult } from "./types.js";
|
|
|
|
export function findCatalogTemplate(params: {
|
|
entries: ReadonlyArray<{ provider: string; id: string }>;
|
|
providerId: string;
|
|
templateIds: readonly string[];
|
|
}) {
|
|
return params.templateIds
|
|
.map((templateId) =>
|
|
params.entries.find(
|
|
(entry) =>
|
|
entry.provider.toLowerCase() === params.providerId.toLowerCase() &&
|
|
entry.id.toLowerCase() === templateId.toLowerCase(),
|
|
),
|
|
)
|
|
.find((entry) => entry !== undefined);
|
|
}
|
|
|
|
export async function buildSingleProviderApiKeyCatalog(params: {
|
|
ctx: ProviderCatalogContext;
|
|
providerId: string;
|
|
buildProvider: () => ModelProviderConfig | Promise<ModelProviderConfig>;
|
|
allowExplicitBaseUrl?: boolean;
|
|
}): Promise<ProviderCatalogResult> {
|
|
const apiKey = params.ctx.resolveProviderApiKey(params.providerId).apiKey;
|
|
if (!apiKey) {
|
|
return null;
|
|
}
|
|
|
|
const explicitProvider = params.allowExplicitBaseUrl
|
|
? params.ctx.config.models?.providers?.[params.providerId]
|
|
: undefined;
|
|
const explicitBaseUrl =
|
|
typeof explicitProvider?.baseUrl === "string" ? explicitProvider.baseUrl.trim() : "";
|
|
|
|
return {
|
|
provider: {
|
|
...(await params.buildProvider()),
|
|
...(explicitBaseUrl ? { baseUrl: explicitBaseUrl } : {}),
|
|
apiKey,
|
|
},
|
|
};
|
|
}
|
|
|
|
export async function buildPairedProviderApiKeyCatalog(params: {
|
|
ctx: ProviderCatalogContext;
|
|
providerId: string;
|
|
buildProviders: () =>
|
|
| Record<string, ModelProviderConfig>
|
|
| Promise<Record<string, ModelProviderConfig>>;
|
|
}): Promise<ProviderCatalogResult> {
|
|
const apiKey = params.ctx.resolveProviderApiKey(params.providerId).apiKey;
|
|
if (!apiKey) {
|
|
return null;
|
|
}
|
|
|
|
const providers = await params.buildProviders();
|
|
return {
|
|
providers: Object.fromEntries(
|
|
Object.entries(providers).map(([id, provider]) => [id, { ...provider, apiKey }]),
|
|
),
|
|
};
|
|
}
|