- Shipped
- October 22, 2026 at 4:41 PM UTC
- Author
- Kamo
- Commit
- 5c7605b
Replaces the LibreTranslate, Bergamot and IndicTrans providers with MadladProvider (klusterservices madlad/). Their languages did not overlap, and a pair none of them had came back as its English source and was saved as the translation; MADLAD translates between any two of ~400 languages, so inbound chat in any language reaches English too. - The provider sends a list of texts in one request: a 3B model is bound by reading its weights, and 16 short strings took 9.7 s together against 25.8 s one by one. ProviderRouter.translateAll groups a batch's keys (32 texts / 6,000 characters), and a group the engine fails is retried text by text so one bad text fails alone. - TranslationService.batch masks protected names first, sends each distinct text once, in groups, and restores the names after; a reply that lost one is still translated around the names. The caller's deadline is checked between groups. - Until the engine has answered /languages the provider claims Kamo's 22 languages, never none: an unclaimed pair is returned as its English source and saved as the translation. - A timeout is still never retried; 503 busy and 5xx are, inside the caller's deadline. Background work holds one slot per pod so a chat message never queues behind a sync.
