Text Generation
PEFT
Safetensors
GGUF
Transformers
English
Spanish
harbour
fivewin
fwh
lora
sft
trl
unsloth
code-generation
xbase
clipper
conversational
Instructions to use fivetech/Harbour with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use fivetech/Harbour with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("/home/fivetech/finetune/models/Qwen3.6-35B-A3B") model = PeftModel.from_pretrained(base_model, "fivetech/Harbour") - Transformers
How to use fivetech/Harbour with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="fivetech/Harbour") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("fivetech/Harbour", dtype="auto") - llama-cpp-python
How to use fivetech/Harbour with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="fivetech/Harbour", filename="Qwen3.6-35B-A3B-LoRA-Q4_K_M.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use fivetech/Harbour 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 fivetech/Harbour:Q4_K_M # Run inference directly in the terminal: llama cli -hf fivetech/Harbour:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf fivetech/Harbour:Q4_K_M # Run inference directly in the terminal: llama cli -hf fivetech/Harbour: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 fivetech/Harbour:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf fivetech/Harbour: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 fivetech/Harbour:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf fivetech/Harbour:Q4_K_M
Use Docker
docker model run hf.co/fivetech/Harbour:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use fivetech/Harbour with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "fivetech/Harbour" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fivetech/Harbour", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/fivetech/Harbour:Q4_K_M
- SGLang
How to use fivetech/Harbour with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "fivetech/Harbour" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fivetech/Harbour", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "fivetech/Harbour" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fivetech/Harbour", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use fivetech/Harbour with Ollama:
ollama run hf.co/fivetech/Harbour:Q4_K_M
- Unsloth Studio
How to use fivetech/Harbour 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 fivetech/Harbour 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 fivetech/Harbour to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for fivetech/Harbour to start chatting
- Pi
How to use fivetech/Harbour with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf fivetech/Harbour: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": "fivetech/Harbour:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use fivetech/Harbour with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf fivetech/Harbour: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 fivetech/Harbour:Q4_K_M
Run Hermes
hermes
- Atomic Chat new
- Docker Model Runner
How to use fivetech/Harbour with Docker Model Runner:
docker model run hf.co/fivetech/Harbour:Q4_K_M
- Lemonade
How to use fivetech/Harbour with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull fivetech/Harbour:Q4_K_M
Run and chat with the model
lemonade run user.Harbour-Q4_K_M
List all available models
lemonade list
| #!/usr/bin/env python3 | |
| """ | |
| Harbour Fine-tuning Script for qwen3.6:35b (Qwen3.6-35B-A3B MoE) | |
| Uses LoRA with CPU training (121GB RAM available) | |
| """ | |
| import json | |
| import torch | |
| from pathlib import Path | |
| from transformers import ( | |
| AutoModelForCausalLM, | |
| AutoTokenizer, | |
| TrainingArguments, | |
| Trainer, | |
| DataCollatorForLanguageModeling, | |
| ) | |
| from peft import LoraConfig, get_peft_model, TaskType | |
| from datasets import Dataset | |
| # Configuration | |
| MODEL_NAME = "Qwen/Qwen3.6-35B-A3B" | |
| TRAIN_FILE = Path("/home/fivetech/finetune/harbour_train.jsonl") | |
| VAL_FILE = Path("/home/fivetech/finetune/harbour_val.jsonl") | |
| OUTPUT_DIR = Path("/home/fivetech/finetune/output") | |
| MAX_SEQ_LENGTH = 2048 | |
| print("=" * 60) | |
| print("Harbour Fine-tuning - qwen3.6:35b (MoE) with LoRA") | |
| print("=" * 60) | |
| # 1. Load tokenizer | |
| print("\n1. Loading tokenizer...") | |
| tokenizer = AutoTokenizer.from_pretrained( | |
| MODEL_NAME, | |
| trust_remote_code=True, | |
| padding_side="right", | |
| ) | |
| if tokenizer.pad_token is None: | |
| tokenizer.pad_token = tokenizer.eos_token | |
| # 2. Load dataset | |
| print("2. Loading dataset...") | |
| def load_jsonl(path): | |
| data = [] | |
| with open(path) as f: | |
| for line in f: | |
| data.append(json.loads(line)) | |
| return data | |
| train_data = load_jsonl(TRAIN_FILE) | |
| val_data = load_jsonl(VAL_FILE) | |
| print(f" Train: {len(train_data)} entries") | |
| print(f" Val: {len(val_data)} entries") | |
| # 3. Format conversations for Qwen ChatML | |
| print("3. Formatting conversations...") | |
| def format_conversation(entry): | |
| """Convert messages to Qwen ChatML format.""" | |
| messages = entry["messages"] | |
| text = tokenizer.apply_chat_template( | |
| messages, | |
| tokenize=False, | |
| add_generation_prompt=False, | |
| ) | |
| return {"text": text} | |
| train_dataset = Dataset.from_list([format_conversation(e) for e in train_data]) | |
| val_dataset = Dataset.from_list([format_conversation(e) for e in val_data]) | |
| # 4. Tokenize | |
| print("4. Tokenizing...") | |
| def tokenize_function(examples): | |
| return tokenizer( | |
| examples["text"], | |
| truncation=True, | |
| max_length=MAX_SEQ_LENGTH, | |
| padding=False, | |
| ) | |
| train_dataset = train_dataset.map( | |
| tokenize_function, | |
| batched=True, | |
| remove_columns=["text"], | |
| desc="Tokenizing train", | |
| ) | |
| val_dataset = val_dataset.map( | |
| tokenize_function, | |
| batched=True, | |
| remove_columns=["text"], | |
| desc="Tokenizing val", | |
| ) | |
| print(f" Train tokens: {sum(len(x) for x in train_dataset['input_ids']):,}") | |
| print(f" Val tokens: {sum(len(x) for x in val_dataset['input_ids']):,}") | |
| # 5. Load model (CPU with float32) | |
| print("5. Loading model (CPU mode)...") | |
| print(" This may take a few minutes...") | |
| model = AutoModelForCausalLM.from_pretrained( | |
| MODEL_NAME, | |
| torch_dtype=torch.float32, | |
| device_map="cpu", | |
| trust_remote_code=True, | |
| ) | |
| # 6. LoRA configuration | |
| print("6. Configuring LoRA...") | |
| lora_config = LoraConfig( | |
| task_type=TaskType.CAUSAL_LM, | |
| r=16, | |
| lora_alpha=32, | |
| lora_dropout=0.05, | |
| target_modules=["q_proj", "k_proj", "v_proj", "o_proj"], | |
| bias="none", | |
| ) | |
| model = get_peft_model(model, lora_config) | |
| model.print_trainable_parameters() | |
| # 7. Training arguments | |
| print("7. Setting up training...") | |
| training_args = TrainingArguments( | |
| output_dir=str(OUTPUT_DIR), | |
| num_train_epochs=3, | |
| per_device_train_batch_size=1, | |
| gradient_accumulation_steps=16, | |
| learning_rate=1e-4, | |
| weight_decay=0.01, | |
| warmup_ratio=0.1, | |
| lr_scheduler_type="cosine", | |
| logging_steps=5, | |
| save_steps=50, | |
| save_total_limit=3, | |
| eval_strategy="steps", | |
| eval_steps=50, | |
| load_best_model_at_end=True, | |
| metric_for_best_model="eval_loss", | |
| bf16=False, | |
| fp16=False, | |
| dataloader_num_workers=1, | |
| report_to="none", | |
| remove_unused_columns=False, | |
| max_grad_norm=1.0, | |
| ) | |
| # 8. Data collator | |
| data_collator = DataCollatorForLanguageModeling( | |
| tokenizer=tokenizer, | |
| mlm=False, | |
| ) | |
| # 9. Create trainer | |
| print("8. Creating trainer...") | |
| trainer = Trainer( | |
| model=model, | |
| args=training_args, | |
| train_dataset=train_dataset, | |
| eval_dataset=val_dataset, | |
| data_collator=data_collator, | |
| ) | |
| # 10. Train | |
| print("\n9. Starting training...") | |
| print("=" * 60) | |
| trainer.train() | |
| # 11. Save | |
| print("\n10. Saving model...") | |
| trainer.save_model(str(OUTPUT_DIR / "final")) | |
| tokenizer.save_pretrained(str(OUTPUT_DIR / "final")) | |
| print("\n" + "=" * 60) | |
| print("Training complete!") | |
| print(f"Model saved to: {OUTPUT_DIR / 'final'}") | |
| print("=" * 60) | |