-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_setup.py
More file actions
198 lines (168 loc) · 6.02 KB
/
test_setup.py
File metadata and controls
198 lines (168 loc) · 6.02 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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#!/usr/bin/env python3
"""
Script de testing básico para verificar componentes de Fase -1
"""
import sys
import os
from pathlib import Path
# Añadir src al path
sys.path.insert(0, str(Path(__file__).parent / "src"))
print("=" * 60)
print("Test de Componentes - Fase -1")
print("=" * 60)
print()
# Test 1: Verificar imports
print("Test 1: Verificando imports...")
try:
from utils.config import Config
from utils.logging import setup_logging, get_logger
print(" ✓ Utils importados correctamente")
except Exception as e:
print(f" ✗ Error importando utils: {e}")
sys.exit(1)
# Test 2: Configuración
print("\nTest 2: Verificando configuración...")
try:
config = Config()
hotword = config.get('audio.hotword')
print(f" ✓ Configuración cargada")
print(f" - Hotword: {hotword}")
print(f" - Modelo STT: {config.get('audio.stt.model')}")
print(f" - Modelo LLM rápido: {config.get('llm.rapid.model')}")
except Exception as e:
print(f" ✗ Error en configuración: {e}")
sys.exit(1)
# Test 3: API Key de Claude
print("\nTest 3: Verificando API key de Claude...")
try:
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv('ANTHROPIC_API_KEY')
if not api_key:
print(" ✗ ANTHROPIC_API_KEY no encontrada en .env")
print(" Edita .env y añade tu API key")
sys.exit(1)
if api_key == "tu_api_key_aqui":
print(" ✗ API key no configurada (aún tiene valor por defecto)")
print(" Edita .env con tu API key real")
sys.exit(1)
print(" ✓ API key encontrada")
except Exception as e:
print(f" ✗ Error verificando API key: {e}")
sys.exit(1)
# Test 4: Ollama
print("\nTest 4: Verificando Ollama...")
try:
import aiohttp
import asyncio
async def test_ollama():
async with aiohttp.ClientSession() as session:
try:
async with session.get('http://localhost:11434/api/tags', timeout=5) as resp:
if resp.status == 200:
data = await resp.json()
models = [m['name'] for m in data.get('models', [])]
if 'llama3.2:3b' in models:
print(" ✓ Ollama corriendo con llama3.2:3b")
return True
else:
print(" ✗ Modelo llama3.2:3b no encontrado")
print(" Ejecuta: ollama pull llama3.2:3b")
return False
else:
print(" ✗ Ollama respondió con error")
return False
except asyncio.TimeoutError:
print(" ✗ Timeout conectando a Ollama")
print(" ¿Está Ollama corriendo? Ejecuta: ollama serve")
return False
except aiohttp.ClientConnectorError:
print(" ✗ No se puede conectar a Ollama")
print(" Ejecuta: ollama serve")
return False
result = asyncio.run(test_ollama())
if not result:
sys.exit(1)
except Exception as e:
print(f" ✗ Error verificando Ollama: {e}")
sys.exit(1)
# Test 5: Whisper
print("\nTest 5: Verificando Whisper...")
try:
import whisper
print(" ✓ Whisper importado correctamente")
print(" (Modelo se descargará en primer uso)")
except Exception as e:
print(f" ✗ Error importando Whisper: {e}")
print(" Instala con: pip install openai-whisper")
sys.exit(1)
# Test 6: Torch (para VAD)
print("\nTest 6: Verificando PyTorch...")
try:
import torch
print(f" ✓ PyTorch {torch.__version__} instalado")
except Exception as e:
print(f" ✗ Error importando PyTorch: {e}")
sys.exit(1)
# Test 7: Sounddevice
print("\nTest 7: Verificando sounddevice...")
try:
import sounddevice as sd
devices = sd.query_devices()
print(" ✓ sounddevice funcionando")
# Mostrar dispositivos de entrada
input_devices = [d for d in devices if d['max_input_channels'] > 0]
if input_devices:
print(f" Dispositivos de entrada encontrados: {len(input_devices)}")
else:
print(" ⚠ No se encontraron dispositivos de entrada")
except Exception as e:
print(f" ✗ Error con sounddevice: {e}")
sys.exit(1)
# Test 8: Anthropic
print("\nTest 8: Verificando conexión con Claude API...")
try:
from anthropic import Anthropic
client = Anthropic(api_key=os.getenv('ANTHROPIC_API_KEY'))
# Test simple
try:
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=10,
messages=[{"role": "user", "content": "test"}]
)
print(" ✓ Claude API funcionando")
except Exception as e:
print(f" ✗ Error conectando con Claude API: {e}")
print(" Verifica que tu API key es válida")
sys.exit(1)
except Exception as e:
print(f" ✗ Error con Anthropic: {e}")
sys.exit(1)
# Test 9: Directorios
print("\nTest 9: Verificando directorios...")
try:
bandeja = Path("/Users/victorgarzon/Desktop/bandeja_entrada")
data_dir = Path.home() / ".asistente_data"
logs_dir = data_dir / "logs"
if not bandeja.exists():
print(f" ⚠ Bandeja de entrada no existe, creando...")
bandeja.mkdir(parents=True, exist_ok=True)
if not data_dir.exists():
print(f" ⚠ Directorio de datos no existe, creando...")
data_dir.mkdir(parents=True, exist_ok=True)
if not logs_dir.exists():
print(f" ⚠ Directorio de logs no existe, creando...")
logs_dir.mkdir(parents=True, exist_ok=True)
print(" ✓ Todos los directorios existen")
except Exception as e:
print(f" ✗ Error con directorios: {e}")
sys.exit(1)
# Resumen
print("\n" + "=" * 60)
print("✓ Todos los tests pasaron correctamente")
print("=" * 60)
print()
print("Sistema listo para ejecutar:")
print(" python src/main.py")
print()