WhytCard.ai
WhytCard Swiss AI

WSAI — l'IA qui branche vos outils métier.

Un hub, une coquille, un agent local en coulisse. Il comprend vos documents via un RAG GGUF/llama.cpp, se connecte à vos logiciels existants, et ne génère pas du code au hasard : il assemble des briques testées. C'est le projet principal — whytcard.ch pour les outils PME, whytweb.ch pour le web.

Jérôme Ethenoz · Suisse romande

Sous le capot

GGUF · llama-server · RAG local

WSAI Entreprise repose sur une stack locale vérifiable : llama.cpp en loopback, ingest RAG en SQLite, orchestrateur Node. Pas de promesse magique — du code que je fais tourner chez moi avant de le livrer.

llama-server (chat)

Port 8080, loopback uniquement. Modèle léger type Qwen2.5-0.5B-Instruct en Q4_K_M pour le chat RAG et le dashboard — pas pour du raisonnement lourd.

llama-server (embeddings)

Second serveur optionnel sur :8081 avec --embedding --pooling mean. Modèle nomic-embed-text-v1.5 en GGUF pour la recherche vectorielle (sqlite-vec, en cours).

Orchestrateur WSAI

Node sur :9477 : /ingest, /retrieve (FTS5 aujourd'hui), /chat. Si llama-server est up → réponse LLM ; sinon → echo des chunks indexés. Zéro dépendance npm externe.

wsai-orchestraition

CLI + SQLite ~/.wsai/wsai.db : sync projet, RAG, runs, mandate. Provider llamacpp pointé sur http://127.0.0.1:8080/v1. La DB est la vérité, pas mes suppositions.

Flux d'exécution

  1. 1Document ou code source
  2. 2Ingest → chunks SQLite + FTS5
  3. 3Retrieve (lexical, puis vecteur)
  4. 4llama-server /v1/chat/completions
  5. 5Réponse sourcée à la coquille
Données sensibles : 127.0.0.1 loopback

Frontière honnête

Local pour le sensible. Cloud documenté pour le reste.

Je ne vends pas du « 100 % local » : c'est faux et fragile. Je tranche par type de donnée.

Reste en loopback
  • Code source et IP
  • RAG sur dossiers clients critiques
  • Embeddings privés (GGUF local)
  • Corpus wsai en SQLite desktop
Peut passer au cloud
  • Triage email commercial (volume)
  • Assistants dev (Claude, Groq) hors données client
  • Hub métier non sensible (Render UE)

Bridge desktop : HTTPS sortant uniquement, zéro port entrant. Le LLM local ne quitte jamais 127.0.0.1.

Les couches

Chaque brique a un rôle dans la chaîne locale.

WhytCore (Rust) a prouvé le trio llama.cpp + sqlite-vec + FTS5. WSAI-deskRAG reprend ce pattern ; l'orchestrateur Node porte déjà l'ingest et le chat.

Inférence chat

llama-server

GGUF en Q4, API /v1/chat

Binaire llama.cpp lancé avec --host 127.0.0.1 --port 8080. Modèles catalogués dans brain/models.json (Qwen2.5-0.5B, Phi-3 mini en alternative).
Génération

Vecteurs locaux

Embeddings

nomic-embed en GGUF

POST /v1/embeddings sur un second llama-server (:8081). Normalisation L2, dimensions alignées sqlite-vec float[768]. Actif quand le RAG vectoriel est branché.
Indexation

Node loopback

Orchestrateur

:9477 · ingest · chat

WSAI-Orchestrator : SQLite, supervisor, dashboard, tools runner. Health expose llmUp. Cortex peut s'y brancher (CORTEX_BACKEND=link).
Coordination

Mémoire projet

Ingest RAG

Chunks + FTS5

ingest.mjs découpe les docs, remplit documents/chunks, recherche lexicale immédiate. Les artifacts .wsai/ des outils sont ré-ingérés automatiquement.
Contexte

Runtime Rust

desk-rag

sqlite-vec + FTS5

Crate wsai-rag-server sur :9478 (stub MVP). Cible : vec0 float[768], client embed.rs vers llama.cpp. Node + Rust liés en HTTP loopback.
Vectoriel

Produit client

WSAI

Agent local B2B

Une base, deux fronts. Le B2B ajoute l'agent téléchargeable (brique B13) + RAG GGUF on-premise (brique B7). L'app livrée au client ne contient pas d'agent dev.
LivraisonVisiter

Ce que je manipule

Du fichier GGUF à la réponse sourcée.

Compétences terrain, pas un catalogue SaaS.

GGUF

Modèles GGUF

Téléchargement Hugging Face, quantisation Q4_K_M, choix chat vs embed selon la VRAM disponible.

llama.cpp

llama.cpp / llama-server

Installation binaire, cont-batching, ctx-size, double serveur chat + embeddings, health llmUp.

RAG

RAG local

Ingest, chunking, FTS5 aujourd'hui, sqlite-vec demain. Chaque réponse cite son passage ou s'arrête.

agents

Orchestration d'agents

wsai-orchestraition, Cortex, HumanIntelligence : mémoire, mandate, runs — sans recoder la stack à chaque projet.

GPU

Matériel & VRAM

14B ≈ 9–10 Go, 32B ≈ 20 Go. Sous CPU un 7B est lent : je ne fais pas semblant. GPU local pour le sensible.

réseau

Réseau & confidentialité

Loopback 127.0.0.1, polling sortant, allowlist sur ce qui remonte au cloud. Pas de port entrant.

Données sensibles : loopback uniquement. Le reste est cloisonné et documenté — pas de promesse « zéro octet ».

Preuves

Outils construits autour de cette stack.

Produits maison et briques atelier — pas une liste de clients tiers.

Atelier

WSAI-Orchestrator

Atelier · RAG + llama-server

Stack complète documentée : install llama.ps1, models.json, /chat avec dégradation FTS, supervisor, tests node --test.

Atelier

wsai-orchestraition

Atelier · CLI + mémoire

sync, rag query, runs, mandate dans ~/.wsai/wsai.db. Provider llamacpp vers le serveur local.

API locale

Nexus GGUF Gateway
Plusieurs modèles GGUF derrière une API standard, sans cloud. Rust · Axum · llama.cpp.

Orchestrateur Rust

WhytCore
Socle prouvé : llama.cpp/GGUF, RAG, sqlite-vec, profils d'environnement. Mine pour desk-rag.

Comptabilité PME

Le Classeur
Tri et classement de pièces comptables en local. Factures QR, tickets, relevés.

Hub métier

WSAI Fondation
Next.js 16, shell chat /api/bricks, 16 briques dont B7 IA locale. Pas encore en prod publique.

Comment je travaille

Cartographier, indexer, brancher.

01

Je cartographie vos données sensibles et le matériel (VRAM, CPU). Je choisis le GGUF qui tient réellement.

02

Je monte llama-server + ingest RAG. Vous testez sur vos docs : chaque réponse est sourcée ou le système s'arrête.

03

Je branche vos outils métier via l'agent local. La coquille affiche ; le moteur reste chez vous.

Montrez-moi votre cas.

Un échange direct sur vos docs, votre VRAM, et ce qui doit rester local.

Écrire à Jérôme