From 42e55c0b9595f5d328f90959d04c2417deb3738e Mon Sep 17 00:00:00 2001 From: Anatoly Koptev Date: Fri, 6 Feb 2026 17:02:30 -0800 Subject: [PATCH] feat: Add VoyageAI embedder support - Map 'voyageai' backend to universal_api embedder - Support VOYAGE_API_KEY environment variable - Auto-configure base_url for VoyageAI API VoyageAI provides state-of-the-art embeddings with better semantic search quality than standard models. Usage: export MOS_EMBEDDER_BACKEND=voyageai export VOYAGE_API_KEY=pa-your-api-key-here export MOS_EMBEDDER_MODEL=voyage-3-lite Tested with voyage-3-lite model in production. Co-Authored-By: Claude Opus 4.6 --- src/memos/api/config.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/memos/api/config.py b/src/memos/api/config.py index d27c391ab..d3d39c255 100644 --- a/src/memos/api/config.py +++ b/src/memos/api/config.py @@ -431,15 +431,30 @@ def get_embedder_config() -> dict[str, Any]: """Get embedder configuration.""" embedder_backend = os.getenv("MOS_EMBEDDER_BACKEND", "ollama") - if embedder_backend == "universal_api": + # Map voyageai to universal_api + if embedder_backend in ["universal_api", "voyageai"]: + # Handle API Key - support VOYAGE_API_KEY for convenience + api_key = os.getenv("MOS_EMBEDDER_API_KEY") + if not api_key and embedder_backend == "voyageai": + api_key = os.getenv("VOYAGE_API_KEY") + if not api_key: + api_key = "sk-xxxx" + + # Auto-configure VoyageAI base URL + base_url = os.getenv("MOS_EMBEDDER_API_BASE") + if not base_url and embedder_backend == "voyageai": + base_url = "https://api.voyageai.com/v1" + if not base_url: + base_url = "http://openai.com" + return { "backend": "universal_api", "config": { "provider": os.getenv("MOS_EMBEDDER_PROVIDER", "openai"), - "api_key": os.getenv("MOS_EMBEDDER_API_KEY", "sk-xxxx"), + "api_key": api_key, "model_name_or_path": os.getenv("MOS_EMBEDDER_MODEL", "text-embedding-3-large"), "headers_extra": json.loads(os.getenv("MOS_EMBEDDER_HEADERS_EXTRA", "{}")), - "base_url": os.getenv("MOS_EMBEDDER_API_BASE", "http://openai.com"), + "base_url": base_url, "backup_client": os.getenv("MOS_EMBEDDER_BACKUP_CLIENT", "false").lower() == "true", "backup_base_url": os.getenv(