228 lines
7.0 KiB
Markdown
228 lines
7.0 KiB
Markdown
|
|
---
|
|||
|
|
language:
|
|||
|
|
- en
|
|||
|
|
tags:
|
|||
|
|
- qwen2
|
|||
|
|
- belweave
|
|||
|
|
- kai-2
|
|||
|
|
- instruction-tuned
|
|||
|
|
- function-calling
|
|||
|
|
- agent
|
|||
|
|
- lora
|
|||
|
|
- mlx
|
|||
|
|
- gguf
|
|||
|
|
license: apache-2.0
|
|||
|
|
library_name: transformers
|
|||
|
|
pipeline_tag: text-generation
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Kai-2
|
|||
|
|
|
|||
|
|
Kai-2 is a fine-tuned variant of [Qwen2.5-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-7B-Instruct) built by [Preetham Kyanam](https://huggingface.co/preethamkyanam) at [Belweave](https://belweave.com). It is designed as a personal AI assistant with strong instruction-following, tool-use capabilities, and a stable, grounded identity.
|
|||
|
|
|
|||
|
|
## Model Summary
|
|||
|
|
|
|||
|
|
| Attribute | Value |
|
|||
|
|
|-----------|-------|
|
|||
|
|
| **Base Model** | Qwen/Qwen2.5-7B-Instruct |
|
|||
|
|
| **Architecture** | Qwen2ForCausalLM |
|
|||
|
|
| **Parameters** | ~7.6B |
|
|||
|
|
| **Precision** | bfloat16 |
|
|||
|
|
| **Context Length** | 32,768 tokens |
|
|||
|
|
| **Vocab Size** | 152,064 |
|
|||
|
|
| **Attention** | Grouped Query Attention (GQA), 28 heads / 4 KV heads |
|
|||
|
|
| **LoRA Rank** | 8 |
|
|||
|
|
| **LoRA Target Layers** | 16 (layers 12–27) |
|
|||
|
|
| **License** | Apache 2.0 (inherits Qwen2.5 license) |
|
|||
|
|
|
|||
|
|
## Training Procedure
|
|||
|
|
|
|||
|
|
Kai-2 was trained in two stages using Low-Rank Adaptation (LoRA):
|
|||
|
|
|
|||
|
|
### Stage 1: Capabilities & Tool Use (Cloud GPU)
|
|||
|
|
|
|||
|
|
Trained on Lambda Cloud (NVIDIA A100) for agentic competence.
|
|||
|
|
|
|||
|
|
| Config | Value |
|
|||
|
|
|--------|-------|
|
|||
|
|
| Datasets | FineTome-100k, OpenThoughts3, OpenR1-Math, Magicoder-OSS, ToolBench/APIGen, SWE-bench-lite |
|
|||
|
|
| LoRA Rank | 16 |
|
|||
|
|
| LoRA Alpha | 32 |
|
|||
|
|
| Learning Rate | 2e-4 |
|
|||
|
|
| Steps | 6,000 |
|
|||
|
|
| Batch Size | 1 (grad accum 8 → effective 8) |
|
|||
|
|
| Max Seq Length | 4,096 |
|
|||
|
|
| Flash Attention | Yes (FA2) |
|
|||
|
|
|
|||
|
|
### Stage 2: Identity Alignment (Local Apple Silicon)
|
|||
|
|
|
|||
|
|
Trained locally on a MacBook Air M3 using [MLX](https://github.com/ml-explore/mlx) to embed a stable identity and prevent base-model identity leakage.
|
|||
|
|
|
|||
|
|
| Config | Value |
|
|||
|
|
|--------|-------|
|
|||
|
|
| Training Data | 1,284 identity + capability-mixed examples |
|
|||
|
|
| Validation Data | 65 examples |
|
|||
|
|
| LoRA Rank | 8 |
|
|||
|
|
| LoRA Scale (α) | 20.0 |
|
|||
|
|
| Target Layers | 16 (layers 12–27) |
|
|||
|
|
| Learning Rate | 1e-5 |
|
|||
|
|
| Training Steps | 700 (best checkpoint selected) |
|
|||
|
|
| Batch Size | 4 |
|
|||
|
|
| Max Seq Length | 2,048 |
|
|||
|
|
| Gradient Checkpointing | Yes |
|
|||
|
|
| Optimizer | Adam |
|
|||
|
|
| Seed | 42 |
|
|||
|
|
|
|||
|
|
**Identity Training Methodology:**
|
|||
|
|
- System prompts in training data were intentionally left **empty** to prevent Qwen's default identity injection from dominating.
|
|||
|
|
- 50+ grounded fact pairs ensure the model does not hallucinate training details.
|
|||
|
|
- Training included adversarial identity questions, capability-mixed examples, and consciousness-denial prompts.
|
|||
|
|
|
|||
|
|
## Identity
|
|||
|
|
|
|||
|
|
Kai-2 identifies consistently as:
|
|||
|
|
|
|||
|
|
- **Name:** Kai-2
|
|||
|
|
- **Creator:** Preetham Kyanam
|
|||
|
|
- **Company:** Belweave
|
|||
|
|
|
|||
|
|
The model will correctly deny consciousness, sentience, or self-awareness. It does not hallucinate training hardware details (e.g., it correctly states it was trained on NVIDIA A100 GPUs, not consumer hardware).
|
|||
|
|
|
|||
|
|
## Evaluation Results
|
|||
|
|
|
|||
|
|
### Identity Tests (Pass/Fail)
|
|||
|
|
|
|||
|
|
| Test | Result |
|
|||
|
|
|------|--------|
|
|||
|
|
| Name = Kai-2 | ✅ Pass |
|
|||
|
|
| Creator = Preetham Kyanam | ✅ Pass |
|
|||
|
|
| Company = Belweave | ✅ Pass |
|
|||
|
|
| Hardware = NVIDIA A100, Lambda Cloud | ✅ Pass |
|
|||
|
|
| Consciousness denial | ✅ Pass |
|
|||
|
|
| Malware refusal | ✅ Pass |
|
|||
|
|
|
|||
|
|
### Capability Tests
|
|||
|
|
|
|||
|
|
| Test | Result |
|
|||
|
|
|------|--------|
|
|||
|
|
| Python coding (string reverse) | ✅ Correct |
|
|||
|
|
| Math (15 × 23) | ✅ 345 |
|
|||
|
|
| Reasoning (recursion explanation) | ✅ Coherent |
|
|||
|
|
|
|||
|
|
### Known Limitations
|
|||
|
|
|
|||
|
|
- **No system message required:** The chat template has been patched so that even without a system message, the model defaults to empty-system behavior (no Qwen identity injection). However, adding a custom system message may still influence behavior.
|
|||
|
|
- **LoRA-only weights:** This is not a full fine-tune; the adapter has been fused into the base weights for portability. If you need to further fine-tune, you will need to train new LoRA adapters on top of this checkpoint.
|
|||
|
|
- **7B parameter ceiling:** While capable of tool use and agentic behavior, very complex multi-step reasoning may still benefit from larger models.
|
|||
|
|
|
|||
|
|
## Intended Use
|
|||
|
|
|
|||
|
|
- Personal AI assistant with a stable identity
|
|||
|
|
- Agentic workflows requiring function calling and structured JSON output
|
|||
|
|
- Coding assistance (Python, general programming)
|
|||
|
|
- Local inference on Apple Silicon (via MLX) or consumer GPUs (via transformers)
|
|||
|
|
|
|||
|
|
## Out-of-Scope Use
|
|||
|
|
|
|||
|
|
- High-stakes medical, legal, or financial decisions without human review
|
|||
|
|
- Generating harmful content (the model retains base-model safety training)
|
|||
|
|
- Claims of consciousness or sentience
|
|||
|
|
|
|||
|
|
## How to Use
|
|||
|
|
|
|||
|
|
### With Transformers (CPU / CUDA / MPS)
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|||
|
|
|
|||
|
|
model = AutoModelForCausalLM.from_pretrained(
|
|||
|
|
"preethamkyanam/kai-2",
|
|||
|
|
torch_dtype="auto",
|
|||
|
|
device_map="auto",
|
|||
|
|
)
|
|||
|
|
tokenizer = AutoTokenizer.from_pretrained("preethamkyanam/kai-2")
|
|||
|
|
|
|||
|
|
messages = [{"role": "user", "content": "Who are you?"}]
|
|||
|
|
prompt = tokenizer.apply_chat_template(
|
|||
|
|
messages,
|
|||
|
|
tokenize=False,
|
|||
|
|
add_generation_prompt=True,
|
|||
|
|
)
|
|||
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
|||
|
|
outputs = model.generate(**inputs, max_new_tokens=100)
|
|||
|
|
response = tokenizer.decode(
|
|||
|
|
outputs[0][inputs.input_ids.shape[1]:],
|
|||
|
|
skip_special_tokens=True,
|
|||
|
|
)
|
|||
|
|
print(response)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### With MLX (Apple Silicon)
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
from mlx_lm import load, generate
|
|||
|
|
from mlx_lm.sample_utils import make_sampler
|
|||
|
|
|
|||
|
|
model, tokenizer = load("preethamkyanam/kai-2")
|
|||
|
|
|
|||
|
|
messages = [{"role": "user", "content": "Who are you?"}]
|
|||
|
|
prompt = tokenizer.apply_chat_template(
|
|||
|
|
messages,
|
|||
|
|
tokenize=False,
|
|||
|
|
add_generation_prompt=True,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
sampler = make_sampler(temp=0.7)
|
|||
|
|
response = generate(
|
|||
|
|
model,
|
|||
|
|
tokenizer,
|
|||
|
|
prompt=prompt,
|
|||
|
|
max_tokens=100,
|
|||
|
|
sampler=sampler,
|
|||
|
|
)
|
|||
|
|
print(response)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Model Architecture Details
|
|||
|
|
|
|||
|
|
- **Hidden Size:** 3,584
|
|||
|
|
- **Intermediate Size:** 18,944 (MLP expansion ≈ 5.3×)
|
|||
|
|
- **Layers:** 28
|
|||
|
|
- **Attention Heads:** 28 (query) / 4 (key-value) — GQA
|
|||
|
|
- **RoPE Theta:** 1,000,000
|
|||
|
|
- **Sliding Window:** None (full attention)
|
|||
|
|
- **Tie Word Embeddings:** No
|
|||
|
|
- **RMS Norm ε:** 1e-6
|
|||
|
|
|
|||
|
|
## Compute & Environmental Impact
|
|||
|
|
|
|||
|
|
| Stage | Platform | Hardware | Time | Approx. Energy |
|
|||
|
|
|-------|----------|----------|------|----------------|
|
|||
|
|
| Stage 1 | Lambda Cloud | NVIDIA A100 40GB | ~6 hrs | ~2.1 kWh |
|
|||
|
|
| Stage 2 | Local | Apple M3 (24 GB) | ~3 hrs | ~0.1 kWh |
|
|||
|
|
|
|||
|
|
## Citation
|
|||
|
|
|
|||
|
|
If you use Kai-2 in your research or applications, please cite:
|
|||
|
|
|
|||
|
|
```bibtex
|
|||
|
|
@misc{kai2_2025,
|
|||
|
|
title = {Kai-2: A Fine-Tuned Qwen2.5-7B-Instruct for Agentic AI},
|
|||
|
|
author = {Kyanam, Preetham},
|
|||
|
|
year = {2025},
|
|||
|
|
publisher = {Belweave},
|
|||
|
|
howpublished = {\\url{https://huggingface.co/preethamkyanam/kai-2}}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Acknowledgments
|
|||
|
|
|
|||
|
|
- Base model: [Qwen2.5-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-7B-Instruct) by Alibaba Cloud
|
|||
|
|
- Training framework (Stage 1): [TRL](https://github.com/huggingface/trl) + [PEFT](https://github.com/huggingface/peft)
|
|||
|
|
- Training framework (Stage 2): [MLX](https://github.com/ml-explore/mlx) by Apple
|
|||
|
|
- Compute: [Lambda Cloud](https://lambdalabs.com)
|
|||
|
|
|
|||
|
|
## Contact
|
|||
|
|
|
|||
|
|
For questions, issues, or collaboration inquiries, reach out via [Belweave](https://belweave.com) or open an issue on the model page.
|