Portable, self-contained EN<->PT-BR translation with a native Rust engine (no external binary) and baked-in models
Project description
fast-translate
Tradução offline rápida em CPU, 100% local e sem dependências externas:
en -> pt-BRpt-BR -> en
from fast_translate import Translator
tr = Translator()
print(tr.translate("How are you today?")) # -> "Como você está hoje?"
print(tr.translate("Como você está hoje?", "pt-en")) # -> "How are you today?"
tr.close()
O que mudou na 0.2.0
A versão 0.2.0 substitui o translateLocally por um motor de tradução próprio,
escrito em Rust e embutido no pacote. O comportamento e a API são os mesmos; o que
muda é o que roda por baixo.
- Self-contained de verdade. Não há mais binário externo, subprocesso, Native
Messaging, dependência de Qt, nem download de nada em tempo de execução. Os modelos
en-ptept-enjá vêm dentro do pacote.pip installe pronto. - Muito mais rápido em escala. ~5,9× mais vazão com múltiplas threads e cauda de latência (p95) ~5× menor — não há mais o custo e a instabilidade do subprocesso.
- Memória estável e compartilhada. O modelo é carregado uma vez e compartilhado
entre todas as threads. Sem cópia por thread e sem crescimento ao longo do tempo
(o problema de RAM que crescia com o
translateLocallyacabou). - Thread-safe. A tradução libera o GIL, então basta compartilhar uma instância de
Translatorentre threads para escalar entre os núcleos da CPU. - Mesma qualidade. Em frases reais a saída é idêntica à do
translateLocally. - Sem novas dependências Python. O pacote não requer mais
httpx/zstandard.
Instalação
pip install fast-translate
Wheels pré-compiladas são publicadas para Linux, macOS e Windows — não é preciso ter Rust instalado para usar. (Para compilar do código-fonte é necessário o toolchain Rust e um compilador C.)
Uso
from fast_translate import Translator
tr = Translator()
tr.translate("The children were playing happily in the garden.") # en -> pt-BR
tr.translate("As crianças estavam brincando no jardim.", "pt-en") # pt-BR -> en
tr.close()
Alta vazão — compartilhe uma instância entre threads:
import concurrent.futures as cf
tr = Translator(cache_size=1024)
with cf.ThreadPoolExecutor(max_workers=8) as ex:
results = list(ex.map(tr.translate, sentences))
tr.close()
Translator também funciona como context manager (with Translator() as tr: ...).
Conteúdo técnico (código e LaTeX)
Trechos de código e fórmulas são preservados; só o texto natural ao redor é traduzido:
- código:
```...```,~~~...~~~, inline`...` - LaTeX:
$$...$$,\(...\),\[...\]e ambientes (equation,align, ...)
Desempenho
AMD Ryzen 7 3700X (8 núcleos), frases reais, sem cache. Antigo = translateLocally
via subprocesso (um worker); Novo = motor Rust em processo:
| Métrica | Antigo | Novo (0.2.0) | Ganho |
|---|---|---|---|
| Vazão (8 threads) | ~65 frases/s | ~384 frases/s | ~5,9× |
| Latência p95 | ~83 ms | ~16 ms | ~5,2× menor |
| Latência p50 (1 thread) | ~10 ms | ~13 ms | ~1,3× maior |
O ganho está na vazão e na cauda de latência (eliminar o subprocesso/IPC). A latência
mediana de uma chamada isolada é um pouco maior, porque o motor usa f32 portável
em vez das kernels int8 do bergamot — em cargas com muitas frases, a vazão domina.
Memória
O modelo é carregado uma vez e compartilhado entre as threads; não cresce com o tempo.
| Estado | RAM (RSS) |
|---|---|
Só en-pt carregado |
~94 MB |
| Ambas as direções | ~163 MB |
| Após 5000 traduções (1 thread) | ~163 MB (estável, sem vazamento) |
| Pico com 8 threads | ~175 MB (+~12 MB, não por thread) |
Para RAM mínima: carregue só a direção que usa (o carregamento é preguiçoso, na
primeira chamada) e compartilhe uma única instância de Translator entre as threads.
Variáveis de ambiente
FAST_TRANSLATE_CACHE_SIZE— tamanho do cache LRU (default64)FAST_TRANSLATE_CACHE_MAX_ENTRY_CHARS— tamanho máximo por item de cache (default512)
Como funciona (resumo)
O motor reimplementa em Rust o modelo bergamot tiny11 (encoder transformer de 6
camadas + decoder SSRU de 2 camadas, com shortlist léxica e decodificação greedy),
carregando os pesos int8 embutidos e a tokenização SentencePiece. Uma fina camada
Python cuida do cache, do pós-processamento pt-BR e da preservação de código/LaTeX.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fast_translate-0.2.0.tar.gz.
File metadata
- Download URL: fast_translate-0.2.0.tar.gz
- Upload date:
- Size: 33.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6371007cc44179a17c564b369959c2b88777695d5986d5fa70aef85d1d653dd
|
|
| MD5 |
4725f998e1ac6a6bab08a60de8d5cdc4
|
|
| BLAKE2b-256 |
43d61176bab36edc03632c942f717a7330fa556718ad521dc3c86f63b60d70a1
|
File details
Details for the file fast_translate-0.2.0-cp38-abi3-win_amd64.whl.
File metadata
- Download URL: fast_translate-0.2.0-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 35.2 MB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd4848ecf0d6f3ac1d9e69f5e2a9a3d8c32ea40ce4701e105043b57f71e0c286
|
|
| MD5 |
fec5a638cb118e7d106b6824d4b723c0
|
|
| BLAKE2b-256 |
967d547bf9902aa78cab8f3ec57d4a299750d0d7816c1dbb2032d40d9a3f1e26
|
File details
Details for the file fast_translate-0.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: fast_translate-0.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 35.5 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f140fe0a54d0f08e50b9f80624dba60b3956ae28d966cef22e1d9092af309ed3
|
|
| MD5 |
c4b6b70905aa92d897802e90fb491275
|
|
| BLAKE2b-256 |
b48ab4ad77493d6330ac7c6e2fcdde3f69133e33fbd36aeed9245528fcf8de33
|
File details
Details for the file fast_translate-0.2.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: fast_translate-0.2.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 36.7 MB
- Tags: CPython 3.8+, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
220e46d9ad1fc5b2184241667528c890aecf16269ef38a2821d2730dd0e6cb1e
|
|
| MD5 |
0b00c999a3f8f29b04bf7761057b7928
|
|
| BLAKE2b-256 |
156eb84b41a2ea2537bfb4fa1305d0f5b1b14eb24f02870c0cd3978da4a17f16
|