

























1-import { normalizeProviderId } from "../agents/provider-id.js";
21import type { OpenClawConfig } from "../config/types.openclaw.js";
32import {
4-resolvePluginCapabilityProvider,
5-resolvePluginCapabilityProviders,
6-} from "./capability-provider-runtime.js";
3+getRuntimeEmbeddingProviderAdapter,
4+listRuntimeEmbeddingProviderAdapters,
5+readConfiguredProviderApiId,
6+resolveRuntimeEmbeddingProviderLookupIds,
7+} from "./embedding-provider-runtime-shared.js";
78import {
89getRegisteredEmbeddingProvider,
910listRegisteredEmbeddingProviders,
@@ -20,77 +21,47 @@ export function listRegisteredEmbeddingProviderAdapters(): EmbeddingProviderAdap
2021}
21222223export function listEmbeddingProviders(cfg?: OpenClawConfig): EmbeddingProviderAdapter[] {
23-const registered = listRegisteredEmbeddingProviderAdapters();
24-const merged = new Map(registered.map((adapter) => [adapter.id, adapter]));
25-for (const adapter of resolvePluginCapabilityProviders({
24+return listRuntimeEmbeddingProviderAdapters({
2625key: "embeddingProviders",
2726 cfg,
28-})) {
29-if (!merged.has(adapter.id)) {
30-merged.set(adapter.id, adapter);
31-}
32-}
33-return [...merged.values()];
27+registered: listRegisteredEmbeddingProviderAdapters(),
28+});
3429}
353036-function readConfiguredProviderApiId(providerId: string, cfg?: OpenClawConfig): string | undefined {
37-const providers = cfg?.models?.providers;
38-if (!providers) {
39-return undefined;
40-}
41-const normalized = normalizeProviderId(providerId);
42-const providerConfig =
43-providers[providerId] ??
44-Object.entries(providers).find(
45-([candidateId]) => normalizeProviderId(candidateId) === normalized,
46-)?.[1];
47-const api = providerConfig?.api?.trim();
48-if (!api && providerConfig?.baseUrl?.trim()) {
49-return OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID;
50-}
51-if (!api) {
52-return undefined;
53-}
54-const normalizedApi = normalizeProviderId(api);
55-const embeddingProviderId = OPENAI_COMPATIBLE_MODEL_APIS.has(normalizedApi)
56- ? OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID
57- : normalizedApi;
58-return embeddingProviderId && embeddingProviderId !== normalized
59- ? embeddingProviderId
60- : undefined;
31+function resolveConfiguredEmbeddingProviderId(
32+providerId: string,
33+cfg?: OpenClawConfig,
34+): string | undefined {
35+return readConfiguredProviderApiId({
36+ providerId,
37+ cfg,
38+resolveApiProviderId: (normalizedApiId) =>
39+OPENAI_COMPATIBLE_MODEL_APIS.has(normalizedApiId)
40+ ? OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID
41+ : normalizedApiId,
42+resolveMissingApiProviderId: (providerConfig) =>
43+providerConfig.baseUrl?.trim() ? OPENAI_COMPATIBLE_EMBEDDING_PROVIDER_ID : undefined,
44+});
6145}
62466347function resolveEmbeddingProviderLookupIds(id: string, cfg?: OpenClawConfig): string[] {
64-const ids = [id];
65-const apiId = readConfiguredProviderApiId(id, cfg);
66-if (apiId && !ids.some((candidate) => normalizeProviderId(candidate) === apiId)) {
67-ids.push(apiId);
68-}
69-return ids;
48+return resolveRuntimeEmbeddingProviderLookupIds({
49+ id,
50+ cfg,
51+resolveConfiguredProviderId: resolveConfiguredEmbeddingProviderId,
52+});
7053}
71547255export function getEmbeddingProvider(
7356id: string,
7457cfg?: OpenClawConfig,
7558): EmbeddingProviderAdapter | undefined {
76-const ids = resolveEmbeddingProviderLookupIds(id, cfg);
77-for (const candidateId of ids) {
78-const registered = getRegisteredEmbeddingProvider(candidateId);
79-if (registered) {
80-return registered.adapter;
81-}
82-}
83-for (const candidateId of ids) {
84-const provider = resolvePluginCapabilityProvider({
85-key: "embeddingProviders",
86-providerId: candidateId,
87- cfg,
88-});
89-if (provider) {
90-return provider;
91-}
92-}
93-return undefined;
59+return getRuntimeEmbeddingProviderAdapter({
60+key: "embeddingProviders",
61+ cfg,
62+lookupIds: resolveEmbeddingProviderLookupIds(id, cfg),
63+getRegisteredProvider: getRegisteredEmbeddingProvider,
64+});
9465}
95669667export type {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。