Skip to main content

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-BR
  • pt-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-pt e pt-en já vêm dentro do pacote. pip install e 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 translateLocally acabou).
  • Thread-safe. A tradução libera o GIL, então basta compartilhar uma instância de Translator entre 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)
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 (default 64)
  • FAST_TRANSLATE_CACHE_MAX_ENTRY_CHARS — tamanho máximo por item de cache (default 512)

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fast_translate-0.2.0.tar.gz (33.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fast_translate-0.2.0-cp38-abi3-win_amd64.whl (35.2 MB view details)

Uploaded CPython 3.8+Windows x86-64

fast_translate-0.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.5 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

fast_translate-0.2.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (36.7 MB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

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

Hashes for fast_translate-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c6371007cc44179a17c564b369959c2b88777695d5986d5fa70aef85d1d653dd
MD5 4725f998e1ac6a6bab08a60de8d5cdc4
BLAKE2b-256 43d61176bab36edc03632c942f717a7330fa556718ad521dc3c86f63b60d70a1

See more details on using hashes here.

File details

Details for the file fast_translate-0.2.0-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for fast_translate-0.2.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dd4848ecf0d6f3ac1d9e69f5e2a9a3d8c32ea40ce4701e105043b57f71e0c286
MD5 fec5a638cb118e7d106b6824d4b723c0
BLAKE2b-256 967d547bf9902aa78cab8f3ec57d4a299750d0d7816c1dbb2032d40d9a3f1e26

See more details on using hashes here.

File details

Details for the file fast_translate-0.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fast_translate-0.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f140fe0a54d0f08e50b9f80624dba60b3956ae28d966cef22e1d9092af309ed3
MD5 c4b6b70905aa92d897802e90fb491275
BLAKE2b-256 b48ab4ad77493d6330ac7c6e2fcdde3f69133e33fbd36aeed9245528fcf8de33

See more details on using hashes here.

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

File hashes

Hashes for fast_translate-0.2.0-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 220e46d9ad1fc5b2184241667528c890aecf16269ef38a2821d2730dd0e6cb1e
MD5 0b00c999a3f8f29b04bf7761057b7928
BLAKE2b-256 156eb84b41a2ea2537bfb4fa1305d0f5b1b14eb24f02870c0cd3978da4a17f16

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page