# API ConfluentTranslator - Documentation Cette API permet de traduire entre le français et la langue de la Confluence (Ancien Confluent et Proto-Confluent). ## URL de base ``` https://confluent.etheryale.com ``` ## Authentification Toutes les requêtes (sauf `/api/stats`) nécessitent une authentification par clé API : ``` X-API-Key: [CLÉ_API] ``` **Note** : Claude Code a accès à la clé API pour ce projet. Elle n'est pas incluse dans ce document pour des raisons de sécurité. --- ## Endpoints principaux ### 1. Traduire FR → Confluent (avec LLM) Utilise un LLM (Claude ou GPT) pour traduire du français vers le Confluent. **Endpoint** : `POST /translate` **Paramètres** : - `text` (string, requis) : Texte français à traduire - `target` (string, requis) : `"ancien"` ou `"proto"` - `provider` (string, requis) : `"anthropic"` (recommandé) ou `"openai"` - `model` (string, requis) : - Anthropic : `"claude-sonnet-4-20250514"` ou `"claude-haiku-4-20250514"` - OpenAI : `"gpt-4o"` ou `"gpt-4o-mini"` - `temperature` (number, optionnel) : Température du LLM (défaut: 1.0) - `useLexique` (boolean, optionnel) : Utiliser l'analyse contextuelle (défaut: true) **Exemple** : ```bash curl -X POST https://confluent.etheryale.com/translate \ -H "Content-Type: application/json" \ -H "X-API-Key: [CLÉ_API]" \ -d '{ "text": "bonjour", "target": "ancien", "provider": "anthropic", "model": "claude-sonnet-4-20250514" }' ``` **Réponse** : ```json { "layer1": { "translation": "oratosa" }, "layer2": { "wordsFound": [...], "wordsNotFound": [...], "entriesUsed": 15, "tokensUsed": 2500, "tokensSaved": 12000, "savingsPercent": 82.7 }, "layer3": { "analyse": "...", "strategie": "...", "decomposition": "...", "notes": "..." }, "translation": "oratosa" } ``` --- ### 2. Traduire Confluent → FR (lookup direct) Traduction brute mot-à-mot depuis le Confluent vers le français (sans LLM). **Endpoint** : `POST /api/translate/conf2fr` **Paramètres** : - `text` (string, requis) : Texte en Confluent - `variant` (string, optionnel) : `"ancien"` (défaut) ou `"proto"` - `detailed` (boolean, optionnel) : Retourner les détails par mot (défaut: false) **Exemple** : ```bash curl -X POST https://confluent.etheryale.com/api/translate/conf2fr \ -H "Content-Type: application/json" \ -H "X-API-Key: [CLÉ_API]" \ -d '{ "text": "nakuura", "variant": "ancien" }' ``` **Réponse** : ```json { "translation": "enfants du courant", "coverage": 100, "wordsTranslated": 1, "wordsNotTranslated": 0 } ``` --- ### 3. Traduire Confluent → FR (avec raffinage LLM) Traduction mot-à-mot suivie d'un raffinage par LLM pour un français naturel. **Endpoint** : `POST /api/translate/conf2fr/llm` **Paramètres** : - `text` (string, requis) : Texte en Confluent - `variant` (string, optionnel) : `"ancien"` (défaut) ou `"proto"` - `provider` (string, optionnel) : `"anthropic"` (défaut) ou `"openai"` - `model` (string, optionnel) : Modèle à utiliser **Exemple** : ```bash curl -X POST https://confluent.etheryale.com/api/translate/conf2fr/llm \ -H "Content-Type: application/json" \ -H "X-API-Key: [CLÉ_API]" \ -d '{ "text": "nakuura oratosa", "variant": "ancien", "provider": "anthropic", "model": "claude-sonnet-4-20250514" }' ``` **Réponse** : ```json { "confluentText": "nakuura oratosa", "rawTranslation": "enfants du courant bonjour", "refinedTranslation": "Les enfants du courant vous saluent", "translation": "Les enfants du courant vous saluent", "coverage": 100, "wordsTranslated": 2, "wordsNotTranslated": 0 } ``` --- ### 4. Rechercher un mot dans le lexique Recherche bidirectionnelle dans le lexique (FR→CF ou CF→FR). **Endpoint** : `GET /api/search` **Paramètres** : - `q` (string, requis) : Mot à rechercher - `variant` (string, optionnel) : `"ancien"` (défaut) ou `"proto"` - `direction` (string, optionnel) : `"fr2conf"` (défaut) ou `"conf2fr"` **Exemple** : ```bash curl "https://confluent.etheryale.com/api/search?q=enfant&variant=ancien&direction=fr2conf" \ -H "X-API-Key: [CLÉ_API]" ``` **Réponse** : ```json { "query": "enfant", "variant": "ancien", "direction": "fr2conf", "results": [ { "mot": "enfant", "traductions": [ { "confluent": "kuura", "type": "racine", "contexte": "jeune humain" } ] } ] } ``` --- ### 5. Analyser la couverture lexicale Analyse un texte français pour voir combien de mots sont présents dans le lexique. **Endpoint** : `POST /api/analyze/coverage` **Paramètres** : - `text` (string, requis) : Texte français à analyser - `target` (string, optionnel) : `"ancien"` (défaut) ou `"proto"` **Exemple** : ```bash curl -X POST https://confluent.etheryale.com/api/analyze/coverage \ -H "Content-Type: application/json" \ -H "X-API-Key: [CLÉ_API]" \ -d '{ "text": "Les enfants du courant pêchent dans la rivière", "target": "ancien" }' ``` **Réponse** : ```json { "coverage": 85.7, "found": [ {"word": "enfants", "confluent": "nakuura", "type": "composition"}, {"word": "courant", "confluent": "kuuraa", "type": "racine"} ], "missing": [ {"word": "pêchent"} ], "stats": { "totalWords": 7, "uniqueWords": 7, "foundCount": 6, "missingCount": 1 }, "recommendation": "Good coverage - context only" } ``` --- ### 6. Statistiques du lexique Récupère les statistiques globales du lexique (endpoint public, pas d'authentification). **Endpoint** : `GET /api/stats` **Paramètres** : - `variant` (string, optionnel) : `"ancien"` (défaut) ou `"proto"` **Exemple** : ```bash curl "https://confluent.etheryale.com/api/stats?variant=ancien" ``` **Réponse** : ```json { "motsCF": 450, "motsFR": 520, "totalTraductions": 680, "racines": 180, "racinesSacrees": 35, "racinesStandards": 145, "compositions": 250, "verbes": 45, "particules": 30, "nomsPropes": 25 } ``` --- ## Utilisation dans du code JavaScript ```javascript const API_KEY = '[CLÉ_API]'; const BASE_URL = 'https://confluent.etheryale.com'; // Traduire FR → Confluent async function translateToConfluent(text) { const response = await fetch(`${BASE_URL}/translate`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY }, body: JSON.stringify({ text: text, target: "ancien", provider: "anthropic", model: "claude-sonnet-4-20250514" }) }); const data = await response.json(); return data.translation; } // Traduire Confluent → FR async function translateFromConfluent(text) { const response = await fetch(`${BASE_URL}/api/translate/conf2fr`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY }, body: JSON.stringify({ text: text, variant: "ancien" }) }); const data = await response.json(); return data.translation; } // Rechercher un mot async function searchWord(word) { const response = await fetch( `${BASE_URL}/api/search?q=${encodeURIComponent(word)}&variant=ancien&direction=fr2conf`, { headers: { 'X-API-Key': API_KEY } } ); const data = await response.json(); return data.results; } ``` --- ## Notes importantes - **Rate limiting** : L'API suit l'utilisation des tokens LLM. Vérifie `/api/llm/limit` pour connaître ton quota. - **Variantes** : - `"ancien"` : Ancien Confluent (langue mature, recommandé) - `"proto"` : Proto-Confluent (langue primitive) - **Provider recommandé** : Anthropic (Claude) pour la meilleure qualité de traduction - **Analyse contextuelle** : Active par défaut, envoie uniquement les mots pertinents au LLM (économise ~80% de tokens) --- ## Ressources - **Interface web** : https://confluent.etheryale.com - **Interface admin** : https://confluent.etheryale.com/admin.html - **Documentation linguistique** : Voir le dépôt `confluent/` pour les détails de la langue