Conecte el Ollama local de su portátil a Entity Enricher con un solo comando. Use los modelos que ya tiene, mantenga ciertas entradas en su equipo y revoque el acceso al instante, todo a través de una única conexión HTTPS saliente.
Production (Hetzner) Your Laptop / your server
┌─────────────────────────┐ ┌────────────────────┐
│ Org enrichment │ │ ee-tunnel CLI │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ Ollama provider URL: │ │ Ollama :11434 │
│ http://ollama.<org> │ │ ┌──────────────┐ │
│ .tunnel/v1/chat │ │ │ qwen3:36b │ │
│ │ │ │ │ llama3:70b │ │
│ ▼ │ │ │ ... │ │
│ WebSocket bridge │◀───────▶│ └──────────────┘ │
└─────────────────────────┘ └────────────────────┘
one outbound :443/wss connectionEl nombre de host sintético ollama.<org-slug>.tunnel nunca se resuelve mediante DNS. Un transporte personalizado en el proceso de Entity Enricher intercepta las solicitudes de *.tunnel y las enruta a través del WebSocket activo correspondiente.
Ejecute enriquecimientos con modelos de pesos abiertos ya descargados en su portátil (Llama 3, Qwen, DeepSeek, Mistral, …) sin volver a descargarlos en el servidor.
Para prompts sensibles, dirija enriquecimientos específicos a través de su propia GPU. La plataforma sigue registrando coste, tokens y metadatos; solo la inferencia en sí permanece local.
Descargue un modelo con `ollama pull` en su equipo, haga clic en Descubrir modelos y aparecerá en el selector de Entity Enricher con la longitud de contexto y las capacidades reales.
Cuando un proveedor alojado le aplica límites de tasa, conmute a un modelo local por túnel durante el resto de un lote.
Dos comandos en su portátil, un clic en el navegador. Todo el proceso lleva alrededor de un minuto.
Abra Claves de API → Túneles de Ollama y haga clic en Nuevo túnel de Ollama. Escriba una etiqueta para reconocer este dispositivo más adelante (p. ej. "MacBook de Anthony").
Pegue esto en una terminal. El script verifica una firma cosign antes de instalar.
curl -fsSL https://entityenricher.ai/install.sh | sh
El instalador muestra lo que está a punto de hacer (URL de descarga, firma, ruta de instalación) y hace una pausa de 5 segundos para darle una ventana de Ctrl+C. El código fuente está en TOT-Concept/ee-tunnel (MIT). Los usuarios de Windows utilizan install.ps1 en su lugar.
Ejecute ee-tunnel pair. Se abre una pestaña del navegador en /tunnel/connect con un código de 6 caracteres. Confirme la etiqueta del dispositivo y haga clic en Conectar.
ee-tunnel pair --server https://entityenricher.ai Open this URL in your browser to confirm pairing: https://entityenricher.ai/tunnel/connect?code=9KV-DU6 Code: 9KV-DU6 Waiting for confirmation...
Nunca copia ni pega un token. El navegador solo ve los metadatos del tunnel; la CLI recibe sus credenciales a través de su propio canal de sondeo.
Ejecute ee-tunnel. El indicador de estado en la pestaña Túneles cambia a Conectado en segundos. Luego haga clic en Descubrir modelos en el proveedor Ollama en Modelos y precios para importar automáticamente todos los modelos de chat instalados localmente.
El emparejamiento utiliza un flujo de código de dispositivo estilo OAuth (formato RFC 8628). El usuario escribe un código corto en un navegador en lugar de copiar y pegar un token. El navegador solo ve los metadatos del túnel; la CLI recibe su token de actualización directamente por su propio canal de sondeo: canje de un solo uso.
laptop entity-enricher browser
│ │ │
│── ee-tunnel pair ──────▶ │ │
│ --server URL │ │
│ │ │
│ POST /api/tunnel/ │ │
│ device-code │ │
│ ───────────────────────▶ │ │
│ ◀── { device_code, │ │
│ user_code='9KV-DU6', │ │
│ verification_uri } │ │
│ │ │
│ prints URL, opens │ │
│ browser at /tunnel/ │ │
│ connect?code=… ──────────────────────────────────────▶│
│ │ │
│ │ POST /api/tunnel/confirm/ │
│ │ {user_code} │
│ │ body: { label } │
│ │ Authorization: Bearer │
│ │ <user JWT, role=owner> │
│ │ ◀──────────────────────────── │
│ │ • create tunnel_credentials │
│ │ • mark device_code complete │
│ │ with refresh_token │
│ │ ────────────────────────────▶│
│ │ 200 { tunnel metadata } │
│ │ │
│ POST /api/tunnel/poll │ │
│ ───────────────────────▶ │ │
│ ◀── { status:'ok', │ │
│ refresh_token, │ │
│ server_url, │ │
│ tunnel_id } │ │
│ │ │
│ persist token mode 0600 │ │
│ ✓ Paired │ │Una vez conectado, su Ollama a través del túnel es simplemente otro proveedor de LLM para el resto de la plataforma. Multiespecialización, fusión, lote: todo funciona sin cambios.
enrichment job
│
▼
agent_factory → Ollama provider, base_url=http://ollama.acme.tunnel
│
▼
custom httpx transport ← intercepts *.tunnel hosts
│
▼
TunnelSession (one per laptop)
│ frames request: { id, method, path, headers, body_b64 }
▼
WebSocket ──────────────────────▶ ee-tunnel CLI
│
▼
localhost:11434
(your local Ollama)
│
response_start, response_chunk, ...
◀──────────────────────────────────┘
│
▼
pydantic_ai consumes streaming body → enrichment recordVarios enriquecimientos en curso comparten un único WebSocket del tunnel. Cada solicitud recibe un UUID; los frames se demultiplexan por id en ambos extremos, de modo que las llamadas concurrentes (p. ej. multiespecialización) funcionan de forma natural.
Las respuestas en streaming (el stream=true de Ollama) viajan como una secuencia de tramas response_chunk, de modo que las actualizaciones token a token de la interfaz siguen siendo incrementales incluso a través del tunnel.
El propietario de una organización hace clic en «Nuevo túnel de Ollama», escribe una etiqueta y confirma. La plataforma asigna las credenciales.
En su portátil, ejecute el instalador de una línea y `ee-tunnel pair`. Se abre una pestaña del navegador: confirme con la misma cuenta de Entity Enricher.
Ejecute `ee-tunnel`. La CLI abre un único WebSocket HTTPS saliente. El nuevo proveedor aparece en su lista de modelos en segundos.
Haga clic en Descubrir modelos: cada modelo de su Ollama local se importa automáticamente con su longitud de contexto y capacidades reales. Enriquezca como de costumbre.
Un clic en la interfaz cierra el WebSocket e invalida las credenciales de inmediato.
El túnel se diseñó para añadir la menor superficie de ataque posible. El borrador anterior de la función usaba un servidor SSH público en un puerto nuevo; lo reemplazamos por el multiplexor WebSocket en proceso para eliminar por completo la superficie de ataque de SSH.
Todo pasa por el ingress :443 existente: el mismo endpoint TLS que la aplicación web. Sin servidor SSH, sin puerto de Ollama expuesto.
La CLI inicia el WebSocket. Su portátil nunca acepta conexiones entrantes: no es necesario modificar el firewall de su red doméstica.
Un túnel está vinculado a una sola organización. Los demás inquilinos de la plataforma no pueden verlo, seleccionarlo ni invocarlo. Los administradores del sistema tienen visibilidad entre organizaciones por diseño.
Revocar elimina las credenciales de la base de datos. La siguiente solicitud falla con un 401. El WebSocket activo se expulsa en ~1 segundo.
El flujo de OAuth en el navegador gestiona las credenciales de principio a fin. El navegador nunca ve su token de actualización; la CLI lo recibe directamente a través de su canal de sondeo.
5 túneles activos por organización de forma predeterminada; límite de 16 MB por trama WebSocket entrante; errores 402 estructurados al superar la cuota.
Protección SSRF. La función de túnel también cierra una brecha preexistente: el campo specific_endpoint de los proveedores Ollama ahora se valida contra una expresión regular de lista de permitidos, de modo que las IP privadas, el loopback y los nombres de servicio de Docker compose nunca pueden usarse como URL de un proveedor.
| Comando | Qué hace |
|---|---|
| ee-tunnel pair --server URL | Emparejamiento Browser-OAuth. Abre la URL de verificación automáticamente. |
| ee-tunnel pair --server URL <token> | Emparejamiento manual con un token de actualización copiado desde la interfaz (alternativa para entornos sin interfaz gráfica). |
| ee-tunnel | Conecte y sirva. Se reconecta con retroceso exponencial (1 s → 30 s) ante caídas transitorias. |
| ee-tunnel status | Muestra el estado de emparejamiento, la URL del servidor, la URL de Ollama configurada y la etiqueta. |
| ee-tunnel disconnect | Olvidar las credenciales locales. No las revoca del lado del servidor; use la interfaz para ello. |
| ee-tunnel version | Versión para imprimir. |
Si su Ollama escucha en un puerto diferente, defina EE_TUNNEL_OLLAMA_URL o pase --ollama URL al momento de emparejar.
macOS · ~/Library/Application Support/ee-tunnel/
Linux · ~/.config/ee-tunnel/
Windows · %APPDATA%\ee-tunnel\
| Túneles activos por organización | 5 (predeterminado) |
| TTL del refresh-token | 365 días |
| TTL del token de acceso | 15 minutos |
| TTL de emparejamiento | 10 minutos |
| Máximo de trama WebSocket entrante | 16 MB |
| Tamaño de fragmento saliente (CLI) | 16 KB |
| Intervalo de latido | 30 segundos |
No. La CLI inicia una conexión WebSocket saliente. Su equipo nunca acepta conexiones entrantes y su puerto de Ollama permanece vinculado a localhost.
La CLI se cierra correctamente al desconectarse. Al reanudar el portátil y volver a ejecutar ee-tunnel se reconecta con las credenciales existentes. Los enriquecimientos que se ejecutan mientras el túnel está inactivo fallan con un ConnectError limpio.
No. Cada tunnel está vinculado a una sola organization. Los demás inquilinos de la plataforma no pueden verlo, seleccionarlo ni invocarlo. Los administradores del sistema pueden ver todos los tunnels por diseño (igual que las claves de API globales).
Casi siempre: solo se necesita el puerto saliente :443. La misma ruta que usa la aplicación web.
Haga clic en «Rotar token» en la pestaña Tunnels. El token anterior se invalida de inmediato; el modal muestra un nuevo comando de emparejamiento para su equipo.
Sí: la CLI reenvía HTTP arbitrario. Configure EE_TUNNEL_OLLAMA_URL con cualquier endpoint local compatible con OpenAI. Cualquier cosa que hable el /v1/chat/completions o /api/tags de Ollama funcionará.
La CLI y el instalador tienen licencia MIT y residen en un repositorio público para que cualquiera pueda auditar lo que se ejecuta en su máquina.
Fuente: github.com/TOT-Concept/ee-tunnel
Versiones: github.com/TOT-Concept/ee-tunnel/releases — cada binario se firma con cosign antes de su publicación.
Audite el instalador: curl -fsSL https://entityenricher.ai/install.sh | less