docs(semantic_search): recommend multilingual-e5-large for Turkish (#22)

Different embedding model families need different prompt prefixes —
Gemini wants "task: ... | query: ..." and "title: ... | text: ...",
e5 wants "query: ..." / "passage: ...", and using the wrong one
silently degrades retrieval quality. Add EMBEDDING_PROMPT_STYLE
(gemini/e5/raw) so the prefix matches the chosen model.

Defaults: gemini for OpenRouter (matches the existing default
google/gemini-embedding-001), e5 for the local provider (matches
the recommended multilingual-e5-large setup). Both override via
env var or constructor.

Update README and .env.example to recommend intfloat/multilingual-
e5-large served by HuggingFace Text Embeddings Inference (one
docker run) as the Turkish-optimized local setup, with a clear env
var reference table. Ollama and OpenRouter remain documented as
alternatives.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
saidsurucu
2026-05-03 01:55:42 +03:00
co-authored by Claude Opus 4.7
parent fb29146755
commit 6b781b61d2
3 changed files with 155 additions and 41 deletions
+22 -7
View File
@@ -89,15 +89,30 @@ OPENROUTER_API_KEY=sk-or-v1-your_openrouter_api_key_here
# OPENROUTER_EMBEDDING_MODEL=google/gemini-embedding-001
# OPENROUTER_EMBEDDING_DIMENSION=3072
# --- Option B: Local OpenAI-compatible server (Ollama / llama.cpp / vLLM) -----
# Uncomment to use your own server instead of OpenRouter (no API key required).
# Defaults target Ollama with nomic-embed-text. For Turkish, bge-m3 (1024 dims)
# tends to work better — pull it with: `ollama pull bge-m3`
# --- Option B: Local OpenAI-compatible server (no API key required) ----------
# Recommended for Turkish: intfloat/multilingual-e5-large served by HuggingFace
# Text Embeddings Inference (TEI). One-line setup:
#
# docker run -p 8080:80 ghcr.io/huggingface/text-embeddings-inference:latest \
# --model-id intfloat/multilingual-e5-large
#
# Then uncomment the block below. Other model families work too — set
# EMBEDDING_PROMPT_STYLE to match: e5 / gemini / raw.
#
# EMBEDDING_PROVIDER=local
# LOCAL_EMBEDDING_BASE_URL=http://localhost:11434/v1
# LOCAL_EMBEDDING_MODEL=nomic-embed-text
# LOCAL_EMBEDDING_DIMENSION=768
# LOCAL_EMBEDDING_BASE_URL=http://localhost:8080/v1
# LOCAL_EMBEDDING_MODEL=intfloat/multilingual-e5-large
# LOCAL_EMBEDDING_DIMENSION=1024
# EMBEDDING_PROMPT_STYLE=e5
# LOCAL_EMBEDDING_API_KEY= # most local servers ignore this
#
# Ollama fallback (if you prefer Ollama and don't need top Turkish quality):
# ollama serve && ollama pull nomic-embed-text
# EMBEDDING_PROVIDER=local
# LOCAL_EMBEDDING_BASE_URL=http://localhost:11434/v1
# LOCAL_EMBEDDING_MODEL=nomic-embed-text
# LOCAL_EMBEDDING_DIMENSION=768
# EMBEDDING_PROMPT_STYLE=raw # nomic uses its own search_query/search_document
# =============================================================================
# USAGE INSTRUCTIONS