publicar_no_ollama.sh 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env bash
  2. # Funde o adapter LoRA treinado no modelo base (fp16), importa no Ollama como
  3. # "star-atendente" (quantizado q4_K_M) e limpa o intermediário.
  4. #
  5. # Pré-requisito: ./treinar_lora_mlx.sh concluído (adapters/) e Ollama rodando.
  6. set -euo pipefail
  7. cd "$(dirname "$0")"
  8. MODEL="mlx-community/Meta-Llama-3.1-8B-Instruct-4bit"
  9. ADAPTER_DIR="adapters"
  10. FUSED_DIR="fused"
  11. NOME_OLLAMA="star-atendente"
  12. if [[ ! -f "$ADAPTER_DIR/adapters.safetensors" ]]; then
  13. echo "ERRO: adapter não encontrado em $ADAPTER_DIR/. Rode ./treinar_lora_mlx.sh antes." >&2
  14. exit 1
  15. fi
  16. source .venv/bin/activate
  17. echo "==> Fundindo adapter no modelo base (gera fp16 em $FUSED_DIR/, ~16 GB em disco)"
  18. mlx_lm.fuse \
  19. --model "$MODEL" \
  20. --adapter-path "$ADAPTER_DIR" \
  21. --save-path "$FUSED_DIR" \
  22. --de-quantize
  23. echo "==> Montando Modelfile (template herdado do llama3.1 instalado no Ollama)"
  24. TEMPLATE=$(ollama show llama3.1 --template)
  25. cat > Modelfile <<EOF
  26. FROM ./$FUSED_DIR
  27. TEMPLATE """$TEMPLATE"""
  28. 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."""
  29. PARAMETER temperature 0.3
  30. PARAMETER num_ctx 8192
  31. EOF
  32. echo "==> Importando no Ollama como $NOME_OLLAMA (quantizando q4_K_M)"
  33. ollama create "$NOME_OLLAMA" -f Modelfile --quantize q4_K_M
  34. echo "==> Limpando fp16 intermediário"
  35. rm -rf "$FUSED_DIR"
  36. echo
  37. echo "Pronto. Teste com: ollama run $NOME_OLLAMA 'Boa tarde, minha internet está lenta'"
  38. echo "Para o backend usar no chat: OLLAMA_CHAT_MODEL=$NOME_OLLAMA no backend/.env"