|
|
|
|
|
""" |
|
|
start.py |
|
|
SCRIPT MAESTRO DE LANZAMIENTO |
|
|
Ejecuta: python start.py |
|
|
""" |
|
|
import subprocess |
|
|
import sys |
|
|
import time |
|
|
import signal |
|
|
import os |
|
|
import webbrowser |
|
|
|
|
|
|
|
|
processes = [] |
|
|
|
|
|
def run_process(command, name): |
|
|
"""Lanza un proceso en segundo plano""" |
|
|
print(f"🚀 Iniciando {name}...") |
|
|
|
|
|
try: |
|
|
|
|
|
|
|
|
cmd_list = command.split() |
|
|
p = subprocess.Popen(cmd_list, cwd=os.getcwd()) |
|
|
processes.append(p) |
|
|
return p |
|
|
except Exception as e: |
|
|
print(f"❌ Error al iniciar {name}: {e}") |
|
|
return None |
|
|
|
|
|
def cleanup(signum, frame): |
|
|
"""Cierra todo al pulsar Ctrl+C""" |
|
|
print("\n🛑 Cerrando todos los servidores...") |
|
|
for p in processes: |
|
|
try: |
|
|
p.terminate() |
|
|
except: |
|
|
pass |
|
|
sys.exit(0) |
|
|
|
|
|
|
|
|
signal.signal(signal.SIGINT, cleanup) |
|
|
|
|
|
def main(): |
|
|
print("\n🛡️ CONTRACT GUARDIAN - PREPARANDO DEMO 🛡️") |
|
|
print("============================================") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
run_process(f"{sys.executable} mcp_servers/law_retriever/laws_retriever_server.py", "Law Retriever (Port 8001)") |
|
|
|
|
|
|
|
|
run_process(f"{sys.executable} mcp_servers/clause_classifier/clause_classifier_server.py", "Clause Classifier (Port 8002)") |
|
|
|
|
|
print("⏳ Esperando 5 segundos a que los servidores arranquen...") |
|
|
time.sleep(5) |
|
|
|
|
|
|
|
|
print("🎨 Iniciando Interfaz Gradio...") |
|
|
ui_process = run_process(f"{sys.executable} ui/app.py", "User Interface") |
|
|
|
|
|
|
|
|
print("🌍 Abriendo navegador...") |
|
|
time.sleep(2) |
|
|
webbrowser.open("http://localhost:7860") |
|
|
|
|
|
print("\n✅ TODO LISTO. Presiona Ctrl+C para detener todo.\n") |
|
|
|
|
|
|
|
|
if ui_process: |
|
|
ui_process.wait() |
|
|
|
|
|
cleanup(None, None) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|