Ce guide explique comment configurer les différents providers de modèles de langage (LLM) et d'embeddings dans Devana.
Devana permet de configurer différents providers pour :
La configuration se fait via des variables d'environnement dans votre fichier .env.
Ajoutez ces variables dans votre fichier .env :
# Configuration principale des embeddings
EMBEDDING_JSON='{"model":"nom-du-modele","apiKey":"votre-cle-api"}'
# (Optionnel) Configuration spécifique pour l'indexation
EMBEDDING_INDEX_JSON='{"model":"nom-du-modele","apiKey":"votre-cle-api"}'
Note : Si EMBEDDING_INDEX_JSON n'est pas défini, EMBEDDING_JSON sera utilisé pour l'indexation et l'inférence.
EMBEDDING_JSON='{"model":"text-embedding-3-large","apiKey":"sk-..."}'
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle | "text-embedding-3-large" | "text-embedding-3-small" |
apiKey | Clé API OpenAI | "sk-..." | Variable env OPENAI_API_KEY |
serverURL | URL du serveur (optionnel) | "https://api.openai.com/v1" | API OpenAI |
dimensions | Dimension des vecteurs | 3072 | Auto selon le modèle |
batchSize | Taille des lots | 100 | 512 |
EMBEDDING_JSON='{"model":"intfloat/e5-mistral-7b-instruct","apiKey":"votre-cle","serverURL":"http://votre-serveur.com/v1"}'
⚠️ Important : L'URL doit se terminer par /v1 si votre serveur l'attend. Par exemple, si votre endpoint est http://example.com/v1/embeddings, utilisez "serverURL":"http://example.com/v1".
EMBEDDING_JSON='{"model":"mistral-embed","apiKey":"votre-cle-mistral"}'
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle | "mistral-embed" | "mistral-embed" |
apiKey | Clé API Mistral | "abc123..." | - |
serverURL | URL du serveur (optionnel) | "https://api.mistral.ai" | API Mistral |
batchSize | Taille des lots | 50 | 100 |
EMBEDDING_JSON='{"model":"nomic-embed-text","baseURL":"http://localhost:11434"}'
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle Ollama | "nomic-embed-text" | - |
baseURL | URL du serveur Ollama | "http://localhost:11434" | "http://localhost:11434" |
Note : Le modèle doit être installé localement avec ollama pull nom-du-modele.
Les modèles de chat se configurent principalement via l'interface d'administration de Devana :
Vous pouvez également définir les clés API directement dans le .env :
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
MISTRAL_API_KEY=...
{
"model": "gpt-4o",
"apiKey": "sk-...",
"temperature": 0.7,
"maxTokens": 4096
}
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle | "gpt-4o" | "gpt-4o" |
apiKey | Clé API OpenAI | "sk-..." | Variable env OPENAI_API_KEY |
serverURL | URL du serveur | "https://api.openai.com/v1" | API OpenAI |
temperature | Créativité (0-2) | 0.7 | - |
maxTokens | Tokens max à générer | 4096 | - |
topP | Top P sampling | 0.9 | - |
{
"model": "llama-3-70b",
"apiKey": "votre-cle",
"serverURL": "http://votre-serveur.com/v1",
"temperature": 0.7,
"maxTokens": 8192
}
{
"model": "mistral-large-latest",
"apiKey": "votre-cle-mistral",
"temperature": 0.7
}
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle | "mistral-large-latest" | "mistral-large-latest" |
apiKey | Clé API Mistral | "abc..." | - |
serverURL | URL du serveur | "https://api.mistral.ai" | API Mistral |
temperature | Créativité (0-1) | 0.7 | - |
maxTokens | Tokens max à générer | 8192 | - |
safePrompt | Mode sécurisé | true | false |
{
"model": "claude-3-5-sonnet-20241022",
"apiKey": "sk-ant-...",
"temperature": 0.7,
"maxTokens": 8192
}
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle | "claude-3-5-sonnet-20241022" | "claude-3-5-sonnet-20241022" |
apiKey | Clé API Anthropic | "sk-ant-..." | Variable env ANTHROPIC_API_KEY |
temperature | Créativité (0-1) | 0.7 | - |
maxTokens | Tokens max à générer | 8192 | 4096 |
topP | Top P sampling | 0.9 | - |
{
"model": "llama3:70b",
"baseURL": "http://localhost:11434",
"temperature": 0.7
}
| Champ | Description | Exemple | Par défaut |
|---|---|---|---|
model | Nom du modèle Ollama | "llama3:70b" | - |
baseURL | URL du serveur Ollama | "http://localhost:11434" | "http://localhost:11434" |
temperature | Créativité | 0.7 | - |
numPredict | Tokens max | 2048 | - |
# Embeddings
EMBEDDING_JSON='{"model":"text-embedding-3-large","apiKey":"sk-..."}'
# Chat (via variable d'environnement)
OPENAI_API_KEY=sk-...
# Embeddings
EMBEDDING_JSON='{"model":"mistral-embed","apiKey":"votre-cle-mistral"}'
# Chat (via variable d'environnement)
MISTRAL_API_KEY=votre-cle-mistral
# Embeddings
EMBEDDING_JSON='{"model":"nomic-embed-text","baseURL":"http://localhost:11434"}'
# Chat (via custom model dans l'interface)
# Model: llama3:70b
# Base URL: http://localhost:11434
# OpenAI pour les embeddings (qualité)
EMBEDDING_JSON='{"model":"text-embedding-3-large","apiKey":"sk-..."}'
# Anthropic pour le chat (Claude)
ANTHROPIC_API_KEY=sk-ant-...
# Serveur vLLM ou LiteLLM avec un modèle open source
EMBEDDING_JSON='{"model":"intfloat/e5-mistral-7b-instruct","apiKey":"votre-cle","serverURL":"http://embeddings.example.com/v1"}'
# Modèle performant pour l'indexation (fait une seule fois)
EMBEDDING_INDEX_JSON='{"model":"text-embedding-3-large","apiKey":"sk-..."}'
# Modèle rapide pour l'inférence (utilisé à chaque recherche)
EMBEDDING_JSON='{"model":"text-embedding-3-small","apiKey":"sk-..."}'
Symptôme :
Error: 404 status code (no body)
Cause : L'URL du serveur est incorrecte.
Solution :
Vérifiez que votre serverURL se termine par /v1 si votre serveur l'attend :
# ❌ Incorrect (si le serveur attend /v1)
EMBEDDING_JSON='{"serverURL":"http://embeddings.example.com"}'
# ✅ Correct
EMBEDDING_JSON='{"serverURL":"http://embeddings.example.com/v1"}'
Pour tester votre endpoint :
curl -X POST http://embeddings.example.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer votre-cle" \
-d '{"input":"test","model":"nom-du-modele"}'
Symptôme :
Error: 401 Unauthorized
Cause : La clé API est incorrecte ou manquante.
Solutions :
sk-sk-ant-Symptôme :
Unexpected token in JSON
Cause : Le JSON dans le .env n'est pas correctement formaté.
Solution :
Utilisez toujours des quotes simples autour du JSON dans le .env :
# ❌ Incorrect (sans quotes)
EMBEDDING_JSON={"model":"xxx","apiKey":"xxx"}
# ✅ Correct (avec quotes simples)
EMBEDDING_JSON='{"model":"xxx","apiKey":"xxx"}'
Symptôme :
Model not found
Cause : Le nom du modèle est incorrect.
Solutions :
Pour OpenAI :
gpt-4o, gpt-4-turbo, text-embedding-3-largePour Mistral :
mistral-large-latest, mistral-medium, mistral-embedPour Ollama :
ollama listollama pull llama3Pour serveurs custom :
curl pour confirmer le nom du modèleSymptôme :
Request timeout
Cause : Le serveur met trop de temps à répondre.
Solution :
Augmentez le timeout dans votre configuration :
{
"model": "votre-modele",
"apiKey": "votre-cle",
"timeout": 60000
}
Le timeout est en millisecondes (60000 = 60 secondes).
Symptôme :
Le champ modelName ou endpoint ne fonctionne pas.
Solution :
Utilisez les champs standards pour une meilleure compatibilité :
model au lieu de modelNameserverURL au lieu de endpointLes anciens champs sont toujours supportés, mais les nouveaux sont recommandés :
{
"model": "votre-modele",
"serverURL": "http://example.com/v1"
}
Créez un fichier test et observez les logs :
# Démarrez le serveur
yarn dev
# Uploadez un fichier via l'interface
# Observez les logs pour vérifier que l'embedding fonctionne
Les logs devraient afficher :
[INFO] Content chunked
[DEBUG] Generating embedding for chunk
[DEBUG] Chunk embedded and saved successfully
Testez via l'interface de chat de Devana :
.env.env dans votre .gitignoretext-embedding-3-small pour l'inférence rapidetext-embedding-3-large pour l'indexation de qualitébatchSize selon vos besoins (100-512 recommandé)Pour toute question ou problème :