
Builder Spotlight
Qué hacen el túnel de Acurast y NodeGhost, y qué ocurre cuando se combinan
La forma habitual de añadir un LLM a un producto es apuntar un cliente compatible con OpenAI a una API alojada y enviar el prompt a los servidores de un proveedor externo. El modelo no es tuyo, y la máquina tampoco. Alojarlo por tu cuenta normalmente solo traslada la carga de trabajo a GPU alquiladas en la nube.
Este ejemplo, de la familia app-tunnel de Acurast, ejecuta en cambio el modelo en un único smartphone atestado. El túnel de Acurast hace que ese modelo, vinculado a una dirección local, sea accesible en una URL HTTPS pública, y NodeGhost lo sirve como un endpoint compatible con OpenAI listo para usar gracias a su función Trae tu propio modelo (BYOM). Dos capacidades y un paso de registro entre ellas.
Es una llamada normal a OpenAI. El modelo que la responde se ejecuta en un teléfono.
El proyecto de un vistazo
01 /
Qué es
Un modelo Qwen2.5-3B cuantizado que se ejecuta en un Processor de Acurast atestado y se consume como un endpoint normal compatible con OpenAI.
02 /
Qué lo hace posible
Dos capacidades: el túnel de Acurast para la accesibilidad y el gateway BYOM de NodeGhost para una superficie de API estándar. Un registro de endpoint las une.
03 /
Estado
Un ejemplo de referencia que funciona, desplegable hoy en Acurast Canary, y honesto sobre la velocidad que alcanza un modelo 3B en una CPU móvil.
01 / SECCIÓN
Qué hace el túnel de Acurast
Hacer que un servicio vinculado a una dirección local, en un teléfono detrás de NAT, sea accesible desde cualquier lugar sin conectividad entrante.
Un Processor de Acurast está detrás del NAT del operador móvil, sin IP pública. Un servicio vinculado a 127.0.0.1 en él es, por defecto, invisible desde fuera. El túnel es lo que cambia eso.
Accesibilidad entrante sin conexión entrante. El teléfono nunca acepta una conexión entrante. Se conecta hacia fuera con un conjunto de relays y mantiene esa conexión abierta, y el tráfico enviado a la URL pública del túnel vuelve por esa misma línea hasta el puerto local. El NAT del operador y la falta de una IP pública no son un obstáculo, porque en el teléfono nada espera tráfico entrante.
Una URL HTTPS pública con TLS automático. Cada túnel se activa en https://<clientId>.<your-domain>:8443, con certificados emitidos automáticamente mediante ACME. Quien llama habla HTTPS normal con un subdominio corriente.
Una identidad nueva en cada ejecución. Cada despliegue genera una clave P-256 nueva como identidad del túnel, y de esa clave se deriva un subdominio nuevo. La URL es propia de cada despliegue: solo funciona mientras el despliegue está activo y deja de funcionar cuando termina, y el despliegue comunica su URL real mediante un callback al arrancar. Si quieres una dirección estable, puedes conservar la clave en el bundle (en ese caso, un bundle filtrado también lleva la dirección) o hacer que el consumidor vuelva a registrarse cuando cambie la URL.
Reenvía un puerto, no un protocolo. El túnel no sabe que transporta tráfico de LLM; reenvía un puerto TCP. El ejemplo hermano app-tunnel/cargo ejecuta SSH sobre el mismo cliente de túnel, lo que demuestra que el túnel es una primitiva de uso general y que el servicio que hay detrás es intercambiable.
Se ejecuta en teléfonos atestados. El despliegue solo se asigna a teléfonos de Acurast atestados, y el cliente del túnel se ejecuta en el sandbox proot del runtime Shell junto a la carga de trabajo, coordinándose con el Processor a través de un puente JSON-RPC local.
02 / SECCIÓN
Qué hace NodeGhost, y el traspaso BYOM
Una API de OpenAI lista para usar delante de un backend que puede estar en cualquier sitio, incluso en un teléfono.
El README describe NodeGhost en términos concretos, y eso es todo lo que necesita este ejemplo: enruta la inferencia a través de Pocket Network, expone una API compatible con OpenAI y admite Trae tu propio modelo (BYOM).
Una API compatible con OpenAI lista para usar. NodeGhost expone la misma interfaz que la API de OpenAI, así que los clientes, las librerías y las herramientas existentes siguen funcionando tras cambiar la URL base.
Enrutado a través de Pocket Network. Las solicitudes se enrutan por la capa descentralizada de POKT en lugar de ir directamente al endpoint de un único proveedor.
Trae tu propio modelo. En lugar de usar un modelo alojado por NodeGhost, el operador apunta una clave de API a su propio backend compatible con OpenAI. En este ejemplo, ese backend es el llama-server del Processor de Acurast, al que se llega a través del túnel.
El traspaso. Cuando el túnel comunica su URL, la registras en NodeGhost como endpoint BYOM. (La llamada de registro del ejemplo omite la clave del endpoint, porque llama-server funciona sin autenticación por defecto.) A partir de ahí, una solicitud estándar de chat completions pasa por NodeGhost y por el túnel hasta el modelo en el teléfono, y la respuesta incluye el nombre del modelo, lo que confirma dónde se sirvió.
03 / SECCIÓN
Cómo se combinan los dos
Un registro convierte la accesibilidad más una API estándar en una solicitud que llega a un teléfono.
Por separado, los túneles y los gateways compatibles con OpenAI son algo corriente. Lo interesante del ejemplo es la unión: con un paso adicional, registrar la URL del túnel como backend BYOM, un modelo alojado en un teléfono se convierte en un endpoint de inferencia listo para usar, y la aplicación que llama no cambia en absoluto.
Teléfono · Acurast Processor (runtime Shell / proot)
llama-server :8080
Qwen2.5-3B-Instruct-Q4_K_M
↓
Túnel · Acurast Tunnel
conexión saliente a los relays -> https://<clientId>.<your-domain>:8443
(identidad P-256 efímera, TLS mediante ACME, URL comunicada por callback)
↓
Gateway · NodeGhost (compatible con OpenAI, enrutado por POKT)
URL del túnel registrada como endpoint BYOM
POST https://<gateway>/v1/chat/completions
-> enrutado por el túnel -> inferencia en el teléfono
04 / SECCIÓN
Qué funciona ya hoy
Un ejemplo desplegable que lleva una solicitud de OpenAI a un modelo alojado en un teléfono.
Al desplegarse, el Processor prepara un entorno Ubuntu con proot, compila un pequeño shim de loopback para que el servidor local se vincule correctamente dentro del sandbox, descarga llama.cpp y el modelo Qwen2.5-3B en tiempo de ejecución e inicia el servidor tras un bucle de disponibilidad controlado por health checks. El túnel solo se abre cuando el modelo ya se ha cargado.
Sigues la secuencia a través del receptor del callback: la preparación del entorno, las descargas, la carga del modelo, el modelo listo y, por último, un evento started que incluye la URL pública del túnel. Registra esa URL en NodeGhost, envía una solicitud de chat normal y la respuesta vuelve desde el teléfono.
05 / SECCIÓN
El límite real
Toda capacidad tiene límites, y este es fácil de nombrar.
Un modelo 3B cuantizado a Q4 que se ejecuta en una CPU ARM móvil genera unos 3 tokens por segundo. Una respuesta de unos 120 tokens tarda unos 45 segundos, y el modelo comete errores básicos en razonamientos de varios pasos. Ese es el límite de este modelo en este hardware, no un límite del túnel, del runtime ni de la red.
En la práctica, el patrón encaja con trabajo asíncrono, por lotes o de contexto corto: resúmenes en segundo plano, clasificación, generación en cola, pasos de agentes que no están en la ruta crítica de una persona. No está pensado para el chat interactivo. Elegir un modelo más pequeño para lograr más velocidad, o aceptar la latencia porque quieres el modelo en hardware que controlas, son decisiones igual de razonables.
Hasta dónde se generaliza
Al túnel no le importa lo que reenvía, y NodeGhost no exige que el backend esté alojado. El ejemplo hermano cargo lo demuestra ejecutando SSH sobre el mismo túnel. Cualquier servicio vinculado a una dirección local en un teléfono atestado puede hacerse accesible así, y cualquier carga de trabajo con forma de OpenAI puede ponerse delante sin cambios. El modelo es simplemente lo que había al otro lado esta vez.
Sobre el stack
NodeGhost es un gateway descentralizado de inferencia de IA que enruta a través de Pocket Network, expone una API compatible con OpenAI y admite Trae tu propio modelo (BYOM). Más información en
nodeghost.ai.
Pocket Network es la capa descentralizada por la que NodeGhost enruta las solicitudes. Más información en
pocket.network.
Acurast es una red descentralizada de smartphones atestados que aporta computación distribuida en el edge, donde las cargas de trabajo se despliegan en teléfonos atestados de toda la red. Más información en
acurast.com.
Este ejemplo es una compilación de referencia de Acurast, publicada en el repositorio acurast-example-apps.
¿Construyes sobre Acurast?
Si ejecutas tus propios modelos, backends de agentes u otros servicios en teléfonos atestados, habla con el equipo. Únete al Discord.