Instructions to use OculusMindAI/OculusMind-ToolCall-8B-v1 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 OculusMindAI/OculusMind-ToolCall-8B-v1 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 OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M # Run inference directly in the terminal: llama cli -hf OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M # Run inference directly in the terminal: llama cli -hf OculusMindAI/OculusMind-ToolCall-8B-v1: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 OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf OculusMindAI/OculusMind-ToolCall-8B-v1: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 OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
Use Docker
docker model run hf.co/OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "OculusMindAI/OculusMind-ToolCall-8B-v1" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "OculusMindAI/OculusMind-ToolCall-8B-v1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
- Ollama
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with Ollama:
ollama run hf.co/OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
- Unsloth Studio
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for OculusMindAI/OculusMind-ToolCall-8B-v1 to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for OculusMindAI/OculusMind-ToolCall-8B-v1 to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for OculusMindAI/OculusMind-ToolCall-8B-v1 to start chatting
- Pi
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with Docker Model Runner:
docker model run hf.co/OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
- Lemonade
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
Run and chat with the model
lemonade run user.OculusMind-ToolCall-8B-v1-Q4_K_M
List all available models
lemonade list
- Hermes Agent
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf OculusMindAI/OculusMind-ToolCall-8B-v1: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 OculusMindAI/OculusMind-ToolCall-8B-v1:Q4_K_M
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use OculusMindAI/OculusMind-ToolCall-8B-v1 with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf OculusMindAI/OculusMind-ToolCall-8B-v1: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 "OculusMindAI/OculusMind-ToolCall-8B-v1: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"
Decontamination
Contamination suspicion is the most common and most reasonable way to dismiss a
fine-tune's benchmark gains β and the gains in bfcl-results.md are large
enough (simple_java +42.00, simple_javascript +34.00) that the question
deserves a real answer rather than a reassurance. This document gives the
method, the thresholds, the per-source results, and the file hashes needed to
check that the source we screened is the source we trained on.
The numbers here are real and final β they are not placeholders. They describe
the corpus this model was trained from (dataset l2-1936f4db1167).
1. The rule
The BFCL corpus is never trained on. It is registered in our source list as
NEVER TRAIN and is used only as (a) the evaluation instrument and (b) the
forbidden corpus that everything else is screened against.
Every external source is screened before any of its rows enter a dataset, and the build fails closed if a source lacks a current PASS report. A report is bound to a SHA-256 of the source file; changing the source file invalidates the report by construction.
2. Method
Forbidden corpus. Built from the pinned BFCL data directory at harness
commit f7cf7359b7ac615a0b294831c5ba2bc95ee4a000, plus our own private suite
items:
| Component | Count |
|---|---|
| BFCL data files | 71 |
| BFCL benchmark items | 10,109 |
| 8-grams extracted | 194,092 |
| Function signatures extracted | 2,467 |
| Private suite items | included (v2, 139 items) |
Screen 1 β task-content 8-gram overlap. N-grams are taken from task content (the user's ask and the reference behaviour), not from whole rows. This matters: an earlier whole-row screen flagged 100% of one source on a single shared prompt idiom. Boilerplate is not contamination. Contamination is task content matching task content.
Screen 2 β function-signature matching. Rows whose tool signatures match a benchmark signature are dropped regardless of prose overlap.
Direction of the source-level gate. The gate is benchmark-side, following the Tulu-3 orientation: the question is how much of the benchmark does this source cover, not how many of this source's rows look a bit like the benchmark. A large corpus will always contain some incidental overlap; what disqualifies it is covering a material fraction of the benchmark.
Thresholds.
| Rule | Value |
|---|---|
| N-gram size | 8 |
| Row-level coverage drop | a row is dropped if β₯50% of its task-content n-grams appear in the forbidden corpus |
| Source-level fail rate | a source FAILS if it covers >2% of benchmark items |
No threshold re-tuning. If a source fails, we do not move the threshold. If the failure is attributable to an identifiable subset, that subset is excluded at the converter (with provenance recorded) and the source is re-screened full-corpus; it must then genuinely pass. A gate that gets re-tuned whenever a source fails is not a gate.
3. Per-source results
Sources that contributed rows to this model:
| Source | HF repo | Rows scanned | BFCL items covered | Coverage rate | Gate (β€2%) |
|---|---|---|---|---|---|
| ToolACE | Team-ACE/ToolACE |
13,301 | 137 / 10,109 | 1.36% | PASS |
| hermes-fc | NousResearch/hermes-function-calling-v1 |
26,274 | 95 / 10,109 | 0.94% | PASS |
| hermes-reasoning | interstellarninja/hermes_reasoning_tool_use |
113,259 | 142 / 10,109 | 1.41% | PASS |
| smol-smoltalk | HuggingFaceTB/smol-smoltalk |
54,608 | 126 / 10,109 | 1.25% | PASS |
Sources screened that contributed zero rows to this model:
| Source | HF repo | Rows scanned | Gate | Why zero rows |
|---|---|---|---|---|
| xlam-irrelevance | MadeAgents/xlam-irrelevance-7.5k |
7,500 | PASS | all 7,500 rows routed to a needsSynthesis bucket by the converter and none survived selection; now policy-excluded from commercial mixes (CC-BY-4.0) |
| nemotron-chat | nvidia/Nemotron-Post-Training-Dataset-v1 (chat) |
0 | PASS | source unusable β every user prompt in the v1 chat split is scrubbed empty upstream |
Note on hermes-reasoning: this source is explicitly BFCL-aligned by construction, which is why its screening was mandatory-strict. It covers only 1.41% of benchmark items after screening.
Inline re-screen at build time. The per-source reports are a precondition, not the removal mechanism. Row exclusion is re-applied inline during dataset construction against the same forbidden corpus, so the shipped dataset is screened as-built, not as-reported. For this dataset the inline screen dropped a further 643 rows β 642 on signature matching and 1 on n-gram coverage.
4. Hashes β check that the screened source is the trained source
Each decontamination report is bound to the SHA-256 of the exact source file it screened. The dataset manifest records the same hash for the file it read.
| Source | Source file SHA-256 | Report SHA-256 |
|---|---|---|
| ToolACE | ba12c083fca7e8da48c67ad5b895e495447da7c66e39a2e19742c082e6cb537e |
4989ea87317b467c6ba1f35c47179a63d3360865af39b983eaec4fd62e25537f |
| hermes-fc | 4e7acc9884fbd1f76f8b38016bd9c6ee1e027631bb26fb087643094cf6790524 |
c78d5c3d0c935bbba10084a951b1736965bb8788a1d63e025acca70955dc6038 |
| hermes-reasoning | b3730a6ebcd0cf8c9ca679093db2811ce8a66406fa3244d55a7c40fe539915b1 |
893a1145564d2c417ded4257ee61a3e6e9705f582b9b8cadc7522b520f2f210e |
| smol-smoltalk | 65dabd3d4a300995c12b90af9de0b9de9180416b962cb8e81190e10d75262493 |
2eb2e9cb64c8ce91f59e463209d00b1f2eeb6295e20ed40cb4c103afd30b39f9 |
| xlam-irrelevance (0 rows) | 2e6f3d0adbd40248a592ea001e3f3a4f1624a5d50f434fa1e7d019e93e922327 |
β |
| nemotron-chat (unused) | 02a1001b50d4461a29f9c2be11c7dbfbed96c9b442995d12b44a962f9787629f |
β |
Training-set artefact hashes (dataset l2-1936f4db1167, built 2026-07-30,
build seed 42):
| Artefact | SHA-256 | Rows |
|---|---|---|
train.jsonl |
d2dbce906ff05ae54a75da2713dcf1d02243c629076d22b745f84050754355b5 |
14,460 |
valid.jsonl |
f98956e1057c2222779a93598737de36f6bad04b4c7fa118c7eb978897b081a9 |
5 |
The dataset itself is not published (it contains 53 OculusMind internal capture rows). The hashes are published so that if we ever release it, or disclose it under NDA to a partner's engineer, it can be shown to be the same bytes. Note that the Apache-2.0 licence on the weights does not extend to this dataset.
5. Private-suite leakage control
Separately from BFCL, training rows derived from our own captures may only come from train-split cases. The build asserts this and fails closed. For the dataset behind this model:
| Check | Result |
|---|---|
| Holdout cases in the suite | 25 |
| Holdout violations in the training set | 0 |
| Item-id scan across 139 suite items | clean |
This matters more than usual here, because the private-suite result being
reported is a regression. A leak would have inflated the internal score, not
depressed it β so leakage is not an available explanation for the finding in
internal-results.md, and the clean scan says the score is not inflated either.
6. What this screening does and does not prove
Does: show that no source used here covers more than 1.5% of the pinned BFCL benchmark by task content, that BFCL data was never used for training, that signature-level matches were removed (642 rows at build time alone), that the screened bytes are the trained bytes, and that our private benchmark's holdout split was not trained on.
Does not: prove the base model is uncontaminated. Ministral-3-8B's pretraining corpus is not published, and any public benchmark may have leaked into any public base model. This is a limitation shared by every fine-tune of a public base and it is why the claim here is a delta measured against that same base on the same harness β whatever contamination the base carries, both sides of our comparison carry it equally, so it cancels out of the delta. It does not cancel out of the absolute numbers, and we do not claim it does.
Also does not: rule out semantic paraphrase contamination that survives an 8-gram screen. Signature matching catches the tool-shaped version of this; prose paraphrase of a benchmark task with entirely different wording would pass. We have no method that closes that gap completely, and neither does anyone else publishing at this scale.
A note on the direction of the risk here. Undetected contamination would inflate the Β§1 gains. It would not produce the irrelevance regression, which is a loss of a behaviour the base already had. So a sceptic who suspects contamination should discount the gains and keep the regression β which is the conservative reading, and the one this card is written to survive.