| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/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" \
- --de-quantize
- echo "==> Montando Modelfile (template herdado do llama3.1 instalado no Ollama)"
- TEMPLATE=$(ollama show llama3.1 --template)
- cat > Modelfile <<EOF
- FROM ./$FUSED_DIR
- TEMPLATE """$TEMPLATE"""
- SYSTEM """Você é um atendente da Star Internet, atendendo clientes pelo WhatsApp. Seja cordial, objetivo e resolutivo: entenda o problema, faça as perguntas necessárias, explique os passos com clareza e conduza o atendimento até a solução ou encaminhamento correto. Responda em português brasileiro."""
- PARAMETER temperature 0.3
- PARAMETER num_ctx 8192
- EOF
- echo "==> 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 "Para o backend usar no chat: OLLAMA_CHAT_MODEL=$NOME_OLLAMA no backend/.env"
|