Connectez l'Ollama local de votre ordinateur portable à Entity Enricher en une seule commande. Utilisez les modèles que vous avez déjà, gardez certaines entrées sur votre machine et révoquez l'accès instantanément — le tout via une seule connexion HTTPS sortante.
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 connectionLe nom d'hôte synthétique ollama.<org-slug>.tunnel n'est jamais résolu par DNS. Un transport personnalisé au sein du processus Entity Enricher intercepte les requêtes vers *.tunnel et les achemine via le WebSocket actif correspondant.
Exécutez des enrichissements avec des modèles open-weight déjà téléchargés sur votre ordinateur portable (Llama 3, Qwen, DeepSeek, Mistral, …) sans les retélécharger sur le serveur.
Pour les prompts sensibles, faites transiter certains enrichissements par votre propre GPU. La plateforme enregistre toujours le coût, les tokens et les métadonnées — seule l'inférence elle-même reste locale.
Récupérez un modèle avec `ollama pull` sur votre ordinateur portable, cliquez sur Découvrir les modèles, et il apparaît dans le sélecteur Entity Enricher avec sa longueur de contexte et ses capacités réelles.
Lorsqu'un fournisseur hébergé vous limite en débit, basculez vers un modèle local via tunnel pour le reste d'un traitement par lot.
Deux commandes sur votre ordinateur portable, un clic dans le navigateur. L'ensemble du processus prend environ une minute.
Ouvrez Clés API → Tunnels Ollama et cliquez sur Nouveau tunnel Ollama. Saisissez un libellé pour reconnaître cet appareil plus tard (p. ex. « MacBook d'Anthony »).
Collez ceci dans un terminal. Le script vérifie une signature cosign avant l'installation.
curl -fsSL https://entityenricher.ai/install.sh | sh
L'installateur affiche ce qu'il s'apprête à faire (URL de téléchargement, signature, chemin d'installation) et marque une pause de 5 secondes pour vous laisser le temps d'appuyer sur Ctrl+C. Le code source se trouve sur TOT-Concept/ee-tunnel (MIT). Sous Windows, utilisez install.ps1.
Exécutez ee-tunnel pair. Un onglet de navigateur s'ouvre sur /tunnel/connect avec un code à 6 caractères. Confirmez le libellé de l'appareil et cliquez sur Connecter.
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...
Vous ne copiez-collez jamais de jeton. Le navigateur ne voit que les métadonnées du tunnel ; le CLI reçoit ses identifiants via son propre canal d'interrogation.
Exécutez ee-tunnel. La pastille de statut dans l'onglet Tunnels passe à Connecté en quelques secondes. Cliquez ensuite sur Découvrir les modèles sur le fournisseur Ollama dans Modèles et tarifs pour importer automatiquement chaque modèle de chat installé localement.
L'appairage utilise un flux de code d'appareil de type OAuth (au format RFC 8628). L'utilisateur saisit un code court dans un navigateur au lieu de copier-coller un jeton. Le navigateur ne voit que les métadonnées du tunnel ; la CLI reçoit son jeton de rafraîchissement directement via son propre canal d'interrogation — échange à usage unique.
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 │ │Une fois connecté, votre Ollama tunnelisé n'est qu'un fournisseur LLM comme un autre pour le reste de la plateforme. Multi-expertise, fusion, traitement par lot — tout fonctionne sans changement.
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 recordPlusieurs enrichissements simultanés partagent une seule WebSocket de tunnel. Chaque requête reçoit un UUID ; les trames sont démultiplexées par id des deux côtés, de sorte que les appels concurrents (p. ex. multi-expertise) fonctionnent naturellement.
Les réponses en streaming (stream=true d'Ollama) transitent sous forme d'une séquence de trames response_chunk, de sorte que les mises à jour de l'interface token par token restent incrémentales, même via le tunnel.
Un propriétaire d'organisation clique sur « Nouveau tunnel Ollama », saisit un libellé et confirme. La plateforme alloue les identifiants.
Sur votre ordinateur portable, exécutez l'installateur en une ligne puis `ee-tunnel pair`. Un onglet de navigateur s'ouvre — confirmez avec le même compte Entity Enricher.
Exécutez `ee-tunnel`. La CLI ouvre un unique WebSocket HTTPS sortant. Le nouveau fournisseur apparaît dans votre liste de modèles en quelques secondes.
Cliquez sur Découvrir les modèles — chaque modèle de votre Ollama local est importé automatiquement avec sa longueur de contexte et ses capacités réelles. Enrichissez comme d'habitude.
Un clic dans l'interface ferme le WebSocket et invalide immédiatement les identifiants.
Le tunnel a été conçu pour ajouter le moins de surface d'attaque possible. La première version de la fonctionnalité utilisait un serveur SSH public sur un nouveau port ; nous l'avons remplacé par le multiplexeur WebSocket intégré au processus afin d'éliminer entièrement la surface d'attaque SSH.
Tout passe par l'ingress :443 existant — le même point de terminaison TLS que l'application web. Pas de serveur SSH, pas de port Ollama exposé.
Le CLI initie la connexion WebSocket. Votre ordinateur portable n'accepte jamais de connexions entrantes — le pare-feu de votre réseau domestique n'a pas besoin d'être modifié.
Un tunnel est lié à une seule organisation. Les autres locataires de la plateforme ne peuvent ni le voir, ni le sélectionner, ni l'invoquer. Les administrateurs système disposent, par conception, d'une visibilité inter-organisations.
La révocation supprime les identifiants de la base de données. La requête suivante échoue avec une erreur 401. Le WebSocket actif est déconnecté en ~1 seconde.
Le flux OAuth via navigateur gère les identifiants de bout en bout. Le navigateur ne voit jamais votre jeton de rafraîchissement ; le CLI le reçoit directement par son canal d'interrogation.
5 tunnels actifs par organisation par défaut ; limite de 16 Mo par trame WebSocket entrante ; erreurs 402 structurées en cas de dépassement de quota.
Protection SSRF. La fonctionnalité de tunnel comble aussi une faille préexistante : le champ specific_endpoint des fournisseurs Ollama est désormais validé par une regex de liste d'autorisation, de sorte que les IP privées, les adresses de bouclage et les noms de services Docker compose ne peuvent jamais servir d'URL de fournisseur.
| Commande | Ce que cela fait |
|---|---|
| ee-tunnel pair --server URL | Appairage OAuth via navigateur. Ouvre automatiquement l'URL de vérification. |
| ee-tunnel pair --server URL <token> | Appairage manuel avec un jeton de rafraîchissement copié depuis l'interface (solution de repli pour les environnements sans interface graphique). |
| ee-tunnel | Connexion et mise à disposition. Reconnexion avec backoff exponentiel (1 s → 30 s) en cas de coupures transitoires. |
| ee-tunnel status | Afficher l'état d'appairage, l'URL du serveur, l'URL Ollama configurée et le libellé. |
| ee-tunnel disconnect | Oublier les identifiants locaux. Ne révoque pas côté serveur ; utilisez l'interface pour cela. |
| ee-tunnel version | Version imprimable. |
Si votre Ollama écoute sur un autre port, définissez EE_TUNNEL_OLLAMA_URL ou passez --ollama URL au moment de l'appairage.
macOS · ~/Library/Application Support/ee-tunnel/
Linux · ~/.config/ee-tunnel/
Windows · %APPDATA%\ee-tunnel\
| Tunnels actifs par organisation | 5 (par défaut) |
| TTL du jeton de rafraîchissement | 365 jours |
| TTL du jeton d'accès | 15 minutes |
| TTL d'appairage | 10 minutes |
| Taille max des trames WebSocket entrantes | 16 Mo |
| Taille des blocs sortants (CLI) | 16 Ko |
| Intervalle de heartbeat | 30 secondes |
Non. La CLI initie une connexion WebSocket sortante. Votre ordinateur portable n'accepte jamais de connexions entrantes, et votre port Ollama reste lié à localhost.
Le CLI se ferme proprement en cas de déconnexion. Au réveil de l'ordinateur portable, relancer ee-tunnel rétablit la connexion avec les identifiants existants. Les enrichissements en cours pendant l'indisponibilité du tunnel échouent avec une erreur ConnectError propre.
Non. Chaque tunnel est lié à une seule organisation. Les autres locataires de la plateforme ne peuvent ni le voir, ni le sélectionner, ni l'invoquer. Par conception, les administrateurs système peuvent voir tous les tunnels (comme pour les clés API globales).
Presque toujours — seul le port :443 sortant est nécessaire. Le même chemin que celui utilisé par l'application web.
Cliquez sur « Renouveler le jeton » dans l'onglet Tunnels. L'ancien jeton est invalidé immédiatement ; la fenêtre modale affiche une nouvelle commande d'appairage pour votre ordinateur portable.
Oui — la CLI transfère du HTTP arbitraire. Définissez EE_TUNNEL_OLLAMA_URL sur n'importe quel endpoint local compatible OpenAI. Tout ce qui parle le /v1/chat/completions ou /api/tags d'Ollama fonctionnera.
Le CLI et l'installateur sont sous licence MIT et hébergés dans un dépôt public, afin que chacun puisse auditer ce qui s'exécute sur sa machine.
Source : github.com/TOT-Concept/ee-tunnel
Versions : github.com/TOT-Concept/ee-tunnel/releases — chaque binaire est signé avec cosign avant publication.
Auditez le script d'installation : curl -fsSL https://entityenricher.ai/install.sh | less