refactor: make memory embedding adapters generic

This commit is contained in:
Peter Steinberger
2026-03-27 02:01:07 +00:00
parent 42be3fb059
commit 7a35bca2ec
12 changed files with 233 additions and 41 deletions

View File

@@ -12,7 +12,10 @@ import {
type MemoryEmbeddingProviderCreateOptions,
type MemoryEmbeddingProviderRuntime,
} from "../engine-host-api.js";
import { canAutoSelectLocal } from "./provider-adapters.js";
import {
canAutoSelectLocal,
getBuiltinMemoryEmbeddingProviderAdapter,
} from "./provider-adapters.js";
export {
DEFAULT_GEMINI_EMBEDDING_MODEL,
@@ -92,6 +95,15 @@ function resolveProviderModel(
return adapter.defaultModel ?? "";
}
export function resolveEmbeddingProviderFallbackModel(
providerId: string,
fallbackSourceModel: string,
): string {
const adapter =
getMemoryEmbeddingProvider(providerId) ?? getBuiltinMemoryEmbeddingProviderAdapter(providerId);
return adapter?.defaultModel ?? fallbackSourceModel;
}
async function createWithAdapter(
adapter: MemoryEmbeddingProviderAdapter,
options: CreateEmbeddingProviderOptions,

View File

@@ -32,14 +32,10 @@ import {
} from "../engine-host-api.js";
import {
createEmbeddingProvider,
DEFAULT_GEMINI_EMBEDDING_MODEL,
DEFAULT_MISTRAL_EMBEDDING_MODEL,
DEFAULT_OLLAMA_EMBEDDING_MODEL,
DEFAULT_OPENAI_EMBEDDING_MODEL,
DEFAULT_VOYAGE_EMBEDDING_MODEL,
type EmbeddingProvider,
type EmbeddingProviderId,
type EmbeddingProviderRuntime,
resolveEmbeddingProviderFallbackModel,
} from "./embeddings.js";
import { buildFileEntry } from "./internal.js";
import { loadSqliteVecExtension } from "./sqlite-vec.js";
@@ -1119,18 +1115,7 @@ export abstract class MemoryManagerSyncOps {
}
const fallbackFrom = this.provider.id as EmbeddingProviderId;
const fallbackModel =
fallback === "gemini"
? DEFAULT_GEMINI_EMBEDDING_MODEL
: fallback === "openai"
? DEFAULT_OPENAI_EMBEDDING_MODEL
: fallback === "voyage"
? DEFAULT_VOYAGE_EMBEDDING_MODEL
: fallback === "mistral"
? DEFAULT_MISTRAL_EMBEDDING_MODEL
: fallback === "ollama"
? DEFAULT_OLLAMA_EMBEDDING_MODEL
: this.settings.model;
const fallbackModel = resolveEmbeddingProviderFallbackModel(fallback, this.settings.model);
const fallbackResult = await createEmbeddingProvider({
config: this.cfg,

View File

@@ -334,6 +334,16 @@ export const builtinMemoryEmbeddingProviderAdapters = [
ollamaAdapter,
] as const;
const builtinMemoryEmbeddingProviderAdapterById = new Map(
builtinMemoryEmbeddingProviderAdapters.map((adapter) => [adapter.id, adapter]),
);
export function getBuiltinMemoryEmbeddingProviderAdapter(
id: string,
): MemoryEmbeddingProviderAdapter | undefined {
return builtinMemoryEmbeddingProviderAdapterById.get(id);
}
export function registerBuiltInMemoryEmbeddingProviders(register: {
registerMemoryEmbeddingProvider: (adapter: MemoryEmbeddingProviderAdapter) => void;
}): void {