mangaba-reforma-tributaria-2b

Adapter LoRA que especializa mlx-community/gemma-2-2b-it-4bit na Reforma Tributária do consumo no Brasil — EC 132/2023, LC 214/2025, IBS, CBS e Imposto Seletivo.

Treinado 100% com fontes públicas oficiais, sem dataset sintético gerado por LLM:

Fonte O que entrou
Planalto (texto consolidado) EC 132/2023 e LC 214/2025, artigo a artigo
Dados Abertos da Câmara dos Deputados PEC 45/2019, PLP 68/2024, PLP 108/2024 e correlatas: ementa, situação e tramitações
Dados Abertos do Senado Federal Matérias correspondentes: ementa, explicação e indexação

Uso (MLX, Apple Silicon)

Dois cuidados que mudam completamente o resultado:

  1. O modelo base não aceita o papel system — a instrução de sistema tem que ir no início do turno do usuário, que é como o dataset foi construído. Sem isso o adapter responde como o modelo base.
  2. Use grounding: recupere os artigos relevantes e coloque-os no prompt. Sozinho, um 2B inventa o número do dispositivo com toda a confiança do mundo.
from huggingface_hub import snapshot_download
from mlx_lm import generate, load
from mlx_lm.sample_utils import make_logits_processors

SYSTEM = (
    "Você é um assistente especialista na Reforma Tributária do consumo no Brasil "
    "(EC 132/2023, LC 214/2025, IBS, CBS e Imposto Seletivo). Responda em português do Brasil, "
    "de forma objetiva e sempre citando a norma e o artigo que fundamentam a resposta. "
    "Se não houver base normativa para a resposta, diga isso explicitamente."
)

modelo, tok = load(
    "mlx-community/gemma-2-2b-it-4bit",
    adapter_path=snapshot_download("mangaba-ai/mangaba-reforma-tributaria-2b"),  # --adapter-path exige diretório local
)

pergunta = "O que estabelece o Art. 112 da LC 214/2025?"
trechos = "..."  # artigos recuperados do texto oficial (BM25, embeddings, o que preferir)
conteudo = f"{SYSTEM}\n\n### Trechos oficiais:\n{trechos}\n\n{pergunta}"

prompt = tok.apply_chat_template(
    [{"role": "user", "content": conteudo}], add_generation_prompt=True, tokenize=False
)
print(generate(
    modelo, tok, prompt=prompt, max_tokens=400,
    logits_processors=make_logits_processors(repetition_penalty=1.1),  # evita loops
))

Saída real dessa chamada:

"Art. 112. A devolução do IBS a que se refere o inciso II do caput deste artigo será gerida pelo Comitê Gestor do IBS, a quem competirá as atribuições previstas no art. 114 desta Lei Complementar, respeitadas as especificidades." (NR)

Fonte: LC 214/2025, Art. 112.

Dados de treino

Avaliação

30 exemplos do split de teste, geração gulosa (temperatura 0):

Métrica Base (sem fine-tuning) Com adapter
Acerto do dispositivo citado 0.2 0.5667
Acerto da norma citada 0.8667 0.6667
Cobertura dos termos da referência 0.1217 0.4821
  • Acerto do dispositivo — a resposta cita o mesmo artigo da referência
  • Acerto da norma — cita a norma correta (LC 214/2025 / EC 132/2023)
  • Cobertura — fração dos termos relevantes da referência presentes na resposta

O acerto da norma cai de propósito visível: o modelo base escreve "LC 214/2025" em quase toda resposta porque o nome da norma aparece no próprio prompt — acerta a norma e erra o artigo. É uma métrica fácil de saturar. As duas que medem conhecimento real, dispositivo e cobertura, sobem cerca de 3x e 4x.

Treino

LoRA rank 16 (dropout 0.05) nas projeções de atenção das últimas 8 camadas, batch 1, lr 1e-5, gradient checkpointing. 1,97 M de parâmetros treináveis (0,075% do modelo).

800 iterações no total, em duas etapas: 600 com max_seq_length 2048 e mais 200 com 1536, depois de um estouro de memória da GPU (Metal, Insufficient Memory) em 16 GB por volta da iteração 640. Os pesos publicados são o checkpoint da iteração 600, que teve o menor val loss: 3,481 → 0,800.

Limitações

É um modelo de 2 bilhões de parâmetros. O fine-tuning ensinou como citar — formato, vocabulário e o hábito de apontar norma e artigo. Ele não memorizou os 678 artigos.

  • Sem grounding, ele alucina o dispositivo: perguntado sobre o Art. 112 sem contexto, respondeu com um texto de outra lei, e entrou em loop de repetição.
  • Com grounding, acerta a citação nas perguntas diretas por artigo, mas ainda pode errar o número em perguntas abertas — num teste, atribuiu o cashback ao "Art. 476-A" em vez do Art. 112.
  • Use repetition_penalty em torno de 1.1.

Sempre confira o dispositivo citado no texto oficial. Isto é ferramenta de consulta, não parecer, e não substitui orientação de profissional habilitado. O texto normativo é o vigente na data da coleta.

Projeto de origem

reforma-tributaria-ft — pipeline completo e reprodutível: coleta nas APIs oficiais, construção do dataset, LoRA, avaliação e uma API compatível com OpenAI que faz grounding (recupera os artigos por BM25 e injeta no prompt) e consulta ao vivo a situação das proposições na Câmara.

Downloads last month

-

Downloads are not tracked for this model. How to track
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mangaba-ai/mangaba-reforma-tributaria-2b

Adapter
(1)
this model