README / README.md
HeavensHackDev's picture
Fix organization card header: host banner in the Space, center and size it
4db111a verified
|
Raw History Blame Contribute Delete
6.88 kB
---
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>
&nbsp;&nbsp;|&nbsp;&nbsp;
<a href="https://huggingface.co/HardcoreAI/Nova-1.1-0.8B">Nova-1.1-0.8B</a>
&nbsp;&nbsp;|&nbsp;&nbsp;
<a href="https://huggingface.co/HardcoreAI/Nova-1-0.8B">Nova-1-0.8B</a>
&nbsp;&nbsp;|&nbsp;&nbsp;
<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.