#!/usr/bin/env bash # Funde o adapter LoRA treinado no modelo base (fp16), importa no Ollama como # "star-atendente" (quantizado q4_K_M) e limpa o intermediário. # # Pré-requisito: ./treinar_lora_mlx.sh concluído (adapters/) e Ollama rodando. set -euo pipefail cd "$(dirname "$0")" MODEL="mlx-community/Meta-Llama-3.1-8B-Instruct-4bit" ADAPTER_DIR="adapters" FUSED_DIR="fused" NOME_OLLAMA="star-atendente" if [[ ! -f "$ADAPTER_DIR/adapters.safetensors" ]]; then echo "ERRO: adapter não encontrado em $ADAPTER_DIR/. Rode ./treinar_lora_mlx.sh antes." >&2 exit 1 fi source .venv/bin/activate echo "==> Fundindo adapter no modelo base (gera fp16 em $FUSED_DIR/, ~16 GB em disco)" mlx_lm.fuse \ --model "$MODEL" \ --adapter-path "$ADAPTER_DIR" \ --save-path "$FUSED_DIR" \ --dequantize echo "==> Montando Modelfile (template herdado do llama3.1 instalado no Ollama)" TEMPLATE=$(ollama show llama3.1 --template) cat > Modelfile < Importando no Ollama como $NOME_OLLAMA (quantizando q4_K_M)" ollama create "$NOME_OLLAMA" -f Modelfile --quantize q4_K_M echo "==> Limpando fp16 intermediário" rm -rf "$FUSED_DIR" echo echo "Pronto. Teste com: ollama run $NOME_OLLAMA 'Boa tarde, minha internet está lenta'" echo "O backend já usa esse modelo por default (config.atendenteSugestao.model)." echo "Só é preciso setar OLLAMA_ATENDENTE_MODEL=$NOME_OLLAMA no backend/.env se publicar com outro nome."