UNPKG

socraticode

Version:

SocratiCode — MCP server for local codebase indexing, semantic search, and code dependency graphs. All private, all local via Docker.

74 lines • 3.27 kB
// SPDX-License-Identifier: AGPL-3.0-only // Copyright (C) 2026 Giancarlo Erra - Altaire Limited /** * Embedding provider factory. * * All embedding providers implement the EmbeddingProvider interface (defined * in embedding-types.ts), allowing the rest of the codebase to be agnostic * about which backend generates the vectors. * * Providers: * - ollama (default) — local Ollama (Docker or external) * - openai — OpenAI Embeddings API (text-embedding-3-small, etc.) * - google — Google Generative AI Embedding API (gemini-embedding-001, etc.) * - lmstudio — local LM Studio server via OpenAI-compatible API * - litellm — LiteLLM proxy (OpenAI-compatible gateway in front of 100+ providers) */ import { getEmbeddingConfig } from "./embedding-config.js"; import { logger } from "./logger.js"; // ── Factory ────────────────────────────────────────────────────────────── let _provider = null; let _providerName = null; /** * Get (or create) the active embedding provider singleton. * Provider is selected based on EMBEDDING_PROVIDER env var. * @param onProgress Optional callback for reporting infrastructure setup progress */ export async function getEmbeddingProvider(onProgress) { const config = getEmbeddingConfig(); // Recreate if provider changed (e.g. after config reset in tests) if (_provider && _providerName === config.embeddingProvider) { return _provider; } const name = config.embeddingProvider; logger.info("Initializing embedding provider", { provider: name }); switch (name) { case "ollama": { // Dynamic imports avoid loading all provider SDKs at startup. const { OllamaEmbeddingProvider } = await import("./provider-ollama.js"); _provider = new OllamaEmbeddingProvider(onProgress); break; } case "openai": { const { OpenAIEmbeddingProvider } = await import("./provider-openai.js"); _provider = new OpenAIEmbeddingProvider(); break; } case "google": { const { GoogleEmbeddingProvider } = await import("./provider-google.js"); _provider = new GoogleEmbeddingProvider(); break; } case "lmstudio": { const { LMStudioEmbeddingProvider } = await import("./provider-lmstudio.js"); _provider = new LMStudioEmbeddingProvider(); break; } case "litellm": { const { LiteLLMEmbeddingProvider } = await import("./provider-litellm.js"); _provider = new LiteLLMEmbeddingProvider(); break; } default: throw new Error(`Unknown embedding provider: "${name}". Must be "ollama", "openai", "google", "lmstudio", or "litellm".`); } _providerName = name; // biome-ignore lint/style/noNonNullAssertion: _provider is guaranteed set by the switch above return _provider; } /** Reset the provider singleton (for testing). */ export function resetEmbeddingProvider() { _provider = null; _providerName = null; } //# sourceMappingURL=embedding-provider.js.map