Túneles de Ollama - Documentación de Entity Enricher

Túneles de Ollama

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 connection

El 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.

¿Por qué usar un túnel?

Utilice los modelos que ya tiene

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.

Mantenga ciertas entradas en su máquina

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.

Pruebe un nuevo modelo en 30 segundos

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.

Delegue trabajo en ráfagas

Cuando un proveedor alojado le aplica límites de tasa, conmute a un modelo local por túnel durante el resto de un lote.

Inicio rápido

Dos comandos en su portátil, un clic en el navegador. Todo el proceso lleva alrededor de un minuto.

  1. 1

    Crear un túnel en la interfaz

    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").

    [Marcador de captura de pantalla — pestaña Túneles con el botón «New Ollama Tunnel» resaltado]
  2. 2

    Instale la CLI en su portátil

    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.

  3. 3

    Empareje desde su navegador

    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...
    [Marcador de captura de pantalla — página de confirmación de /tunnel/connect con código de dispositivo]

    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.

  4. 4

    Conectar y descubrir modelos

    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.

    [Marcador de vídeo — Discover Models importando 4 modelos locales de Ollama a la plataforma]

Cómo funciona el emparejamiento

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                │                              │

Cómo fluye una solicitud a través del túnel

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 record

Multiplexación

Varios 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.

Ciclo de vida

01

Crear

El propietario de una organización hace clic en «Nuevo túnel de Ollama», escribe una etiqueta y confirma. La plataforma asigna las credenciales.

02

Emparejar

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.

03

Conectar

Ejecute `ee-tunnel`. La CLI abre un único WebSocket HTTPS saliente. El nuevo proveedor aparece en su lista de modelos en segundos.

04

Usar

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.

05

Revocar

Un clic en la interfaz cierra el WebSocket e invalida las credenciales de inmediato.

Seguridad

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.

No hay puertos públicos nuevos

Todo pasa por el ingress :443 existente: el mismo endpoint TLS que la aplicación web. Sin servidor SSH, sin puerto de Ollama expuesto.

Solo salida

La CLI inicia el WebSocket. Su portátil nunca acepta conexiones entrantes: no es necesario modificar el firewall de su red doméstica.

Ámbito de la organización

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.

Revocable al instante

Revocar elimina las credenciales de la base de datos. La siguiente solicitud falla con un 401. El WebSocket activo se expulsa en ~1 segundo.

Sin secretos copiados y pegados

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.

Cuota y límites de fotogramas

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.

Referencia de la CLI

ComandoQué hace
ee-tunnel pair --server URLEmparejamiento 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-tunnelConecte y sirva. Se reconecta con retroceso exponencial (1 s → 30 s) ante caídas transitorias.
ee-tunnel statusMuestra el estado de emparejamiento, la URL del servidor, la URL de Ollama configurada y la etiqueta.
ee-tunnel disconnectOlvidar las credenciales locales. No las revoca del lado del servidor; use la interfaz para ello.
ee-tunnel versionVersión para imprimir.

URL de Ollama personalizada

Si su Ollama escucha en un puerto diferente, defina EE_TUNNEL_OLLAMA_URL o pase --ollama URL al momento de emparejar.

Dónde residen los archivos

macOS · ~/Library/Application Support/ee-tunnel/
Linux · ~/.config/ee-tunnel/
Windows · %APPDATA%\ee-tunnel\

Límites y tiempos

Túneles activos por organización5 (predeterminado)
TTL del refresh-token365 días
TTL del token de acceso15 minutos
TTL de emparejamiento10 minutos
Máximo de trama WebSocket entrante16 MB
Tamaño de fragmento saliente (CLI)16 KB
Intervalo de latido30 segundos

Preguntas frecuentes

¿Está mi Ollama expuesto a internet?

No. La CLI inicia una conexión WebSocket saliente. Su equipo nunca acepta conexiones entrantes y su puerto de Ollama permanece vinculado a localhost.

¿Qué sucede cuando mi portátil entra en suspensión?

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.

¿Pueden otras organizaciones usar mi tunnel?

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).

¿Funciona esto detrás de un firewall corporativo?

Casi siempre: solo se necesita el puerto saliente :443. La misma ruta que usa la aplicación web.

¿Cómo roto las credenciales?

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.

¿Puedo usar esto sin Ollama?

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á.

Código abierto

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