Spaces:
Running
Running
File size: 6,880 Bytes
41c3768 b7ba349 41c3768 4db111a b7ba349 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | ---
title: Hardcore AI
emoji: ⚙️
colorFrom: gray
colorTo: red
sdk: static
pinned: false
---
<p align="center">
<img src="https://huggingface.co/spaces/HardcoreAI/README/resolve/main/banner.jpeg" alt="Hardcore AI" width="480"/>
</p>
<p align="center">
<a href="https://huggingface.co/HardcoreAI">Models</a>
|
<a href="https://huggingface.co/HardcoreAI/Nova-1.1-0.8B">Nova-1.1-0.8B</a>
|
<a href="https://huggingface.co/HardcoreAI/Nova-1-0.8B">Nova-1-0.8B</a>
|
<a href="https://huggingface.co/HardcoreAI/Nova-1.1-0.8B/discussions">Discussions</a>
</p>
<br>
# Hardcore AI
Hardcore AI is a non-profit research group building compact, openly licensed language models intended for deployment rather than demonstration. Our work concentrates on function calling: assistants that invoke tools in whichever protocol is declared at inference time, and that produce no call at all when no tool applies. We target bilingual English/Russian interaction and hardware that a single developer already owns.
Every release is a standalone BF16 checkpoint that loads in stock `transformers`, requires no adapter infrastructure, and is published under Apache-2.0.
## AI & ML Interests
- **Small language models** — the 0.3B–3B range, sized for on-device, on-premise and single-GPU deployment
- **Tool use and function calling** — protocol-agnostic invocation across JSON, XML and plain-text conventions
- **Spurious-call suppression** — training against negative cases, where the correct behavior is to answer from knowledge
- **Agentic tool chains** — multi-step sequences with tool history, such as lookup → compare → answer
- **Curated instruction data** — LoRA and QLoRA fine-tuning on hand-built datasets instead of bulk scraping
- **Quantized inference** — GGUF, llama.cpp and Ollama deployments
- **Bilingual EN/RU NLP** — including morphology for flective languages
- **Reproducible evaluation** — in-house suites with per-case breakdowns published alongside the numbers
## Open Releases
| Model | Parameters | Base | Description |
|---|---|---|---|
| [**Nova-1.1-0.8B**](https://huggingface.co/HardcoreAI/Nova-1.1-0.8B) | 0.8B | [Nova-1-0.8B](https://huggingface.co/HardcoreAI/Nova-1-0.8B) | Current release. Pair-tuned against spurious tool calls on plain-answer prompts, with clean XML termination. |
| [**Nova-1-0.8B**](https://huggingface.co/HardcoreAI/Nova-1-0.8B) | 0.8B | [Qwen3.5-0.8B](https://huggingface.co/Qwen/Qwen3.5-0.8B) | First open release. Function calling and everyday assistance in English and Russian. |
Both checkpoints are ~2 GB in BF16 and run on a single 6 GB consumer GPU or on CPU.
## Highlights
- **Protocol-agnostic tool calling.** One checkpoint handles three verified calling conventions — JSON objects, Qwen-native XML `<tool_call>` blocks, and a plain-text `TOOL name | param=value` form — selected by the system prompt rather than fixed at training time.
- **Measured spurious-call behavior.** Negative cases are a first-class part of the evaluation: Nova-1.1 reduced the spurious-call rate from 60.0% to 13.3% while improving correct calls.
- **Knowledge retained.** General capability is preserved rather than traded away for tool use; math improves relative to the base model.
- **Minimal deployment surface.** No custom runtime, no `transformers` fork, no adapters to merge at load time; quantizes for llama.cpp and Ollama.
- **Apache-2.0.** Commercial use, modification and redistribution are permitted.
## Evaluation
Tool-use suite — 100 cases (EN+RU), identical prompts across checkpoints, greedy decoding:
| Metric | Qwen3.5-0.8B | Nova-1-0.8B | Nova-1.1-0.8B |
|---|---|---|---|
| Overall | 55.0% | 74.0% | **90.0%** |
| Correct call when a tool applies (70) | 58.6% | 88.6% | **91.4%** |
| No call when no tool applies (30) | 46.7% | 40.0% | **86.7%** |
| Spurious-call rate (lower is better) | 53.3% | 60.0% | **13.3%** |
Accuracy by calling protocol, Nova-1.1-0.8B: JSON 89.2%, XML 95.2%, plain-text 85.7%.
Knowledge spot-checks, identical 0-shot greedy protocol on both Nova checkpoints (internal A/B, subsampled public test sets): GSM8K 22.0% → 26.0% (n=100), ARC-Easy 77.3% (n=150). No regression against Nova-1.0.
## Training
- **Data** — in-house instruction sets covering assistant turns and tool use (multi-turn, EN+RU, multiple protocols, multi-step chains), balanced with general-knowledge samples for capability retention.
- **Method** — LoRA/QLoRA (r=16, alpha=16), merged into a standalone BF16 checkpoint; greedy decoding used for all reported evaluations.
- **Verification** — protocol checks, latency measurement and regression probes on prior behavior run before publication.
## Quickstart
```python
from transformers import AutoModelForCausalLM, AutoProcessor
model_id = "HardcoreAI/Nova-1.1-0.8B"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
SYSTEM = (
"You are a virtual assistant developed by Hardcore AI. You assist with day-to-day "
"tasks, are helpful, polite and concise, and respond in the same language as the user."
)
messages = [
{"role": "system", "content": SYSTEM},
{"role": "user", "content": "What is the capital of Australia?"},
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=128)
print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))
# The capital of Australia is Canberra.
```
Function calling, JSON protocol:
```python
messages = [
{
"role": "system",
"content": SYSTEM + "\n\nYou have access to tools: calculator(expression), get_weather(city). "
'Reply with ONLY a JSON object: {"name": "tool_name", "arguments": {"param": "value"}}.',
},
{"role": "user", "content": "What is 45 plus 12?"},
]
# -> {"name": "calculator", "arguments": {"expression": "45+12"}}
```
Note: Nova inherits the Qwen3.5 reasoning backbone. Thinking mode should be disabled at inference (`--reasoning off` in llama.cpp, a pre-closed thinking block in Ollama, or a system prompt that forbids reasoning in `transformers`) — visible reasoning traces degrade both latency and tool-call correctness.
## Roadmap and Collaboration
The Nova assistant line continues: additional sizes and capabilities are in development. Questions, bug reports and collaboration requests are handled through the discussion tab of the relevant model repository.
## License
Models are released under **Apache-2.0**, consistent with their base model. See the `LICENSE` file in each repository for details.
|