À propos
3amia · AI — C'est quoi ?
3amia · AI est un dictionnaire collaboratif des dialectes arabes, construit par et pour la communauté. Chaque mot est documenté avec exemples, schèmes et traductions — grâce aux contributions de milliers de locuteurs.
3 772
mots
11
dialectes
0
contributions
3amia · AI doit son nom à deux racines arabes : زاد (zaada, «augmenter», «enrichir») et نا (na, «nous»). Littéralement : « Enrichissons ensemble ».
La 3amiya (l'arabe dialectal) est la langue du quotidien pour plus de 400 millions de personnes. Pourtant, elle est rarement documentée de façon structurée. Ce projet cherche à changer ça, un mot à la fois.
Chaque mot peut être accompagné d'une traduction française, d'un exemple d'utilisation, de ses variantes morphologiques et de ses équivalents dans d'autres dialectes.
Chaque contribution est relue et validée par l'équipe avant publication, pour garantir la qualité et la richesse de chaque fiche.
Le problème
Pourquoi ce dictionnaire ?
Plus de 400 millions de personnes parlent l'arabe dialectal au quotidien : tunisien, marocain, algérien, égyptien, levantin… Pourtant, aucune ressource structurée n'existait pour documenter ces langues vivantes de façon ouverte et collaborative.
L'arabe classique (MSA) est bien documenté, mais personne ne l'utilise à la maison. Les dialectes, eux, évoluent, se mélangent, s'inventent — et disparaissent si on ne les note pas. Ce projet est une tentative de changer ça, un mot à la fois.
Comment contribuer
Ajouter un mot en 30 secondes
- 1
Ouvre le formulaire
Va sur /ajouter — pas besoin de compte ni d'inscription.
- 2
Remplis les champs
Le mot en arabe, sa traduction française, le dialecte. Un exemple d'usage si tu l'as.
- 3
Envoie
La contribution est examinée par l'équipe et publiée sous 24–48h.
Processus de validation
De la soumission à la publication
Détection des doublons
La contribution est comparée aux mots déjà en base — insensible aux diacritiques arabes.
Vérification de la translittération
Le système Maghreb chiffré (3=ع, 7=ح, 9=ق…) est validé automatiquement.
Analyse morphologique IA
Gemini propose le schème et la racine. L'admin les valide ou les corrige.
Publication
Une fois validé, le mot est publié et visible dans le dictionnaire sous 24–48h.
Dialectes couverts
Feuille de route
Recherche par racine consonantique
Explore la famille morphologique complète d'un mot.
Module QCM
Teste ton vocabulaire dialectal avec des quiz thématiques.
Expansion des dialectes
Algérien, marocain, égyptien… enrichissement en cours.
Audio & prononciation
Enregistrements natifs pour chaque mot.
Application mobile
Accès hors-ligne et notification "mot du jour".
Dernières nouveautés
Voir tout l'historique →- ●scripts/test_groq_vision.py — conclusion définitive : qwen/qwen3.6-27b non viable sur Groq on_demand : campagne de tests en 5 runs (HTTP 401 → 200 thinking tronqué → 413 TPM → 200 thinking tronqué → 400 "thinking unsupported"). Résultat : aucun mécanisme API ne permet de désactiver le thinking sur ce modèle via Groq — /no_think ignoré, "thinking": {"budget_tokens": 0} → HTTP 400, message système prohibitif → sans effet. Le thinking consomme les 4096 tokens entiers avant d'émettre le moindre JSON (finish_reason: "length" systématique). La limite TPM on_demand (8000) interdit par ailleurs max_completion_tokens > ~6000 (HTTP 413). Le script est conservé à titre documentaire avec les commentaires d'explication. Gemini reste le seul provider OCR viable. Parsing défensif <think>...</think> et strip avant { ajoutés au cas où un futur modèle émettrait un résidu de thinking.
- ●scripts/test_groq_vision.py (script jetable) : test Groq Vision sur une seule image Drive (dossier Tounsi) avec le même PROMPT_VISION que le pipeline principal. Modèle qwen/qwen3.6-27b (Qwen 3.6 27B, multimodal vision, actif sur Groq août 2026 — llama-4-scout et llama-4-maverick dépréciés mars 2026). Auth Drive identique à scan_drive_import.py (priorité GOOGLE_SERVICE_ACCOUNT_JSON). Affiche la réponse JSON brute + parsing des entrées extraites + usage tokens. scan_drive_import.py inchangé.
- ●.github/workflows/test-groq.yml : workflow GitHub Actions workflow_dispatch uniquement (pas de cron). Secrets : GROQ_API_KEY + GOOGLE_SERVICE_ACCOUNT_JSON. Options filename (image spécifique) et verbose (détails HTTP). Permet de déclencher le test depuis GitHub mobile sans clone local.
- ●scan-import.yml — cron 06h → 09h UTC : le cron quotidien est décalé de 0 6 * * * à 0 9 * * * pour tourner après le reset du quota gratuit Gemini 2.5 Flash (~08h UTC / 00h PST). Le modèle utilisé (gemini-2.5-flash, ~1500 RPD sur le palier gratuit) était déjà le bon — aucun changement de modèle nécessaire.
- ●scan_drive_import.py — prompt Gemini : traduction EN→FR obligatoire : section "TRADUCTION FRANÇAISE — OBLIGATOIRE" ajoutée au prompt Vision. Gemini traduit maintenant la glose anglaise (ex: "clan, tribe") en français ("clan, tribu") quand aucune traduction FR n'est directement visible. translation_fr ne doit jamais être null si un sens est lisible sur l'image. Même règle pour example_fr. Résout le problème de toutes les entrées classées low_confidence alors que Gemini extrayait bien les données (mais en anglais uniquement).
- ●scan_drive_import.py — seuil low_confidence assoupli : has_required ne vérifie plus que word_ar et translation_fr. example_ar et pos_type absents ne classent plus une entrée en low_confidence — leur absence génère un warning mais la fiche reste extracted_new si les deux champs fondamentaux sont présents.
- ●scan_drive_import.py — retry Gemini sur quota (429) : au lieu d'un exit immédiat sur 429, le script tente jusqu'à 2 retries avec un backoff progressif (65s, 130s) pour laisser le fenêtrage RPM se réinitialiser. Exit 2 seulement après la 3ème tentative échouée. Constante DELAY_QUOTA = 65 ajoutée.
- ●Idempotence confirmée : save_processed_id() est appelé par image (pas en batch final) — si Gemini retourne un quota fatal à l'image N, les images 1..N-1 déjà traitées sont bien persistées et le run suivant reprend proprement depuis N.
- ●scan_drive_import.py — fix TypeError insert_staging : row.get('translation_fr', '')[:40] crashait quand Gemini retourne None pour un champ (dict.get(key, default) ne retourne le défaut que si la clé est absente, pas si elle vaut None). Fix : (row.get(key) or '') pour tous les champs texte de l'affichage dry-run (translation_fr, pos_type, duplicate_of_word_ar, duplicate_match_type, status) + (row.get('confidence_score') or 0) pour le champ numérique. Un champ None de Gemini produit maintenant un champ vide (ou low_confidence) sans faire planter le run entier.
- ●scan_drive_import.py — fix Gemini Vision (bloquant) : thinking_config retiré du GenerationConfig — champ non supporté par google-generativeai < 0.9 (CI). Toutes les images échouaient avec "Unknown field for GenerationConfig: thinking_config". max_output_tokens augmenté de 2048 à 8192 pour absorber le budget thinking interne de Gemini 2.5 Flash (cf. gotcha documenté dans CLAUDE.md). Modèle gemini-2.5-flash inchangé.
- ●scan_drive_import.py — Bug 1 (bloquant) : fix syntaxe Drive API v3 dans list_drive_images() — parentId='{id}' remplacé par '{id}' in parents (syntaxe v3 correcte). L'ancienne syntaxe générait HttpError 400 Invalid Value sur le paramètre q et empêchait tout listing de dossier.
- ●scan_drive_import.py — Bug 2 (non bloquant) : la colonne staging_scan_words.drive_file_id n'existait pas en base — le script la lisait pour l'idempotence et échouait silencieusement. Migration SQL créée : supabase/migrations/20260829000001_add_drive_file_id_to_staging_scan_words.sql (ADD COLUMN IF NOT EXISTS drive_file_id TEXT + index). Le code d'insertion existant peuple déjà la colonne (aucun changement script nécessaire pour la partie écriture).
- ●supabase/migrations/ : nouveau dossier de migrations SQL versionnées dans le repo.
- ●.github/workflows/scan-import.yml : workflow GitHub Actions pour l'import Drive depuis le cloud (PC éteint, déclenchable depuis le téléphone). workflow_dispatch avec inputs dialect (défaut TN), limit (vide = tout), dry_run (défaut true) + cron quotidien 6h UTC (dry_run auto-désactivé). Secrets requis : SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, GOOGLE_AI_API_KEY, GOOGLE_SERVICE_ACCOUNT_JSON. load_dotenv tolère l'absence de .env.local en CI (guard if ENV_FILE.exists() déjà en place).
- ●CLAUDE.md : section "Run cloud via GitHub Actions" avec tableau des déclencheurs, inputs, secrets requis.