Spaces:
Sleeping
Sleeping
github-actions[bot] commited on
Commit ·
f2b5d62
1
Parent(s): 1c939fa
chore: use Space README
Browse files- README.md +44 -38
- README_HF.md +0 -98
README.md
CHANGED
|
@@ -1,20 +1,27 @@
|
|
| 1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
|
| 4 |
|
| 5 |
Reescreve texto em **português europeu** correto com o modelo
|
| 6 |
[AMALIA-9B](https://hf.co/amalia-llm/AMALIA-9B-0626-SFT) e mede a
|
| 7 |
-
"portugalidade" do resultado com um índice determinístico
|
| 8 |
-
|
| 9 |
-
**Demo online:** https://huggingface.co/spaces/pinthoz/des-abrasileirador
|
| 10 |
|
| 11 |
## O que faz
|
| 12 |
|
| 13 |
-
1. **Corrigir** — envia o texto ao
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
2. **Comparar modelos (IPT)** — corre o mesmo texto por vários modelos e
|
| 17 |
-
|
| 18 |
3. **Analisar (IPT)** — mede a portugalidade de qualquer texto instantaneamente
|
| 19 |
(determinístico, sem GPU) e lista os marcadores brasileiros encontrados.
|
| 20 |
|
|
@@ -29,60 +36,53 @@ IPT = 100 * exp(-6 * densidade_ponderada_de_marcadores)
|
|
| 29 |
Conta marcadores brasileiros (léxico, ortografia pré-AO90, gerúndio, tratamento
|
| 30 |
`você`/`a gente`, próclise inicial), pondera-os e normaliza pelo número de
|
| 31 |
palavras. `0` marcadores → `100`; muito pt-BR → valor baixo. Como não usa nenhum
|
| 32 |
-
LLM como juiz, é auditável e não é circular.
|
| 33 |
-
benchmark respostas degeneradas (que, por não terem marcadores, teriam IPT alto
|
| 34 |
-
injustamente).
|
| 35 |
|
| 36 |
O **delta** de cada modelo é calculado contra a **referência** (por omissão o
|
| 37 |
`EuroLLM-9B`): mesma base e dimensão do AMALIA mas sem afinação pt-PT, pelo que a
|
| 38 |
diferença de IPT isola o efeito dessa afinação.
|
| 39 |
|
| 40 |
-
##
|
| 41 |
|
| 42 |
| Ficheiro | Papel |
|
| 43 |
| --- | --- |
|
| 44 |
-
| `app.py` | Interface Gradio (correção + comparação
|
| 45 |
| `inference.py` | Registo de modelos e geração (cache de um modelo de cada vez) |
|
| 46 |
| `portugality.py` | Cálculo do IPT (determinístico) |
|
| 47 |
| `system_prompt.txt` | Instruções do revisor pt-PT |
|
| 48 |
-
| `README_HF.md` | README do Space (com frontmatter); o CI renomeia-o no deploy |
|
| 49 |
|
| 50 |
-
##
|
| 51 |
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
# o torch do PyPI é CPU-only; troca pela build CUDA:
|
| 57 |
-
pip install torch --index-url https://download.pytorch.org/whl/cu126
|
| 58 |
-
python app.py # http://127.0.0.1:7860
|
| 59 |
-
```
|
| 60 |
|
| 61 |
O `inference.py` deteta o hardware automaticamente:
|
| 62 |
|
| 63 |
| Ambiente | Modo |
|
| 64 |
| --- | --- |
|
| 65 |
| GPU com ≥ 20 GB VRAM (A10G/ZeroGPU) | bf16 (fp16 em placas pré-Ampere) |
|
| 66 |
-
| GPU com < 20 GB VRAM (ex.: RTX 2060 6 GB) | 4-bit nf4 |
|
| 67 |
| Sem CUDA | CPU float32 (apenas modelos pequenos) |
|
| 68 |
|
| 69 |
-
|
| 70 |
-
~6,3 GB só de pesos — a app recusa com uma mensagem clara em vez de rebentar).
|
| 71 |
-
Usa o **Qwen2.5-3B** (~2 GB em 4-bit) como modelo de correção local.
|
| 72 |
|
| 73 |
-
|
| 74 |
|
| 75 |
```bash
|
| 76 |
-
python
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
```
|
| 78 |
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
`README.md` pelo `README_HF.md` (o Space precisa do frontmatter YAML) e faz
|
| 84 |
-
*force push* para o Space. Requer o segredo `HF_TOKEN` (token *write*) nas
|
| 85 |
-
definições do repositório.
|
| 86 |
|
| 87 |
## Modelos *gated*
|
| 88 |
|
|
@@ -90,3 +90,9 @@ definições do repositório.
|
|
| 90 |
licença no Hugging Face. Define o segredo `HF_TOKEN` no Space (Settings →
|
| 91 |
Secrets) para os poderes usar; caso contrário, esses modelos são ignorados na
|
| 92 |
comparação com um aviso.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Des-abrasileirador pt-PT
|
| 3 |
+
emoji: ✍️
|
| 4 |
+
colorFrom: green
|
| 5 |
+
colorTo: red
|
| 6 |
+
sdk: gradio
|
| 7 |
+
sdk_version: 6.19.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
hardware: zero-a10g
|
| 10 |
+
---
|
| 11 |
|
| 12 |
+
# 🇵🇹 Des-abrasileirador (pt-PT)
|
| 13 |
|
| 14 |
Reescreve texto em **português europeu** correto com o modelo
|
| 15 |
[AMALIA-9B](https://hf.co/amalia-llm/AMALIA-9B-0626-SFT) e mede a
|
| 16 |
+
"portugalidade" do resultado com um índice determinístico.
|
|
|
|
|
|
|
| 17 |
|
| 18 |
## O que faz
|
| 19 |
|
| 20 |
+
1. **Corrigir** — envia o texto ao AMALIA-9B (com *streaming*) e devolve a versão
|
| 21 |
+
em pt-PT, com o IPT antes/depois. Opção de "modo explicado" que lista as
|
| 22 |
+
alterações a partir de JSON, e botão para interromper a geração.
|
| 23 |
+
2. **Comparar modelos (IPT)** — corre o mesmo texto por vários modelos e ordena-os
|
| 24 |
+
pelo **Índice de Portugalidade**.
|
| 25 |
3. **Analisar (IPT)** — mede a portugalidade de qualquer texto instantaneamente
|
| 26 |
(determinístico, sem GPU) e lista os marcadores brasileiros encontrados.
|
| 27 |
|
|
|
|
| 36 |
Conta marcadores brasileiros (léxico, ortografia pré-AO90, gerúndio, tratamento
|
| 37 |
`você`/`a gente`, próclise inicial), pondera-os e normaliza pelo número de
|
| 38 |
palavras. `0` marcadores → `100`; muito pt-BR → valor baixo. Como não usa nenhum
|
| 39 |
+
LLM como juiz, é auditável e não é circular.
|
|
|
|
|
|
|
| 40 |
|
| 41 |
O **delta** de cada modelo é calculado contra a **referência** (por omissão o
|
| 42 |
`EuroLLM-9B`): mesma base e dimensão do AMALIA mas sem afinação pt-PT, pelo que a
|
| 43 |
diferença de IPT isola o efeito dessa afinação.
|
| 44 |
|
| 45 |
+
## Ficheiros
|
| 46 |
|
| 47 |
| Ficheiro | Papel |
|
| 48 |
| --- | --- |
|
| 49 |
+
| `app.py` | Interface Gradio (correção + comparação) |
|
| 50 |
| `inference.py` | Registo de modelos e geração (cache de um modelo de cada vez) |
|
| 51 |
| `portugality.py` | Cálculo do IPT (determinístico) |
|
| 52 |
| `system_prompt.txt` | Instruções do revisor pt-PT |
|
|
|
|
| 53 |
|
| 54 |
+
## Hardware
|
| 55 |
|
| 56 |
+
Um modelo de 9B **não** corre no Space CPU grátis. Este Space usa **ZeroGPU**
|
| 57 |
+
(`@spaces.GPU`, `hardware: zero-a10g`), que requer conta HF PRO. Vários 9B não
|
| 58 |
+
cabem em simultâneo num A10G (24 GB), por isso o `inference.py` mantém apenas
|
| 59 |
+
**um modelo carregado de cada vez** e a comparação corre-os em série.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
O `inference.py` deteta o hardware automaticamente:
|
| 62 |
|
| 63 |
| Ambiente | Modo |
|
| 64 |
| --- | --- |
|
| 65 |
| GPU com ≥ 20 GB VRAM (A10G/ZeroGPU) | bf16 (fp16 em placas pré-Ampere) |
|
| 66 |
+
| GPU com < 20 GB VRAM (ex.: RTX 2060 6 GB) | 4-bit nf4 + *offload* do excedente para RAM |
|
| 67 |
| Sem CUDA | CPU float32 (apenas modelos pequenos) |
|
| 68 |
|
| 69 |
+
Podes forçar com `LOAD_IN_4BIT=1` ou `LOAD_IN_4BIT=0`.
|
|
|
|
|
|
|
| 70 |
|
| 71 |
+
## Correr localmente (Windows/Linux com GPU NVIDIA)
|
| 72 |
|
| 73 |
```bash
|
| 74 |
+
python -m venv .venv
|
| 75 |
+
.venv\Scripts\activate # Linux: source .venv/bin/activate
|
| 76 |
+
pip install -r requirements.txt
|
| 77 |
+
# o torch do PyPI é CPU-only; troca pela build CUDA:
|
| 78 |
+
pip install torch --index-url https://download.pytorch.org/whl/cu126
|
| 79 |
+
python app.py # http://127.0.0.1:7860
|
| 80 |
```
|
| 81 |
|
| 82 |
+
Numa GPU de 6 GB os modelos de 9B **não cabem** (mesmo em 4-bit precisam de
|
| 83 |
+
~6,3 GB só de pesos — a app recusa com uma mensagem clara em vez de rebentar).
|
| 84 |
+
Usa o **Qwen2.5-3B** (~2 GB em 4-bit) como modelo de correção local; o
|
| 85 |
+
Tucano-2B serve apenas de baseline pt-BR no benchmark.
|
|
|
|
|
|
|
|
|
|
| 86 |
|
| 87 |
## Modelos *gated*
|
| 88 |
|
|
|
|
| 90 |
licença no Hugging Face. Define o segredo `HF_TOKEN` no Space (Settings →
|
| 91 |
Secrets) para os poderes usar; caso contrário, esses modelos são ignorados na
|
| 92 |
comparação com um aviso.
|
| 93 |
+
|
| 94 |
+
## Teste local rápido
|
| 95 |
+
|
| 96 |
+
```bash
|
| 97 |
+
python portugality.py # imprime um ranking de exemplo, sem descarregar modelos
|
| 98 |
+
```
|
README_HF.md
DELETED
|
@@ -1,98 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
title: Des-abrasileirador pt-PT
|
| 3 |
-
emoji: ✍️
|
| 4 |
-
colorFrom: green
|
| 5 |
-
colorTo: red
|
| 6 |
-
sdk: gradio
|
| 7 |
-
sdk_version: 6.19.0
|
| 8 |
-
app_file: app.py
|
| 9 |
-
hardware: zero-a10g
|
| 10 |
-
---
|
| 11 |
-
|
| 12 |
-
# 🇵🇹 Des-abrasileirador (pt-PT)
|
| 13 |
-
|
| 14 |
-
Reescreve texto em **português europeu** correto com o modelo
|
| 15 |
-
[AMALIA-9B](https://hf.co/amalia-llm/AMALIA-9B-0626-SFT) e mede a
|
| 16 |
-
"portugalidade" do resultado com um índice determinístico.
|
| 17 |
-
|
| 18 |
-
## O que faz
|
| 19 |
-
|
| 20 |
-
1. **Corrigir** — envia o texto ao AMALIA-9B (com *streaming*) e devolve a versão
|
| 21 |
-
em pt-PT, com o IPT antes/depois. Opção de "modo explicado" que lista as
|
| 22 |
-
alterações a partir de JSON, e botão para interromper a geração.
|
| 23 |
-
2. **Comparar modelos (IPT)** — corre o mesmo texto por vários modelos e ordena-os
|
| 24 |
-
pelo **Índice de Portugalidade**.
|
| 25 |
-
3. **Analisar (IPT)** — mede a portugalidade de qualquer texto instantaneamente
|
| 26 |
-
(determinístico, sem GPU) e lista os marcadores brasileiros encontrados.
|
| 27 |
-
|
| 28 |
-
## Índice de Portugalidade (IPT)
|
| 29 |
-
|
| 30 |
-
Métrica determinística, sem GPU, definida em [`portugality.py`](portugality.py):
|
| 31 |
-
|
| 32 |
-
```
|
| 33 |
-
IPT = 100 * exp(-6 * densidade_ponderada_de_marcadores)
|
| 34 |
-
```
|
| 35 |
-
|
| 36 |
-
Conta marcadores brasileiros (léxico, ortografia pré-AO90, gerúndio, tratamento
|
| 37 |
-
`você`/`a gente`, próclise inicial), pondera-os e normaliza pelo número de
|
| 38 |
-
palavras. `0` marcadores → `100`; muito pt-BR → valor baixo. Como não usa nenhum
|
| 39 |
-
LLM como juiz, é auditável e não é circular.
|
| 40 |
-
|
| 41 |
-
O **delta** de cada modelo é calculado contra a **referência** (por omissão o
|
| 42 |
-
`EuroLLM-9B`): mesma base e dimensão do AMALIA mas sem afinação pt-PT, pelo que a
|
| 43 |
-
diferença de IPT isola o efeito dessa afinação.
|
| 44 |
-
|
| 45 |
-
## Ficheiros
|
| 46 |
-
|
| 47 |
-
| Ficheiro | Papel |
|
| 48 |
-
| --- | --- |
|
| 49 |
-
| `app.py` | Interface Gradio (correção + comparação) |
|
| 50 |
-
| `inference.py` | Registo de modelos e geração (cache de um modelo de cada vez) |
|
| 51 |
-
| `portugality.py` | Cálculo do IPT (determinístico) |
|
| 52 |
-
| `system_prompt.txt` | Instruções do revisor pt-PT |
|
| 53 |
-
|
| 54 |
-
## Hardware
|
| 55 |
-
|
| 56 |
-
Um modelo de 9B **não** corre no Space CPU grátis. Este Space usa **ZeroGPU**
|
| 57 |
-
(`@spaces.GPU`, `hardware: zero-a10g`), que requer conta HF PRO. Vários 9B não
|
| 58 |
-
cabem em simultâneo num A10G (24 GB), por isso o `inference.py` mantém apenas
|
| 59 |
-
**um modelo carregado de cada vez** e a comparação corre-os em série.
|
| 60 |
-
|
| 61 |
-
O `inference.py` deteta o hardware automaticamente:
|
| 62 |
-
|
| 63 |
-
| Ambiente | Modo |
|
| 64 |
-
| --- | --- |
|
| 65 |
-
| GPU com ≥ 20 GB VRAM (A10G/ZeroGPU) | bf16 (fp16 em placas pré-Ampere) |
|
| 66 |
-
| GPU com < 20 GB VRAM (ex.: RTX 2060 6 GB) | 4-bit nf4 + *offload* do excedente para RAM |
|
| 67 |
-
| Sem CUDA | CPU float32 (apenas modelos pequenos) |
|
| 68 |
-
|
| 69 |
-
Podes forçar com `LOAD_IN_4BIT=1` ou `LOAD_IN_4BIT=0`.
|
| 70 |
-
|
| 71 |
-
## Correr localmente (Windows/Linux com GPU NVIDIA)
|
| 72 |
-
|
| 73 |
-
```bash
|
| 74 |
-
python -m venv .venv
|
| 75 |
-
.venv\Scripts\activate # Linux: source .venv/bin/activate
|
| 76 |
-
pip install -r requirements.txt
|
| 77 |
-
# o torch do PyPI é CPU-only; troca pela build CUDA:
|
| 78 |
-
pip install torch --index-url https://download.pytorch.org/whl/cu126
|
| 79 |
-
python app.py # http://127.0.0.1:7860
|
| 80 |
-
```
|
| 81 |
-
|
| 82 |
-
Numa GPU de 6 GB os modelos de 9B **não cabem** (mesmo em 4-bit precisam de
|
| 83 |
-
~6,3 GB só de pesos — a app recusa com uma mensagem clara em vez de rebentar).
|
| 84 |
-
Usa o **Qwen2.5-3B** (~2 GB em 4-bit) como modelo de correção local; o
|
| 85 |
-
Tucano-2B serve apenas de baseline pt-BR no benchmark.
|
| 86 |
-
|
| 87 |
-
## Modelos *gated*
|
| 88 |
-
|
| 89 |
-
`meta-llama/Llama-3.1-8B-Instruct` e `google/gemma-2-9b-it` exigem aceitar a
|
| 90 |
-
licença no Hugging Face. Define o segredo `HF_TOKEN` no Space (Settings →
|
| 91 |
-
Secrets) para os poderes usar; caso contrário, esses modelos são ignorados na
|
| 92 |
-
comparação com um aviso.
|
| 93 |
-
|
| 94 |
-
## Teste local rápido
|
| 95 |
-
|
| 96 |
-
```bash
|
| 97 |
-
python portugality.py # imprime um ranking de exemplo, sem descarregar modelos
|
| 98 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|