manage_models.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/bin/bash
  2. #ident "@(#)$Format:LocalFoodAI_lanfr144:manage_models.sh:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  3. # Load LLM_MODEL from .env
  4. ENV_FILE=".env"
  5. if [ -f "$ENV_FILE" ]; then
  6. LLM_MODEL=$(grep '^[ \t]*LLM_MODEL[ \t]*=' "$ENV_FILE" | sed 's/^.*=//' | tr -d '\r\n ')
  7. elif [ -f "../.env" ]; then
  8. ENV_FILE="../.env"
  9. LLM_MODEL=$(grep '^[ \t]*LLM_MODEL[ \t]*=' "$ENV_FILE" | sed 's/^.*=//' | tr -d '\r\n ')
  10. fi
  11. if [ -z "$LLM_MODEL" ]; then
  12. echo "LLM_MODEL not found in .env, defaulting to llama3.2:3b"
  13. LLM_MODEL="llama3.2:3b"
  14. fi
  15. # Detect Ollama container dynamically
  16. OLLAMA_CONTAINER=$(docker ps --format '{{.Names}}' | grep "ollama" | head -n 1)
  17. if [ -z "$OLLAMA_CONTAINER" ]; then
  18. echo "No running Ollama container found. Defaulting to localfoodai_lanfr144-ollama-1"
  19. OLLAMA_CONTAINER="localfoodai_lanfr144-ollama-1"
  20. fi
  21. echo "Active Ollama container: $OLLAMA_CONTAINER"
  22. echo "Target LLM Model from .env: $LLM_MODEL"
  23. echo "Pulling model ($LLM_MODEL)..."
  24. docker exec "$OLLAMA_CONTAINER" ollama pull "$LLM_MODEL"
  25. echo "Cleaning up unused models from container..."
  26. # List all running models, skip header, extract names, and remove those not matching target LLM_MODEL
  27. docker exec "$OLLAMA_CONTAINER" ollama list | tail -n +2 | awk '{print $1}' | while read -r model; do
  28. if [ ! -z "$model" ] && [ "$model" != "$LLM_MODEL" ] && [ "$model" != "${LLM_MODEL}:latest" ] && [ "${model}:latest" != "$LLM_MODEL" ]; then
  29. echo "Removing unused model: $model"
  30. docker exec "$OLLAMA_CONTAINER" ollama rm "$model"
  31. fi
  32. done
  33. echo "Currently installed models inside container:"
  34. docker exec "$OLLAMA_CONTAINER" ollama list
  35. echo "Model management complete!"