github-actions[bot] commited on
Commit
f2b5d62
·
1 Parent(s): 1c939fa

chore: use Space README

Browse files
Files changed (2) hide show
  1. README.md +44 -38
  2. README_HF.md +0 -98
README.md CHANGED
@@ -1,20 +1,27 @@
1
- # 🇵🇹 Des-abrasileirador (pt-PT)
 
 
 
 
 
 
 
 
 
2
 
3
- [![Hugging Face Space](https://img.shields.io/badge/%F0%9F%A4%97%20Space-des--abrasileirador-yellow)](https://huggingface.co/spaces/pinthoz/des-abrasileirador)
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 (IPT).
8
-
9
- **Demo online:** https://huggingface.co/spaces/pinthoz/des-abrasileirador
10
 
11
  ## O que faz
12
 
13
- 1. **Corrigir** — envia o texto ao modelo escolhido (com *streaming*) e devolve a
14
- versão em pt-PT, com o IPT antes/depois. Opção de "modo explicado" que lista
15
- as alterações a partir de JSON, e botão para interromper a geração.
16
- 2. **Comparar modelos (IPT)** — corre o mesmo texto por vários modelos e
17
- ordena-os pelo **Índice de Portugalidade**.
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. Um filtro de sanidade exclui do
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
- ## Estrutura
41
 
42
  | Ficheiro | Papel |
43
  | --- | --- |
44
- | `app.py` | Interface Gradio (correção + comparação + análise) |
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
- ## Correr localmente (Windows/Linux com GPU NVIDIA)
51
 
52
- ```bash
53
- python -m venv .venv
54
- .venv\Scripts\activate # Linux: source .venv/bin/activate
55
- pip install -r requirements.txt
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
- Numa GPU de 6 GB os modelos de 9B **não cabem** (mesmo em 4-bit precisam de
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
- Teste rápido sem GPU:
74
 
75
  ```bash
76
- python portugality.py # imprime um ranking de exemplo, sem descarregar modelos
 
 
 
 
 
77
  ```
78
 
79
- ## Deploy (GitHub Hugging Face)
80
-
81
- Cada push ao `main` dispara o workflow
82
- [`sync-to-hf.yml`](.github/workflows/sync-to-hf.yml), que substitui o
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
- ```