mock_server_code = r”’ from fastapi import FastAPI, tiempo de importación de solicitud app = FastAPI() STATE = {“calls”: 0} @app.post(“/v1/chat/completions”) async def chat_completions(solicitud: Solicitud): carga útil = await request.json() STATE[“calls”] += 1 model_name = payload.get(“modelo”, “mock-fara-7b”) si ESTADO[“calls”] == 1: content = ( “Abriré una página de prueba pública estable para que se pueda demostrar el bucle de control del navegador.\n” “{\”name\”:\”computer\”,\”arguments\”:{\”action\”:\”visit_url\”,\”url\”:\”https://example.com\”}}” ) else: content = ( “El navegador ha abierto el dominio de ejemplo, una página de demostración estable utilizada para documentación y ejemplos.\n” “{\”nombre\”:\”computadora\”,\”argumentos\”:{\”acción\”:\”terminar\”,\”estado\”:\”éxito\”}}” ) return { “id”: f”chatcmpl-mock-{ESTADO[‘calls’]}”, “objeto”: “chat.completion”, “creado”: int(time.time()), “modelo”: nombre_modelo, “opciones”: [
{
“index”: 0,
“message”: {
“role”: “assistant”,
“content”: content
},
“finish_reason”: “stop”
}
]”usage”: { “prompt_tokens”: 100, “completion_tokens”: 50, “total_tokens”: 150 } } ”’ MOCK_SERVER_FILE.write_text(mock_server_code) print(f”\nPunto final simulado escrito en: {MOCK_SERVER_FILE}”) if USE_REAL_FARA_ENDPOINT: endpoint_config = { “modelo”: REAL_FARA_MODEL, “base_url”: REAL_FARA_BASE_URL, “api_key”: REAL_FARA_API_KEY, } else: endpoint_config = { “modelo”: “mock-fara-7b”, “base_url”: “http://127.0.0.1:8001/v1”, “api_key”: “no necesario”, } ENDPOINT_CONFIG_PATH.write_text(json.dumps(endpoint_config, indent=2)) print(“\nConfiguración de punto final:”) print(ENDPOINT_CONFIG_PATH.read_text()) mock_process = Ninguno si no USE_REAL_FARA_ENDPOINT: print(“\nIniciando punto final simulado compatible con OpenAI…”) mock_process = subprocess.Popen(
[
sys.executable,
“-m”,
“uvicorn”,
“mock_fara_endpoint:app”,
“–host”,
“127.0.0.1”,
“–port”,
“8001”,
]cwd=str(WORKDIR), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, ) si no, wait_for_port(“127.0.0.1”, 8001, timeout=60): if mock_process y mock_process.stdout: print(mock_process.stdout.read()) rise RuntimeError(“El punto final simulado no se inició en el puerto 8001.””) print(“El punto final simulado se está ejecutando en http://127.0.0.1:8001/v1”) else: print(“\nUsando el punto final real de Fara. Asegúrese de que sea accesible.”)
{
“index”: 0,
“message”: {
“role”: “assistant”,
“content”: content
},
“finish_reason”: “stop”
}
]”usage”: { “prompt_tokens”: 100, “completion_tokens”: 50, “total_tokens”: 150 } } ”’ MOCK_SERVER_FILE.write_text(mock_server_code) print(f”\nPunto final simulado escrito en: {MOCK_SERVER_FILE}”) if USE_REAL_FARA_ENDPOINT: endpoint_config = { “modelo”: REAL_FARA_MODEL, “base_url”: REAL_FARA_BASE_URL, “api_key”: REAL_FARA_API_KEY, } else: endpoint_config = { “modelo”: “mock-fara-7b”, “base_url”: “http://127.0.0.1:8001/v1”, “api_key”: “no necesario”, } ENDPOINT_CONFIG_PATH.write_text(json.dumps(endpoint_config, indent=2)) print(“\nConfiguración de punto final:”) print(ENDPOINT_CONFIG_PATH.read_text()) mock_process = Ninguno si no USE_REAL_FARA_ENDPOINT: print(“\nIniciando punto final simulado compatible con OpenAI…”) mock_process = subprocess.Popen(
[
sys.executable,
“-m”,
“uvicorn”,
“mock_fara_endpoint:app”,
“–host”,
“127.0.0.1”,
“–port”,
“8001”,
]cwd=str(WORKDIR), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, ) si no, wait_for_port(“127.0.0.1”, 8001, timeout=60): if mock_process y mock_process.stdout: print(mock_process.stdout.read()) rise RuntimeError(“El punto final simulado no se inició en el puerto 8001.””) print(“El punto final simulado se está ejecutando en http://127.0.0.1:8001/v1”) else: print(“\nUsando el punto final real de Fara. Asegúrese de que sea accesible.”)