-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.py
More file actions
178 lines (137 loc) · 5.09 KB
/
setup.py
File metadata and controls
178 lines (137 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
"""
Script d'installation et de configuration pour l'agent météo IA
"""
import os
import sys
import subprocess
from pathlib import Path
def print_section(title):
"""Affiche une section avec du style"""
print(f"\n{'='*60}")
print(f" {title}")
print(f"{'='*60}")
def check_python_version():
"""Vérifie la version de Python"""
print_section("Vérification de Python")
version = sys.version_info
if version.major < 3 or (version.major == 3 and version.minor < 8):
print("❌ Python 3.8+ requis")
return False
print(f"✅ Python {version.major}.{version.minor}.{version.micro}")
return True
def install_dependencies():
"""Installe les dépendances Python"""
print_section("Installation des dépendances")
try:
subprocess.check_call(
[sys.executable, "-m", "pip", "install", "-r", "requirements.txt"]
)
print("✅ Dépendances installées")
return True
except subprocess.CalledProcessError:
print("❌ Erreur lors de l'installation des dépendances")
return False
def setup_environment():
"""Configure le fichier d'environnement"""
print_section("Configuration de l'environnement")
env_file = Path(".env")
example_file = Path(".env.example")
if env_file.exists():
print("⚠️ Le fichier .env existe déjà")
response = input("Voulez-vous le remplacer ? (y/N): ")
if response.lower() != "y":
print("📝 Configuration manuelle requise")
return True
if not example_file.exists():
print("❌ Fichier .env.example manquant")
return False
# Copier le fichier exemple
env_file.write_text(example_file.read_text())
print("✅ Fichier .env créé")
# Demander la clé API (optionnelle)
print("\n📝 Configuration optionnelle:")
print(
"ℹ️ L'agent fonctionne sans token grâce aux APIs gratuites (OpenMeteo, wttr.in)"
)
print("💡 OpenWeatherMap offre des données premium mais nécessite un token gratuit")
print("🌐 Obtenez une clé gratuite sur: https://openweathermap.org/api")
api_key = input(
"Entrez votre clé API OpenWeatherMap (ENTRÉE pour ignorer): "
).strip()
if api_key:
# Remplacer la clé dans le fichier .env
content = env_file.read_text()
content = content.replace("your_openweather_api_key_here", api_key)
env_file.write_text(content)
print("✅ Clé API configurée")
else:
print("✅ Configuration sans token - APIs gratuites activées")
return True
def check_ollama():
"""Vérifie si Ollama est disponible"""
print_section("Vérification d'Ollama")
try:
import requests
response = requests.get("http://localhost:11434/api/tags", timeout=5)
if response.status_code == 200:
models = response.json().get("models", [])
print(f"✅ Ollama disponible avec {len(models)} modèle(s)")
if models:
print("Modèles disponibles:")
for model in models[:5]: # Afficher max 5 modèles
print(f" - {model['name']}")
else:
print("⚠️ Aucun modèle téléchargé")
print("📝 Téléchargez un modèle avec: ollama pull llama2")
return True
else:
print("❌ Ollama ne répond pas")
return False
except Exception as e:
print(f"❌ Ollama non accessible: {e}")
print("📝 Installez Ollama depuis: https://ollama.ai")
return False
def run_tests():
"""Lance les tests"""
print_section("Exécution des tests")
try:
subprocess.check_call(
[sys.executable, "-m", "unittest", "tests.test_agent", "-v"]
)
print("✅ Tous les tests passent")
return True
except subprocess.CalledProcessError:
print("⚠️ Certains tests ont échoué")
return False
def main():
"""Fonction principale d'installation"""
print("🤖 Installation de l'Agent IA Météo Local")
# Vérifications et installations
steps = [
("Python", check_python_version),
("Dépendances", install_dependencies),
("Configuration", setup_environment),
("Ollama", check_ollama),
("Tests", run_tests),
]
results = {}
for name, func in steps:
results[name] = func()
# Résumé
print_section("Résumé de l'installation")
all_ok = True
for name, success in results.items():
status = "✅" if success else "❌"
print(f"{status} {name}")
if not success and name in ["Python", "Dépendances"]:
all_ok = False
if all_ok:
print(f"\n🚀 Installation terminée !")
print(f" Lancez l'agent avec: python main.py")
if not results.get("Ollama", False):
print(f"\n⚠️ Ollama non disponible - fonctionnalités limitées")
else:
print(f"\n❌ Installation incomplète")
print(f" Corrigez les erreurs ci-dessus avant de continuer")
if __name__ == "__main__":
main()