Tunnel Ollama - Documentazione di Entity Enricher

Tunnel Ollama

Collega l'Ollama locale del tuo laptop a Entity Enricher con un solo comando. Usa i modelli che hai già, mantieni determinati input sulla tua macchina e revoca l'accesso all'istante — tutto tramite un'unica connessione HTTPS in uscita.

            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

Il nome host sintetico ollama.<org-slug>.tunnel non viene mai risolto dal DNS. Un trasporto personalizzato nel processo di Entity Enricher intercetta le richieste per *.tunnel e le instrada attraverso il WebSocket attivo corrispondente.

Perché usare un tunnel?

Utilizzate i modelli che avete già

Esegua arricchimenti su modelli open-weight già scaricati sul suo laptop (Llama 3, Qwen, DeepSeek, Mistral, …) senza riscaricarli sul server.

Mantieni determinati input sul proprio dispositivo

Per i prompt sensibili, indirizzate enrichment specifici tramite la vostra GPU. La piattaforma registra comunque costi, token e metadati — solo l'inferenza vera e propria rimane in locale.

Provate un nuovo modello in 30 secondi

Scaricate un modello con `ollama pull` sul vostro computer, fate clic su Scopri modelli e comparirà nel selettore di Entity Enricher con lunghezza di contesto e capacità reali.

Alleggerisci i carichi di lavoro intermittenti

Quando un provider ospitato applica un limite di frequenza, è possibile passare a un modello locale tramite tunnel per il resto del batch.

Avvio rapido

Due comandi sul vostro laptop, un clic nel browser. L'intero flusso richiede circa un minuto.

  1. 1

    Crea un tunnel nell'interfaccia

    Aprite API Keys → Ollama Tunnels e fate clic su New Ollama Tunnel. Digitate un'etichetta per riconoscere questo dispositivo in seguito (es. "MacBook di Anthony").

    [Segnaposto screenshot — scheda Tunnel con il pulsante "New Ollama Tunnel" evidenziato]
  2. 2

    Installa la CLI sul tuo laptop

    Incolla questo in un terminale. Lo script verifica una firma cosign prima dell'installazione.

    curl -fsSL https://entityenricher.ai/install.sh | sh

    Il programma di installazione stampa ciò che sta per fare (URL di download, firma, percorso di installazione) e si mette in pausa per 5 secondi, lasciando una finestra per premere Ctrl+C. Il codice sorgente si trova su TOT-Concept/ee-tunnel (MIT). Gli utenti Windows utilizzano invece install.ps1.

  3. 3

    Associa tramite il browser

    Esegua ee-tunnel pair. Si apre una scheda del browser su /tunnel/connect con un codice di 6 caratteri. Confermi l'etichetta del dispositivo e faccia clic su Connetti.

    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...
    [Segnaposto screenshot — pagina di conferma /tunnel/connect con device-code]

    Non deve mai copiare e incollare un token. Il browser vede solo i metadati del tunnel; la CLI riceve le proprie credenziali tramite il suo canale di polling dedicato.

  4. 4

    Connetti e scopri i model

    Esegua ee-tunnel. L'indicatore di stato nella scheda Tunnel passa a Connesso in pochi secondi. Quindi faccia clic su Rileva modelli sul provider Ollama in Modelli e prezzi per importare automaticamente ogni modello di chat installato localmente.

    [Segnaposto video — Discover Models importa 4 modelli Ollama locali nella piattaforma]

Come funziona l'abbinamento

L'associazione utilizza un flusso device-code in stile OAuth (formato RFC 8628). L'utente digita un codice breve nel browser invece di copiare e incollare un token. Il browser vede solo i metadati del tunnel; la CLI riceve il proprio refresh token direttamente sul proprio canale di polling — riscatto una tantum.

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

Come una richiesta attraversa il tunnel

Una volta connesso, per il resto della piattaforma il vostro Ollama in tunnel è semplicemente un altro provider LLM. Multi-dominio di competenza, fusione, batch — tutto funziona senza variazioni.

  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

Multiplexing

Più arricchimenti in corso condividono un unico WebSocket del tunnel. Ogni richiesta riceve un UUID; i frame vengono demultiplexati per id a entrambe le estremità, così le chiamate concorrenti (ad es. multi-competenza) funzionano in modo naturale.

Le risposte in streaming (stream=true di Ollama) viaggiano come una sequenza di frame response_chunk, così gli aggiornamenti token per token dell'interfaccia rimangono incrementali anche attraverso il tunnel.

Ciclo di vita

01

Crea

Un proprietario dell'organizzazione fa clic su "Nuovo tunnel Ollama", digita un'etichetta e conferma. La piattaforma assegna le credenziali.

02

Associa

Sul portatile, eseguire l'installer a riga singola e `ee-tunnel pair`. Si apre una scheda del browser — confermare con lo stesso account Entity Enricher.

03

Connetti

Esegua `ee-tunnel`. La CLI apre un singolo WebSocket HTTPS in uscita. Il nuovo provider compare nell'elenco dei modelli in pochi secondi.

04

Usa

Fai clic su Scopri modelli — ogni modello nel tuo Ollama locale viene importato automaticamente con lunghezza di contesto e funzionalità reali. Arricchisci come al solito.

05

Revoca

Un clic nell'interfaccia chiude il WebSocket e invalida immediatamente le credenziali.

Sicurezza

Il tunnel è stato progettato per aggiungere la minor superficie di attacco possibile. La precedente bozza della funzionalità utilizzava un server SSH pubblico su una nuova porta; l'abbiamo sostituita con il multiplexer WebSocket in-process per eliminare completamente la superficie di attacco SSH.

Nessuna nuova porta pubblica

Tutto passa attraverso l'ingress :443 esistente — lo stesso endpoint TLS dell'applicazione web. Nessun server SSH, nessuna porta Ollama esposta.

Solo in uscita

La CLI avvia il WebSocket. Il proprio laptop non accetta mai connessioni in entrata — non è necessario modificare il firewall della propria rete domestica.

Con ambito org

Un tunnel è associato a una singola organizzazione. Gli altri tenant della piattaforma non possono vederlo, selezionarlo o invocarlo. Gli amministratori di sistema hanno per progettazione visibilità tra le organizzazioni.

Revocabile istantaneamente

La revoca rimuove le credenziali dal database. La richiesta successiva fallisce con un errore 401. Il WebSocket attivo viene disconnesso entro circa 1 secondo.

Nessun segreto copiato e incollato

Il flusso OAuth nel browser gestisce le credenziali end-to-end. Il browser non vede mai il proprio refresh token; la CLI lo riceve direttamente attraverso il proprio canale di polling.

Quota e limiti di frame

5 tunnel attivi per organizzazione in modo predefinito; limite di 16 MB per i frame WebSocket in entrata; errori 402 strutturati in caso di superamento della quota.

Protezione SSRF. La funzionalità tunnel colma anche una lacuna preesistente: il campo specific_endpoint sui provider Ollama viene ora validato tramite un'espressione regolare di allowlist, così che indirizzi IP privati, loopback e nomi di servizio Docker compose non possano mai essere usati come URL di un provider.

Riferimento CLI

ComandoChe cosa fa
ee-tunnel pair --server URLAbbinamento browser-OAuth. Apre automaticamente l'URL di verifica.
ee-tunnel pair --server URL <token>Abbinamento manuale con un refresh token copiato dall'interfaccia (soluzione alternativa per ambienti headless).
ee-tunnelConnetti e servi. Si riconnette con backoff esponenziale (1s → 30s) in caso di interruzioni temporanee.
ee-tunnel statusMostra lo stato di associazione, l'URL del server, l'URL Ollama configurato, l'etichetta.
ee-tunnel disconnectDimentica le credenziali locali. Non revoca lato server; per questo utilizzate l'interfaccia.
ee-tunnel versionVersione per la stampa.

URL Ollama personalizzato

Se il suo Ollama è in ascolto su una porta diversa, imposti EE_TUNNEL_OLLAMA_URL o passi --ollama URL al momento dell'abbinamento.

Dove si trovano i file

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

Limiti e tempistiche

Tunnel attivi per organizzazione5 (predefinito)
TTL del token di aggiornamento365 giorni
TTL del token di accesso15 minuti
TTL associazione10 minuti
Frame WebSocket in entrata max16 MB
Dimensione del chunk in uscita (CLI)16 KB
Intervallo di heartbeat30 secondi

Domande comuni

Il mio Ollama è esposto a Internet?

No. La CLI avvia un WebSocket in uscita. Il tuo laptop non accetta mai connessioni in entrata e la porta di Ollama resta associata a localhost.

Che cosa succede quando il portatile va in sospensione?

La CLI si chiude in modo pulito alla disconnessione. Riattivando il laptop e rieseguendo ee-tunnel ci si riconnette con le credenziali esistenti. Gli arricchimenti in esecuzione mentre il tunnel è inattivo falliscono con un ConnectError pulito.

Altre organizzazioni possono usare il mio tunnel?

No. Ogni tunnel è vincolato a una sola organizzazione. Gli altri tenant della piattaforma non possono vederlo, selezionarlo o invocarlo. Gli amministratori di sistema possono vedere tutti i tunnel per progettazione (come per le chiavi API globali).

Funziona dietro un firewall aziendale?

Quasi sempre — è necessaria solo la porta :443 in uscita. Lo stesso percorso utilizzato dall'app web.

Come ruoto le credenziali?

Fai clic su "Ruota token" nella scheda Tunnel. Il vecchio token viene invalidato immediatamente; la finestra mostra un nuovo comando di associazione per il tuo laptop.

Posso usarlo senza Ollama?

Sì — la CLI inoltra HTTP arbitrario. Imposta EE_TUNNEL_OLLAMA_URL su qualsiasi endpoint locale compatibile con OpenAI. Tutto ciò che parla il protocollo /v1/chat/completions o /api/tags di Ollama funzionerà.

Open source

La CLI e l'installer sono rilasciati con licenza MIT e si trovano in un repository pubblico, così chiunque può verificare ciò che viene eseguito sulla propria macchina.

Sorgente: github.com/TOT-Concept/ee-tunnel

Release: github.com/TOT-Concept/ee-tunnel/releases — ogni binario è firmato con cosign prima della pubblicazione.

Verifichi l'installer: curl -fsSL https://entityenricher.ai/install.sh | less