Instructions to use jvr0x/Javi0.3-2B-GGUF 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 jvr0x/Javi0.3-2B-GGUF 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 jvr0x/Javi0.3-2B-GGUF:Q4_K_M # Run inference directly in the terminal: llama cli -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M # Run inference directly in the terminal: llama cli -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
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 jvr0x/Javi0.3-2B-GGUF:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
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 jvr0x/Javi0.3-2B-GGUF:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
Use Docker
docker model run hf.co/jvr0x/Javi0.3-2B-GGUF:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use jvr0x/Javi0.3-2B-GGUF with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "jvr0x/Javi0.3-2B-GGUF" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "jvr0x/Javi0.3-2B-GGUF", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/jvr0x/Javi0.3-2B-GGUF:Q4_K_M
- Ollama
How to use jvr0x/Javi0.3-2B-GGUF with Ollama:
ollama run hf.co/jvr0x/Javi0.3-2B-GGUF:Q4_K_M
- Unsloth Desktop
- Pi
How to use jvr0x/Javi0.3-2B-GGUF with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
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": "jvr0x/Javi0.3-2B-GGUF:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use jvr0x/Javi0.3-2B-GGUF with Docker Model Runner:
docker model run hf.co/jvr0x/Javi0.3-2B-GGUF:Q4_K_M
- Lemonade
How to use jvr0x/Javi0.3-2B-GGUF with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull jvr0x/Javi0.3-2B-GGUF:Q4_K_M
Run and chat with the model
lemonade run user.Javi0.3-2B-GGUF-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use jvr0x/Javi0.3-2B-GGUF with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
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 jvr0x/Javi0.3-2B-GGUF:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use jvr0x/Javi0.3-2B-GGUF with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf jvr0x/Javi0.3-2B-GGUF:Q4_K_M
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 "jvr0x/Javi0.3-2B-GGUF:Q4_K_M" \ --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"
Javi0.3-2B-GGUF
The tiny Javi: a 2B agent model trained to think from first principles and use its tools effectively to find the answer to your prompt, or, when the tools can't get there, to guide you to it. It's trained to never guess: if it can't verify something or doesn't know, it says so. When a tool fails, it works out why and takes another route instead of looping. Fine-tuned from Qwen3.5-2B to work inside coding and research agents (grok build, omp, opencode) with their own system prompts and tools. It runs on almost anything: the Q4_K_M file is 1.3 GB.
What it does, all measured in Results:
- Beats its base model clearly. Core pass 0.35 vs 0.23 for base Qwen3.5-2B (+0.12, 95% interval +0.08 to +0.17), and 0.35 vs 0.17 for Javi0.2, a model twice its size.
- Always looks up time-sensitive questions. It answered one from memory in 1% of cases (base: 36%).
- Short, grounded answers. 378 characters on average (base: 724).
- Rarely invents links. 1.7% of answers cite a link no tool returned, counting bare ones without
https://(base: 3.0%). - Doesn't loop. It repeats an identical call in 4% of tasks (base: 17%).
Bigger sibling: Javi0.3-4B-GGUF. Full-precision weights: Javi0.3-2B.
How it was built, every mistake included: the Javi0.3 article on X.
Files
| File | Quant | Size | Notes |
|---|---|---|---|
Javi0.3-2B.Q8_0.gguf |
Q8_0 | 2.1 GB | Close to lossless; the eval below used this one |
Javi0.3-2B.Q4_K_M.gguf |
Q4_K_M | 1.3 GB | Smaller and faster |
Both were quantized from an F16 GGUF of the merged model; the LoRA was merged into the bf16 base, not into a 4-bit copy. Text only: the base model's vision tower is not in the GGUF.
Run it
llama.cpp
llama-server -hf jvr0x/Javi0.3-2B-GGUF:Q8_0 --jinja -c 131072 -fa on -ctk q8_0 -ctv q8_0 \
--chat-template-kwargs '{"enable_thinking": false}' \
--temp 0.2 --top-p 0.8 --top-k 20 --min-p 0
Then point any OpenAI-compatible agent at http://localhost:8080/v1. Javi is built for agents with tools (web search, page fetch, a shell). In a plain chat with no tools it answers from what it knows and tells you when a question needs a lookup.
- Thinking off. It was trained and evaluated with
enable_thinking: false. - Low temperature (0.2) keeps tool calls well formed.
Mount it with lmswitch
hf download jvr0x/Javi0.3-2B-GGUF Javi0.3-2B.Q8_0.gguf --local-dir ~/models/jvr0x/Javi0.3-2B-GGUF
Save this as ai-models/javi0.3-2b.yaml (the model path is relative to your lmswitch models directory, ~/models by default):
runtime: llama
model: "jvr0x/Javi0.3-2B-GGUF/Javi0.3-2B.Q8_0.gguf"
port: 8156
ctx: 262144
display_name: "Javi0.3-2B Q8_0"
extra_args: ["-fa", "on", "-ctk", "q8_0", "-ctv", "q8_0", "--jinja", "--chat-template-kwargs", "{\"enable_thinking\": false}", "--temp", "0.2", "--top-p", "0.8", "--top-k", "20", "--min-p", "0"]
lmswitch on javi0.3-2b
This is the exact setup the eval below ran.
Results
Eval v3: 175 held-out questions, each run 3 times inside real client formats (grok, omp, opencode, a bare OpenAI format and a plain chat) with tools: web search (frozen cache and pinned date, so runs compare), page fetches, and a sandboxed shell over small code projects. Some questions force tool failures. Two judges grade every answer, DeepSeek-V4.1-Flash and MiMo-V2.6-Flash. Core pass means grounded (2/2), honest (2/2), the task at least partly solved, and no https:// link that no tool returned (checked from the transcript, not by the judge).
| Core pass | Base Qwen3.5-2B | Javi0.2-4B | Javi0.3-2B |
|---|---|---|---|
| Both judges | 0.23 | 0.17 | 0.35 |
| DeepSeek-V4.1-Flash | 0.26 | 0.21 | 0.48 |
| MiMo-V2.6-Flash | 0.20 | 0.13 | 0.23 |
Against the base model, Javi0.3-2B is ahead by 0.12, with a 95% interval of +0.08 to +0.17.
Behavior, counted from all 525 transcripts:
| Base Qwen3.5-2B | Javi0.3-2B | |
|---|---|---|
| Finished | 85% | 98% |
| Answered a time-sensitive question without a tool | 36% | 1% |
Cited a link no tool returned, with or without https:// |
3.0% | 1.7% |
| Repeated an identical call | 17% | 4% |
| Said what failed before the next call | 27% | 76% |
| Recovered after a forced failure | 96% | 55% |
| Tool calls per task | 3.6 | 1.8 |
| Average answer | 724 chars | 378 chars |
Held-out failures: 24 more questions whose failures are types it never trained on (429 rate limits, timeouts), 3 runs each.
| Base Qwen3.5-2B | Javi0.3-2B | |
|---|---|---|
| Core pass | 0.06 | 0.33 |
| Recovered | 75% | 56% |
| Repeated an identical call | 42% | 4% |
By category (core pass, Javi0.3-2B vs base): ahead on lookups (0.37 vs 0.11), unknowable questions (0.55 vs 0.28), recovery questions (0.35 vs 0.05), every route broken (0.33 vs 0.10) and false premises (0.29 vs 0.09); slightly behind on chat (0.33 vs 0.41), code (0.20 vs 0.31) and reasoning puzzles (0.70 vs 0.74).
Hardware
| Quant | Weights | + 32k ctx | + 128k ctx | + 262k ctx | Decode on DGX Spark |
|---|---|---|---|---|---|
| Q4_K_M | 1.2 GiB | ~1.6 GiB | ~2.7 GiB | ~4.2 GiB | 126.8 tok/s |
| Q8_0 | 1.9 GiB | ~2.3 GiB | ~3.4 GiB | ~4.9 GiB | 94.8 tok/s |
- Memory = weights plus an F16 KV cache. Only 6 of the 24 layers use full attention (the rest are linear attention with a fixed-size state), so the cache is 12 KiB per token;
-ctk q8_0 -ctv q8_0halves it. - Context: the base model supports 262k tokens. Javi0.3 trained on conversations up to 72k tokens.
- Speed is
llama-benchdecode (256 tokens, 3 runs) on an NVIDIA DGX Spark (GB10, 128 GB unified memory), full GPU offload, flash attention on. Prefill runs at about 8,900 tok/s (Q8_0) to 9,100 tok/s (Q4_K_M).
How it was made
Teacher inside the harness. GLM-5.3-Flash answered seed questions inside each client's exact format (system prompts of 15-25k tokens, 10-27 tools) with real tools: web search through a local SearXNG, page fetches, and a Docker sandbox. Its working rules were in the teacher's prompt only: reason from first principles, look up anything time-sensitive, diagnose a failed call before the next one, and when everything fails still give a labeled best answer and name where to check. Training rows keep the client's own prompt, so the student learns the behavior, not the instructions.
Data. Javi0.2's rows with made-up links removed, plus two rounds of recovery practice on 480 questions, each round giving every question a different failure and client: the first search or page fetch fails once (blocked, empty, 403, 404) or, in the second round, keeps failing for a third of them (offline, a route blocked for good).
Filters. DeepSeek-V4.1-Flash judged every episode. Code checks dropped anything unfinished, any time-sensitive answer without a tool, repeated calls, links no tool returned (with or without https://), and any call after a failure that didn't say what failed. A recovery stayed only if a different route worked, or if two routes failed and the answer stopped honestly.
Concise rewrite. The teacher rewrote every answer over 500 characters answer-first, keeping only facts a tool returned, with sources named instead of linked (median answer 646 → 357 characters). A rewrite was kept only if it was shorter, had no URL, changed no code block and added no number. This one change took the 2B from 0.24 to 0.35.
Training: LoRA SFT with Unsloth on 1,307 rows.
| Setting | Value |
|---|---|
| Method | LoRA on the bf16 base |
| Rank / alpha / dropout | 16 / 16 / 0 |
| Target modules | q, k, v, o, gate, up, down |
| Epochs / steps | 1 / 327 |
| Effective batch | 4 (1 × 4 grad accum) |
| Learning rate | 1e-4, linear decay, 3 warmup steps |
| Max sequence length | 73,728 tokens |
| Loss on | the first reply to each user message, every final answer, and the turn right after each failed tool call |
| Hardware / time | 1× DGX Spark (GB10), 1h40m |
Export: the adapter was merged into the bf16 base, converted to an F16 GGUF, then quantized with llama-quantize.
The story of every round, including each way it broke along the way, is in the Javi0.3 article on X.
Limitations
- Recovery after a failure is 55% (base: 96%). It doesn't give up, but its second route often fails too.
- It's a 2B model. It misreads tool results more often than the 4B, and it is weaker on code and reasoning puzzles than its base.
- The later 4B recipe (search-first routes, a de-hedge pass) did not help at 2B, so this is the earlier, concise-only recipe.
- It's built for agent clients with tools. Without tools it can't look anything up.
- The judges are LLMs, not people, and they disagree on some answers (Cohen's kappa 0.56).
- Trained mostly on English.
License
Apache 2.0, inherited from Qwen3.5-2B.
- Downloads last month
- 166
4-bit
8-bit
