131 lines
4.0 KiB
Python
Executable File
131 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Script pour pré-télécharger tous les modèles d'IA nécessaires.
|
|
Exécuter ce script avant la première utilisation pour éviter les délais.
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Ajouter le répertoire parent au path
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
|
|
from core.config import CONFIG
|
|
|
|
def download_openclip():
|
|
"""Télécharge le modèle OpenCLIP pour les embeddings."""
|
|
print("📥 Téléchargement d'OpenCLIP...")
|
|
try:
|
|
import open_clip
|
|
model_name = CONFIG["models"]["clip"]
|
|
model, _, preprocess = open_clip.create_model_and_transforms(
|
|
model_name,
|
|
pretrained="openai"
|
|
)
|
|
print(f"✅ OpenCLIP ({model_name}) téléchargé")
|
|
return True
|
|
except Exception as e:
|
|
print(f"❌ Erreur OpenCLIP: {e}")
|
|
return False
|
|
|
|
def download_owlv2():
|
|
"""Télécharge le modèle OWL-v2 pour la détection d'objets."""
|
|
print("📥 Téléchargement d'OWL-v2...")
|
|
try:
|
|
from transformers import Owlv2Processor, Owlv2ForObjectDetection
|
|
|
|
model_path = CONFIG["models"]["paths"]["owl_v2"]
|
|
Path(model_path).mkdir(parents=True, exist_ok=True)
|
|
|
|
processor = Owlv2Processor.from_pretrained(
|
|
"google/owlv2-base-patch16-ensemble",
|
|
cache_dir=model_path
|
|
)
|
|
model = Owlv2ForObjectDetection.from_pretrained(
|
|
"google/owlv2-base-patch16-ensemble",
|
|
cache_dir=model_path
|
|
)
|
|
print("✅ OWL-v2 téléchargé")
|
|
return True
|
|
except Exception as e:
|
|
print(f"❌ Erreur OWL-v2: {e}")
|
|
return False
|
|
|
|
def check_ollama():
|
|
"""Vérifie si Ollama est installé et le modèle Qwen est disponible."""
|
|
print("🔍 Vérification d'Ollama...")
|
|
try:
|
|
import subprocess
|
|
|
|
# Vérifier si ollama est installé
|
|
result = subprocess.run(
|
|
["ollama", "list"],
|
|
capture_output=True,
|
|
text=True,
|
|
timeout=5
|
|
)
|
|
|
|
if result.returncode == 0:
|
|
print("✅ Ollama est installé")
|
|
|
|
# Vérifier si qwen3-vl est disponible
|
|
if "qwen3-vl" in result.stdout.lower():
|
|
print("✅ Modèle Qwen3-VL disponible")
|
|
return True
|
|
else:
|
|
print("⚠️ Modèle Qwen3-VL non trouvé")
|
|
print(" Pour le télécharger: ollama pull qwen3-vl:8b")
|
|
return False
|
|
else:
|
|
print("❌ Ollama n'est pas installé")
|
|
print(" Installation: curl -fsSL https://ollama.com/install.sh | sh")
|
|
return False
|
|
|
|
except FileNotFoundError:
|
|
print("❌ Ollama n'est pas installé")
|
|
print(" Installation: curl -fsSL https://ollama.com/install.sh | sh")
|
|
return False
|
|
except Exception as e:
|
|
print(f"❌ Erreur lors de la vérification d'Ollama: {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""Télécharge tous les modèles nécessaires."""
|
|
print("=" * 60)
|
|
print("🚀 Téléchargement des Modèles d'IA - RPA Vision V2")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
results = {
|
|
"OpenCLIP": download_openclip(),
|
|
"OWL-v2": download_owlv2(),
|
|
"Ollama": check_ollama()
|
|
}
|
|
|
|
print()
|
|
print("=" * 60)
|
|
print("📊 Résumé")
|
|
print("=" * 60)
|
|
|
|
for model, success in results.items():
|
|
status = "✅" if success else "❌"
|
|
print(f"{status} {model}")
|
|
|
|
print()
|
|
|
|
if all(results.values()):
|
|
print("🎉 Tous les modèles sont prêts !")
|
|
print()
|
|
print("Vous pouvez maintenant lancer l'application:")
|
|
print(" ./run.sh")
|
|
return 0
|
|
else:
|
|
print("⚠️ Certains modèles ne sont pas disponibles.")
|
|
print()
|
|
print("L'application fonctionnera en mode dégradé.")
|
|
print("Consultez les messages ci-dessus pour plus d'informations.")
|
|
return 1
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|