Text Generation
GGUF
French
English
llama.cpp
code
php
sql
javascript
html
css
wordpress
lora
cpu
local
offline
french
conversational
Instructions to use kanaton/webcoder-t28n with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use kanaton/webcoder-t28n with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf kanaton/webcoder-t28n:Q8_0 # Run inference directly in the terminal: llama cli -hf kanaton/webcoder-t28n:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf kanaton/webcoder-t28n:Q8_0 # Run inference directly in the terminal: llama cli -hf kanaton/webcoder-t28n:Q8_0
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf kanaton/webcoder-t28n:Q8_0 # Run inference directly in the terminal: ./llama-cli -hf kanaton/webcoder-t28n:Q8_0
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf kanaton/webcoder-t28n:Q8_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf kanaton/webcoder-t28n:Q8_0
Use Docker
docker model run hf.co/kanaton/webcoder-t28n:Q8_0
- LM Studio
- Jan
- vLLM
How to use kanaton/webcoder-t28n with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "kanaton/webcoder-t28n" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "kanaton/webcoder-t28n", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/kanaton/webcoder-t28n:Q8_0
- Ollama
How to use kanaton/webcoder-t28n with Ollama:
ollama run hf.co/kanaton/webcoder-t28n:Q8_0
- Unsloth Desktop
- Pi
How to use kanaton/webcoder-t28n with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf kanaton/webcoder-t28n:Q8_0
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "kanaton/webcoder-t28n:Q8_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use kanaton/webcoder-t28n with Docker Model Runner:
docker model run hf.co/kanaton/webcoder-t28n:Q8_0
- Lemonade
How to use kanaton/webcoder-t28n with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull kanaton/webcoder-t28n:Q8_0
Run and chat with the model
lemonade run user.webcoder-t28n-Q8_0
List all available models
lemonade list
- Hermes Agent
How to use kanaton/webcoder-t28n with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf kanaton/webcoder-t28n:Q8_0
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default kanaton/webcoder-t28n:Q8_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use kanaton/webcoder-t28n with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf kanaton/webcoder-t28n:Q8_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "kanaton/webcoder-t28n:Q8_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
|
Download README.md from kanaton/webcoder-t28n: direct link, hf CLI and curl.
- Browser
- Download file 6.55 kB
-
https://huggingface.co/kanaton/webcoder-t28n/resolve/main/README.md
- Command line
-
hf download hf://kanaton/webcoder-t28n/README.md
-
curl -L -o README.md https://huggingface.co/kanaton/webcoder-t28n/resolve/main/README.md
6.55 kB
| license: apache-2.0 | |
| base_model: Qwen/Qwen2.5-Coder-1.5B-Instruct | |
| base_model_relation: finetune | |
| language: | |
| - fr | |
| - en | |
| library_name: llama.cpp | |
| pipeline_tag: text-generation | |
| tags: | |
| - code | |
| - php | |
| - sql | |
| - javascript | |
| - html | |
| - css | |
| - wordpress | |
| - lora | |
| - gguf | |
| - cpu | |
| - local | |
| - offline | |
| - french | |
| model_type: qwen2 | |
| # WebCoder — assistant de code web local (CPU, hors-ligne) | |
| Petit assistant de développement web conçu pour tourner **localement, sur CPU, sans GPU et sans | |
| réseau**. Livrable du projet « WebCoder local » : `Qwen2.5-Coder-1.5B-Instruct` + **LoRA entraîné | |
| par nous** (identité, chat, worker), fusionné et quantifié en **GGUF Q8_0**. | |
| ## Identité | |
| | Champ | Valeur | | |
| |---|---| | |
| | Modèle décrit | **`webcoder-t28n`** = base + LoRA (continuation T28g → T28g+ → T28n) | | |
| | Base | [`Qwen/Qwen2.5-Coder-1.5B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-Coder-1.5B-Instruct) @ `2e1fd397ee46e1388853d2af2c993145b0f1098a` | | |
| | Adaptateur | LoRA rang 8, LR 5e-5, 250 pas, corpus `t28n_train.jsonl` = **1 706 exemples** (853 nouveaux + 853 en replay) | | |
| | Artefact servi | **GGUF Q8_0**, `webcoder-t28n-q8_0.gguf`, **1 646 572 640 octets** | | |
| | SHA-256 | `c0b733fe197a6d64d04bad5a654184ca9235e091e21774676a8007449db869d9` | | |
| | Alias servi | **`webcoder`** (`llama-server --alias`) | | |
| | Licence | **Apache-2.0** (celle de la base ; l'adaptateur est notre travail) | | |
| | Identité déclarée | se présente comme **« WebCoder »**, créé par **Pierre Jean Duvivier** | | |
| **Provenance et attribution.** La base réelle est **Qwen2.5-Coder** (Alibaba Cloud, Apache-2.0). | |
| « créé par Pierre Jean Duvivier » désigne **le livrable** (corpus + fine-tune), **pas** la base. | |
| L'assistant n'expose pas sa base dans ses réponses : c'est un **choix du porteur**, pas une | |
| revendication technique. L'attribution technique complète est dans cette fiche. | |
| ## Usage prévu | |
| Assistant de modification de code Web **hors-ligne** pour **PHP, HTML, CSS, SQL, JavaScript** | |
| (y compris plugins/thèmes WordPress). | |
| - **Cible matérielle** : CPU seul, machine à ~8 Go de RAM. Aucune API externe, aucune donnée | |
| transmise. | |
| - **Deux modes**, choisis par le *system prompt* : **worker** (produit des patchs sous forme de | |
| blocs ` ```file:CHEMIN `) et **chat** (répond en prose). | |
| - **Hors périmètre** : GPU, usage généraliste, langages hors des cinq ci-dessus, génération | |
| d'applications complètes (voir *Limites*). | |
| ## Démarrage | |
| ```sh | |
| # llama.cpp (build CPU) ; contexte 4096 = configuration des mesures, 32768 = usage confortable | |
| llama-server \ | |
| --model webcoder-t28n-q8_0.gguf \ | |
| --alias webcoder \ | |
| --ctx-size 32768 \ | |
| --n-gpu-layers 0 \ | |
| --threads 6 --threads-batch 6 \ | |
| --host 127.0.0.1 --port 8081 | |
| # puis, en API compatible OpenAI : | |
| curl -s http://127.0.0.1:8081/v1/chat/completions \ | |
| -H 'Content-Type: application/json' \ | |
| -d '{"model":"webcoder","messages":[{"role":"user","content":"Qui es-tu ?"}]}' | |
| ``` | |
| Le serveur tourne en **loopback** : rien n'est exposé au réseau. | |
| ## Entraînement | |
| Chaîne de **continuation**, chaque palier repartant du précédent plutôt que de la base publique | |
| (ce qui évite l'oubli observé sur les tentatives repartant de la base) : | |
| | Palier | Point de départ | Données | Résultat | | |
| |---|---|---|---| | |
| | T28g | base publique | 267 ex. (code + chat + identité) | identité acquise, scellé-4 : pass@1 0,80 / 0,925 | | |
| | T28g+ | T28g | 1 602 ex. (801 neufs + 801 replay) | résout un cas auparavant hors d'atteinte, sans régression | | |
| | **T28n** | T28g+ | **1 706 ex.** (853 + 853 replay) | **réserve neuve 2/5 → 3/5**, sans régression | | |
| LoRA rang 8 (q/v), 250 pas, sélection sur validation, puis `merge_lora` → GGUF f16 → `llama-quantize`. | |
| Mesures faites **sur CPU**, avec des jeux de réserve **inédits** (`php-y01..y05`) jamais utilisés à | |
| l'entraînement. | |
| ## Évaluation | |
| **Réserve neuve `y` (`php-y01..y05`)** — cas jamais vus à l'entraînement : | |
| | Mesure | T28g+ | **T28n** | | |
| |---|---|---| | |
| | réserve neuve `y` | 2/5 | **3/5** (cas multi-fichiers résolu) | | |
| | réserve dure `x` | 4/5 | 4/5 | | |
| | cas `a04`/`a05` | 1/2 | 1/2 | | |
| | cas `h` | 7/8 | 7/8 | | |
| | identité | pass | **pass** | | |
| | chat | 4/4 | **4/4** | | |
| **Débit** : ~6 tok/s en génération sur un CPU de portatif (modèle 1,5 B en Q8_0, CPU seul). | |
| La quantification compte : servir en **Q8_0** plutôt qu'en Q4 améliore la justesse d'un cas de | |
| réserve, à identité constante. | |
| ## Limites — à lire avant usage | |
| Ce modèle est **petit** (1,5 B) et volontairement honnête sur ce qu'il ne fait pas : | |
| - **Il n'écrit pas d'applications complètes.** Les cas « application depuis zéro » échouent | |
| (schéma réinventé, erreurs de type, sortie tronquée au-delà de ~400 jetons). | |
| - **Il n'exploite pas les corrections.** Le signaler ne le fait pas se corriger : il répète | |
| souvent la même erreur. Le goulot est la capacité du modèle, pas le prompt. | |
| - **Il ne prédit pas ce qu'il sait faire.** Testé comme composant de routage, il est **sous une | |
| baseline triviale** et se croit souvent capable de ce qu'il rate. | |
| - **Il n'est pas à utiliser pour l'audit de sécurité.** Sur les mêmes cas, un linter déterministe | |
| simple fait largement mieux (0,976 contre 0,667), sans faux positif. | |
| - **Identité conditionnée au prompt.** Sans le *system prompt* d'identité, il peut halluciner une | |
| base. Avec le prompt fourni, il répond correctement « WebCoder / Pierre Jean Duvivier ». | |
| - **Pas de tool-calling.** Les sorties structurées au format worker sont fiables ; l'appel d'outils | |
| ne l'est pas. | |
| Ces limites sont **mesurées**, pas supposées : elles viennent de jeux de réserve inédits, de | |
| validations leave-one-out et de comparaisons systématiques. | |
| ## Reproductibilité | |
| Tout est figé : révision de la base, commit de `llama.cpp`, empreintes des corpus, commandes | |
| exactes, seeds et métriques. Les poids servis sont décrits par leur SHA-256 ci-dessus. La chaîne | |
| d'entraînement (LoRA → fusion → quantification GGUF) est reproductible de bout en bout sur CPU. | |
| ## Licence et citation | |
| - **Apache-2.0** (licence de la base, conservée). L'adaptateur et le corpus sont notre travail. | |
| - Base : `Qwen/Qwen2.5-Coder-1.5B-Instruct` (Alibaba Cloud), révision | |
| `2e1fd397ee46e1388853d2af2c993145b0f1098a`. | |
| ```bibtex | |
| @misc{webcoder_t28n, | |
| title = {WebCoder: a local CPU-only web-coding assistant (webcoder-t28n)}, | |
| author = {Duvivier, Pierre Jean}, | |
| year = {2026}, | |
| note = {Qwen2.5-Coder-1.5B-Instruct + LoRA continuations (T28g, T28g+, T28n), GGUF Q8_0} | |
| } | |
| ``` | |