|
|
|
|
|
|
|
|
from client import LlamaClient |
|
|
import time |
|
|
import json |
|
|
|
|
|
def test_basic_functionality(base_url: str): |
|
|
"""Pruebas básicas de funcionalidad""" |
|
|
print("🧪 Ejecutando pruebas básicas...") |
|
|
client = LlamaClient(base_url) |
|
|
|
|
|
tests = [] |
|
|
|
|
|
|
|
|
print("\n1. Test chat simple...") |
|
|
try: |
|
|
response = client.chat( |
|
|
message="Hola, ¿puedes presentarte en una línea?", |
|
|
max_tokens=50 |
|
|
) |
|
|
|
|
|
if "error" in response: |
|
|
tests.append(("Chat simple", False, response['error'])) |
|
|
else: |
|
|
tests.append(("Chat simple", True, f"Respuesta: {response['response'][:50]}...")) |
|
|
except Exception as e: |
|
|
tests.append(("Chat simple", False, str(e))) |
|
|
|
|
|
|
|
|
print("2. Test system prompt...") |
|
|
try: |
|
|
response = client.chat( |
|
|
message="¿Cuánto es 2+2?", |
|
|
system_prompt="Eres una calculadora. Solo responde con números.", |
|
|
max_tokens=20 |
|
|
) |
|
|
|
|
|
success = "error" not in response and "4" in response.get('response', '') |
|
|
tests.append(("System prompt", success, response.get('response', 'No response'))) |
|
|
except Exception as e: |
|
|
tests.append(("System prompt", False, str(e))) |
|
|
|
|
|
|
|
|
print("3. Test historial...") |
|
|
try: |
|
|
history = [["¿Cómo te llamas?", "Soy un asistente de IA."]] |
|
|
response = client.chat( |
|
|
message="¿Recuerdas cómo te llamas?", |
|
|
history=history, |
|
|
max_tokens=50 |
|
|
) |
|
|
|
|
|
success = "error" not in response |
|
|
tests.append(("Historial", success, response.get('response', 'Error')[:50])) |
|
|
except Exception as e: |
|
|
tests.append(("Historial", False, str(e))) |
|
|
|
|
|
|
|
|
print("4. Test streaming...") |
|
|
try: |
|
|
chunks_received = 0 |
|
|
final_response = "" |
|
|
|
|
|
for chunk in client.chat_stream( |
|
|
message="Cuenta del 1 al 5", |
|
|
max_tokens=30 |
|
|
): |
|
|
chunks_received += 1 |
|
|
if "error" in chunk: |
|
|
tests.append(("Streaming", False, chunk['error'])) |
|
|
break |
|
|
|
|
|
final_response = chunk['response'] |
|
|
if chunk.get("is_complete", False): |
|
|
break |
|
|
|
|
|
success = chunks_received > 1 and final_response |
|
|
tests.append(("Streaming", success, f"{chunks_received} chunks, respuesta: {final_response[:30]}")) |
|
|
except Exception as e: |
|
|
tests.append(("Streaming", False, str(e))) |
|
|
|
|
|
|
|
|
print("5. Test estado de cola...") |
|
|
try: |
|
|
status = client.get_queue_status() |
|
|
success = "queue_size" in status and "is_processing" in status |
|
|
tests.append(("Estado cola", success, str(status))) |
|
|
except Exception as e: |
|
|
tests.append(("Estado cola", False, str(e))) |
|
|
|
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("📊 RESULTADOS DE PRUEBAS") |
|
|
print("="*60) |
|
|
|
|
|
passed = 0 |
|
|
for test_name, success, details in tests: |
|
|
status = "✅ PASS" if success else "❌ FAIL" |
|
|
print(f"{status} {test_name}: {details}") |
|
|
if success: |
|
|
passed += 1 |
|
|
|
|
|
print(f"\n🎯 Resultado: {passed}/{len(tests)} pruebas pasaron") |
|
|
return passed == len(tests) |
|
|
|
|
|
def stress_test(base_url: str, num_requests: int = 5): |
|
|
"""Prueba de estrés con múltiples requests""" |
|
|
print(f"\n⚡ Prueba de estrés ({num_requests} requests)...") |
|
|
client = LlamaClient(base_url) |
|
|
|
|
|
start_time = time.time() |
|
|
results = [] |
|
|
|
|
|
for i in range(num_requests): |
|
|
print(f"Request {i+1}/{num_requests}...", end=" ") |
|
|
|
|
|
try: |
|
|
request_start = time.time() |
|
|
response = client.chat( |
|
|
message=f"Esta es la request número {i+1}. Responde brevemente.", |
|
|
max_tokens=50 |
|
|
) |
|
|
request_time = time.time() - request_start |
|
|
|
|
|
if "error" in response: |
|
|
print(f"❌ Error: {response['error']}") |
|
|
results.append({"success": False, "time": request_time, "error": response['error']}) |
|
|
else: |
|
|
print(f"✅ {request_time:.2f}s") |
|
|
results.append({"success": True, "time": request_time, "response_length": len(response['response'])}) |
|
|
|
|
|
except Exception as e: |
|
|
print(f"❌ Exception: {e}") |
|
|
results.append({"success": False, "time": 0, "error": str(e)}) |
|
|
|
|
|
total_time = time.time() - start_time |
|
|
|
|
|
|
|
|
successful = [r for r in results if r['success']] |
|
|
failed = [r for r in results if not r['success']] |
|
|
|
|
|
print(f"\n📈 Análisis de estrés:") |
|
|
print(f" • Total: {total_time:.2f}s") |
|
|
print(f" • Exitosas: {len(successful)}/{num_requests}") |
|
|
print(f" • Fallidas: {len(failed)}/{num_requests}") |
|
|
|
|
|
if successful: |
|
|
avg_time = sum(r['time'] for r in successful) / len(successful) |
|
|
print(f" • Tiempo promedio: {avg_time:.2f}s") |
|
|
|
|
|
return len(successful) == num_requests |
|
|
|
|
|
def performance_benchmark(base_url: str): |
|
|
"""Benchmark de rendimiento""" |
|
|
print("\n🏁 Benchmark de rendimiento...") |
|
|
client = LlamaClient(base_url) |
|
|
|
|
|
test_cases = [ |
|
|
("Respuesta corta", "Hola", 20), |
|
|
("Respuesta media", "Explica qué es Python en un párrafo", 100), |
|
|
("Respuesta larga", "Describe la historia de la programación", 300), |
|
|
] |
|
|
|
|
|
for test_name, message, max_tokens in test_cases: |
|
|
print(f"\n{test_name} ({max_tokens} tokens)...") |
|
|
|
|
|
|
|
|
start_time = time.time() |
|
|
response = client.chat(message=message, max_tokens=max_tokens) |
|
|
normal_time = time.time() - start_time |
|
|
|
|
|
if "error" in response: |
|
|
print(f" ❌ Error: {response['error']}") |
|
|
continue |
|
|
|
|
|
|
|
|
start_time = time.time() |
|
|
for chunk in client.chat_stream(message=message, max_tokens=max_tokens): |
|
|
if chunk.get("is_complete", False): |
|
|
break |
|
|
stream_time = time.time() - start_time |
|
|
|
|
|
print(f" • Sin streaming: {normal_time:.2f}s") |
|
|
print(f" • Con streaming: {stream_time:.2f}s") |
|
|
print(f" • Tokens generados: ~{len(response['response'])} chars") |
|
|
|
|
|
def main(): |
|
|
"""Ejecutar todas las pruebas""" |
|
|
base_url = input("Ingresa la URL de tu Space: ").strip() |
|
|
|
|
|
if not base_url: |
|
|
print("❌ URL requerida") |
|
|
return |
|
|
|
|
|
if not base_url.startswith(('http://', 'https://')): |
|
|
base_url = f"https://{base_url}" |
|
|
|
|
|
print(f"🧪 Probando Space: {base_url}") |
|
|
print("="*60) |
|
|
|
|
|
|
|
|
basic_ok = test_basic_functionality(base_url) |
|
|
|
|
|
if basic_ok: |
|
|
print("\n✅ Pruebas básicas exitosas. Continuando...") |
|
|
stress_ok = stress_test(base_url, 3) |
|
|
performance_benchmark(base_url) |
|
|
|
|
|
if stress_ok: |
|
|
print("\n🎉 ¡Todas las pruebas pasaron! El Space funciona correctamente.") |
|
|
else: |
|
|
print("\n⚠️ Algunas pruebas de estrés fallaron. Verifica el rendimiento.") |
|
|
else: |
|
|
print("\n❌ Pruebas básicas fallaron. Verifica la configuración del Space.") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|