mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-07 21:10:43 +00:00
85 lines
2.6 KiB
TypeScript
85 lines
2.6 KiB
TypeScript
import { normalizeProviderId } from "../agents/provider-id.js";
|
|
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
|
import {
|
|
resolvePluginCapabilityProvider,
|
|
resolvePluginCapabilityProviders,
|
|
} from "./capability-provider-runtime.js";
|
|
import {
|
|
getRegisteredMemoryEmbeddingProvider,
|
|
listRegisteredMemoryEmbeddingProviders,
|
|
type MemoryEmbeddingProviderAdapter,
|
|
} from "./memory-embedding-providers.js";
|
|
|
|
export { listRegisteredMemoryEmbeddingProviders };
|
|
|
|
export function listRegisteredMemoryEmbeddingProviderAdapters(): MemoryEmbeddingProviderAdapter[] {
|
|
return listRegisteredMemoryEmbeddingProviders().map((entry) => entry.adapter);
|
|
}
|
|
export function listMemoryEmbeddingProviders(
|
|
cfg?: OpenClawConfig,
|
|
): MemoryEmbeddingProviderAdapter[] {
|
|
const registered = listRegisteredMemoryEmbeddingProviderAdapters();
|
|
const merged = new Map(registered.map((adapter) => [adapter.id, adapter]));
|
|
for (const adapter of resolvePluginCapabilityProviders({
|
|
key: "memoryEmbeddingProviders",
|
|
cfg,
|
|
})) {
|
|
if (!merged.has(adapter.id)) {
|
|
merged.set(adapter.id, adapter);
|
|
}
|
|
}
|
|
return [...merged.values()];
|
|
}
|
|
|
|
function readConfiguredProviderApiId(providerId: string, cfg?: OpenClawConfig): string | undefined {
|
|
const providers = cfg?.models?.providers;
|
|
if (!providers) {
|
|
return undefined;
|
|
}
|
|
const normalized = normalizeProviderId(providerId);
|
|
const providerConfig =
|
|
providers[providerId] ??
|
|
Object.entries(providers).find(
|
|
([candidateId]) => normalizeProviderId(candidateId) === normalized,
|
|
)?.[1];
|
|
const api = providerConfig?.api?.trim();
|
|
if (!api) {
|
|
return undefined;
|
|
}
|
|
const normalizedApi = normalizeProviderId(api);
|
|
return normalizedApi && normalizedApi !== normalized ? normalizedApi : undefined;
|
|
}
|
|
|
|
function resolveMemoryEmbeddingProviderLookupIds(id: string, cfg?: OpenClawConfig): string[] {
|
|
const ids = [id];
|
|
const apiId = readConfiguredProviderApiId(id, cfg);
|
|
if (apiId && !ids.some((candidate) => normalizeProviderId(candidate) === apiId)) {
|
|
ids.push(apiId);
|
|
}
|
|
return ids;
|
|
}
|
|
|
|
export function getMemoryEmbeddingProvider(
|
|
id: string,
|
|
cfg?: OpenClawConfig,
|
|
): MemoryEmbeddingProviderAdapter | undefined {
|
|
const ids = resolveMemoryEmbeddingProviderLookupIds(id, cfg);
|
|
for (const candidateId of ids) {
|
|
const registered = getRegisteredMemoryEmbeddingProvider(candidateId);
|
|
if (registered) {
|
|
return registered.adapter;
|
|
}
|
|
}
|
|
for (const candidateId of ids) {
|
|
const provider = resolvePluginCapabilityProvider({
|
|
key: "memoryEmbeddingProviders",
|
|
providerId: candidateId,
|
|
cfg,
|
|
});
|
|
if (provider) {
|
|
return provider;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|