Instructions to use Xx-Vexento-xX/openhome-nova with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Xx-Vexento-xX/openhome-nova with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct") model = PeftModel.from_pretrained(base_model, "Xx-Vexento-xX/openhome-nova") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use Xx-Vexento-xX/openhome-nova 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 Xx-Vexento-xX/openhome-nova # Run inference directly in the terminal: llama cli -hf Xx-Vexento-xX/openhome-nova
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf Xx-Vexento-xX/openhome-nova # Run inference directly in the terminal: llama cli -hf Xx-Vexento-xX/openhome-nova
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 Xx-Vexento-xX/openhome-nova # Run inference directly in the terminal: ./llama-cli -hf Xx-Vexento-xX/openhome-nova
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 Xx-Vexento-xX/openhome-nova # Run inference directly in the terminal: ./build/bin/llama-cli -hf Xx-Vexento-xX/openhome-nova
Use Docker
docker model run hf.co/Xx-Vexento-xX/openhome-nova
- LM Studio
- Jan
- vLLM
How to use Xx-Vexento-xX/openhome-nova with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Xx-Vexento-xX/openhome-nova" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Xx-Vexento-xX/openhome-nova", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Xx-Vexento-xX/openhome-nova
- Ollama
How to use Xx-Vexento-xX/openhome-nova with Ollama:
ollama run hf.co/Xx-Vexento-xX/openhome-nova
- Unsloth Studio
How to use Xx-Vexento-xX/openhome-nova 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 Xx-Vexento-xX/openhome-nova 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 Xx-Vexento-xX/openhome-nova to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for Xx-Vexento-xX/openhome-nova to start chatting
- Pi
How to use Xx-Vexento-xX/openhome-nova with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Xx-Vexento-xX/openhome-nova
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": "Xx-Vexento-xX/openhome-nova" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use Xx-Vexento-xX/openhome-nova with Docker Model Runner:
docker model run hf.co/Xx-Vexento-xX/openhome-nova
- Lemonade
How to use Xx-Vexento-xX/openhome-nova with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull Xx-Vexento-xX/openhome-nova
Run and chat with the model
lemonade run user.openhome-nova-{{QUANT_TAG}}List all available models
lemonade list
- Hermes Agent
How to use Xx-Vexento-xX/openhome-nova with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Xx-Vexento-xX/openhome-nova
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 Xx-Vexento-xX/openhome-nova
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Xx-Vexento-xX/openhome-nova with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Xx-Vexento-xX/openhome-nova
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 "Xx-Vexento-xX/openhome-nova" \ --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"
openhome-nova
LoRA fine-tune of Qwen/Qwen2.5-0.5B-Instruct for smart home event reasoning and action dispatch. Built for OpenHome — a fully local, open-source smart home security system running on a Raspberry Pi with no cloud dependency.
What it does
Given a sensor event (door opened, motion detected, smoke alarm, etc.) and the current state of all smart home devices, NOVA returns a structured JSON action list:
[
{"action": "notify", "message": "Smoke detected in kitchen — evacuate!", "severity": "critical"},
{"action": "all_lights", "mode": "alert"}
]
It handles:
- Sensor events — panic, smoke/CO, flood, motion, door, doorbell, RFID, climate, air quality
- Natural language commands — "goodnight", "movie mode", "I'm cold", "lock everything down"
- Routines — away mode, lockdown, morning, party, arrive-home sequences
- Constraints — refuses to write read-only sensors, won't invent device IDs
Intended use
Deployed in OpenHome via Ollama on a Raspberry Pi. The hub loads NOVA as the reasoning layer between raw sensor events and actuator commands.
Load it:
# After cloning the OpenHome repo and downloading this adapter to openhome-model/lora/
ollama create openhome-nova -f pi/Modelfile
Or load directly with PEFT:
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
model = PeftModel.from_pretrained(base, "Xx-Vexento-xX/openhome-nova")
tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
Training details
| Base model | Qwen/Qwen2.5-0.5B-Instruct |
| Method | LoRA (PEFT) |
| LoRA rank | 8 |
| LoRA alpha | 16 |
| Target modules | q_proj, v_proj |
| Training examples | 1718 |
| Validation examples | 191 |
| Epochs | 2 |
| Learning rate | 2e-4 |
| Batch size | 1 (gradient accumulation 4) |
| Max sequence length | 1024 (truncation_side=left) |
| Hardware | CPU only — AMD Ryzen 7 5800X3D, 34 GB RAM |
| Training time | ~9 hours |
| Final eval loss | 0.044 |
Training was done entirely on CPU using transformers + peft + trl (no CUDA, no Unsloth). The truncation_side="left" setting was critical to preserve the assistant's response tokens when sequences exceeded max length.
Evaluation
Tested against 10 OpenHome scenarios immediately after training:
| Scenario | Result |
|---|---|
| Panic button pressed | PASS |
| Smoke alarm triggered | PASS |
| Lights off command | PASS |
| Goodnight routine | PASS |
| Thermostat adjustment | PASS |
| Flood sensor wet | PASS |
| No-op (no action needed) | PASS |
| Door open at night | PASS |
| Movie mode | PASS |
| I'm home routine | PASS |
10/10 valid JSON, 9/10 action-correct (90%). The one partial-pass was smoke/CO outputting "alert" instead of "notify" as the action type — handled in the OpenHome receiver with an alias rather than requiring retraining.
Training data
The dataset covers 18 categories. Key examples:
- All 13 device types with correct sensor → action mappings
- Time-of-day logic (door open at night = alert, daytime = log)
- Light commands: 200+ variations (color, brightness, mode, all-lights)
- Thermostat commands: 200+ (setpoint, mode, hold, schedule)
- Household routines: goodnight, morning, movie, party, lockdown, away, arrive
- 100 constraint examples — teaching what the model must NOT do (can't unlock RFID, can't clear smoke alarm, can't write read-only sensors)
- 50 no-op examples — so it returns
[]instead of inventing actions for benign events
Regenerate or expand: python3 dataset/generate_training_data.py in the OpenHome repo.
Action schema
NOVA outputs arrays of these action types:
{"action": "control_device", "device_id": "plug_kitchen", "state": "on|off|toggle"}
{"action": "set_thermostat", "device_id": "thermostat_main", "setpoint": 72, "mode": "heat|cool|auto|off"}
{"action": "set_light_mode", "device_id": "rgb_living", "mode": "alert|rainbow|pulse|fire|solid", "color": "#FF0000"}
{"action": "notify", "message": "...", "severity": "low|medium|high|critical"}
{"action": "all_lights", "mode": "alert|off|on"}
{"action": "log", "message": "..."}
Limitations
- Trained for the OpenHome device schema. Device type names and field names must match the OpenHome standard for best results.
- At 0.5B parameters, complex multi-step reasoning can occasionally miss edge cases — the RAG memory layer in OpenHome compensates with household context.
- Does not handle arbitrary home automation platforms (Home Assistant, SmartThings, etc.) out of the box.
Repository
Full system source, ESP32 firmware, Pi hub, dashboard, and training pipeline: github.com/DaEpickid540/OpenHome
License
MIT
- Downloads last month
- 3