feat: add OrcaRouter embedder for hosted semantic search

Add a named OrcaRouterEmbedder mirroring the existing OpenRouterEmbedder:
a production AI gateway that proxies 200+ models on one OpenAI-compatible
endpoint (https://api.orcarouter.ai/v1). Selecting it is a one-line switch:
set ORCAROUTER_API_KEY instead of OPENROUTER_API_KEY.

- get_embedder() prefers OrcaRouter when ORCAROUTER_API_KEY is present
- is_semantic_search_available() now also enables on OrcaRouter keys
- document the new option in README (Alternatif 3) and .env.example

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: jinhao.song <jinhao.song@myflashcloud.com>
This commit is contained in:
jinhao.song
2026-08-06 19:28:02 +08:00
co-authored by Claude
parent e50f109021
commit 5a5c21e01b
5 changed files with 121 additions and 11 deletions
+12 -2
View File
@@ -266,14 +266,24 @@ from bedesten_mcp_module.models import (
from bedesten_mcp_module.enums import BirimAdiEnum
# Semantic Search Module Imports (enabled if any embedding provider is configured)
from semantic_search.embedder import is_semantic_search_available, is_local_embedding_configured
from semantic_search.embedder import (
is_semantic_search_available,
is_local_embedding_configured,
is_openrouter_available,
is_orcarouter_available,
)
SEMANTIC_SEARCH_AVAILABLE = is_semantic_search_available()
if SEMANTIC_SEARCH_AVAILABLE:
from semantic_search.embedder import get_embedder
from semantic_search.vector_store import VectorStore
from semantic_search.processor import DocumentProcessor
provider = "local" if is_local_embedding_configured() else "openrouter"
if is_local_embedding_configured():
provider = "local"
elif is_orcarouter_available():
provider = "orcarouter"
elif is_openrouter_available():
provider = "openrouter"
logger.info(f"Semantic search enabled (provider={provider})")
else:
logger.info("Semantic search disabled (no embedding provider configured)")