--- license: apache-2.0 base_model: meta-llama/Meta-Llama-3-8B-Instruct tags: - gguf - llama-cpp - unsloth - qlora - text-generation-inference - token-classification - healthcare - government language: - pt metrics: - accuracy - f1 library_name: gguf pipeline_tag: text-generation --- # Llama-3-8B-CONITEC-Extractor (GGUF) ## Visão Geral do Modelo Este repositório contém a versão quantizada em **GGUF (Q4_K_M)** do modelo `Llama-3-8B-CONITEC-Extractor`. Ele foi submetido a fine-tuning via **QLoRA** especificamente para a **Extração Determinística de Entidades** a partir de relatórios técnicos farmacoeconômicos da CONITEC (Ministério da Saúde). Esta versão otimizada foi compilada para garantir altíssimo throughput e baixo consumo de VRAM, permitindo o deploy em infraestruturas enxutas, containers Docker isolados ou consumo direto por auditores via Ollama/LM Studio. - **Desenvolvedor/Arquiteto:** Raphael Silva Fontes (Pesquisa Doutoral em IA - UFRN / Instituto Federal de Sergipe) - **Modelo Base:** Llama-3-8B-Instruct - **Quantização:** Q4_K_M (via `llama.cpp` / Unsloth) - **Tamanho Estimado:** ~4.9 GB --- ## Arquitetura e Pipeline Lakehouse Este modelo atua como o motor de processamento da camada **Gold** em um pipeline de Engenharia de Dados orquestrado via **Apache Airflow**. A arquitetura do processo de ingestão segue os seguintes estágios: 1. **Bronze:** PDFs brutos da CONITEC armazenados em buckets S3. 2. **Silver:** Conversão para Markdown, fatiamento (chunking) via busca híbrida (Regex + similaridade de Cosseno via TF-IDF) e persistência em arquivos Parquet (DuckDB). 3. **Gold (Este Modelo):** Consumo dos chunks da camada Silver para mapeamento estruturado e injeção em bancos de dados relacionais (PostgreSQL). --- ## Esquema de Extração (JSON Strict) O modelo não gera textos explicativos. Ele foi treinado para mapear os dados ingeridos e retornar um objeto JSON perfeitamente formatado segundo o schema abaixo: ```json { "cnpj": {"raw": "", "normalized": null}, "laboratorio": {"raw": "", "normalized": null}, "relatorio_tecnico": {"raw": "", "normalized": null}, "data_publicacao": {"raw": "", "normalized": null}, "medicamento": {"raw": "", "normalized": null}, "apresentacao": {"raw": "", "normalized": null}, "preco_cmed": {"raw": "", "normalized": null}, "preco_inicial": {"raw": "", "normalized": null}, "preco_final": {"raw": "", "normalized": null}, "populacao_estimada": {"raw": "", "normalized": null} } ``` --- ## Como Executar (Produção e Testes) ### 1. Via Ollama (Recomendado para Testes Locais) Você pode rodar este modelo localmente com apenas dois comandos, aproveitando a API compatível com OpenAI do Ollama. Crie um arquivo chamado `Modelfile` com o seguinte conteúdo para fixar o prompt de sistema e a temperatura: ```dockerfile FROM hf.co/raphaelfontes/Llama-3-8B-CONITEC-Extractor-GGUF/unsloth.Q4_K_M.gguf PARAMETER temperature 0.0 PARAMETER num_predict 1024 SYSTEM """Você é um extrator de dados estruturados especializado em relatórios da CONITEC. Sua tarefa é extrair as informações do texto fornecido e retornar APENAS um objeto JSON válido, sem explicações, sem markdown, seguindo estritamente o schema fornecido pelo usuário.""" ``` Execute o build e rode o modelo: ```bash ollama create conitec-extractor -f Modelfile ollama run conitec-extractor ``` ### 2. Via Python (`llama-cpp-python`) Para automação dentro do seu pipeline Airflow ou microsserviços: ```python from llama_cpp import Llama import json # Carrega o modelo GGUF alocando camadas na GPU (se disponível) llm = Llama( model_path="./unsloth.Q4_K_M.gguf", n_gpu_layers=-1, n_ctx=8192, verbose=False ) system_prompt = "Você é um extrator de dados estruturados especializado em relatórios da CONITEC. Sua tarefa é extrair as informações do texto fornecido e retornar APENAS um objeto JSON válido, sem explicações, sem markdown, seguindo estritamente o schema fornecido pelo usuário." silver_chunk = "RELATÓRIO TÉCNICO Nº 842 - 2024. O laboratório Novartis (CNPJ: 56.994.502/0001-30) submeteu o medicamento Zolgensma..." response = llm.create_chat_completion( messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": f"CONTEXTO:\n{silver_chunk}"} ], temperature=0.0, max_tokens=1024 ) print(response["choices"][0]["message"]["content"]) ``` --- ## Limitações e Governança * **Especialização Estrita:** Este LLM não foi treinado para agir como um assistente conversacional (Q&A geral). Consultas fora do escopo de extração da CONITEC resultarão em respostas vazias ou estruturas JSON preenchidas com valores nulos. * **Dependência do Chunking:** A qualidade da extração é diretamente proporcional à precisão da busca híbrida da camada Silver. O modelo extrairá os dados exatos contidos no texto de entrada, sem consultar bases de conhecimento externas.