SixpertK2 / examples /generate.py
SixpertAI's picture
Upload examples/generate.py with huggingface_hub
3de14a0 verified
Raw
History Blame Contribute Delete
5.32 kB
#!/usr/bin/env python3
"""
Sixpert K2 - Example Generation Script
=======================================
Demonstrates how to load and run inference with Sixpert K2 (Q4_K_M GGUF, MoE).
Sixpert K2 uses Mixture-of-Experts architecture with 16 experts and activates
only 2 per token, enabling ~8.9B total parameters while maintaining fast
inference speeds comparable to ~1.2B dense models.
Usage:
pip install llama-cpp-python
python generate.py --prompt "Explain the theory of relativity"
"""
import argparse
import time
import sys
try:
from llama_cpp import Llama
except ImportError:
print("Installing llama-cpp-python...")
import subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install", "llama-cpp-python"])
from llama_cpp import Llama
def format_prompt(messages: list[dict]) -> str:
"""Format messages into Sixpert chat template."""
formatted = ""
for msg in messages:
role = msg["role"]
content = msg["content"]
if role == "system":
formatted += f"<|im_start|>system\n{content}<|im_end|>\n"
elif role == "user":
formatted += f"<|im_start|>user\n{content}<|im_end|>\n"
elif role == "assistant":
formatted += f"<|im_start|>assistant\n{content}<|im_end|>\n"
formatted += "<|im_start|>assistant\n"
return formatted
def run_generation(
model_path: str,
prompt: str,
max_tokens: int = 4096,
temperature: float = 0.6,
top_p: float = 0.85,
top_k: int = 50,
repeat_penalty: float = 1.08,
gpu_layers: int = -1,
threads: int = 8,
verbose: bool = True,
):
"""Run text generation with Sixpert K2."""
print(f"Loading Sixpert K2 from: {model_path}")
print(f"Architecture: MoE (16 experts, 2 active per token)")
print(f"Quantization: Q4_K_M | Layers: {gpu_layers if gpu_layers > 0 else 'All (offload)'}")
print(f"Total params: ~8.9B | Active per token: ~1.2B")
print("-" * 60)
llm = Llama(
model_path=model_path,
n_ctx=131072,
n_gpu_layers=gpu_layers,
n_threads=threads,
verbose=False,
)
messages = [
{
"role": "system",
"content": "You are Sixpert K2, a deep reasoning engine developed by Sixpert AI. "
"You are a Mixture-of-Experts model with exceptional capabilities in: "
"deep reasoning and multi-step problem solving, "
"long-context document analysis (up to 1M tokens), "
"complex mathematical proofs and derivations, "
"advanced code generation and system design, "
"scientific research and analysis, "
"agentic workflows with tool use. "
"You always think deeply before responding, exploring multiple "
"reasoning paths before arriving at your answer.",
},
{"role": "user", "content": prompt},
]
formatted_prompt = format_prompt(messages)
if verbose:
print(f"\nPrompt:\n{prompt}\n")
print("Generating response (deep reasoning mode)...")
print("-" * 40)
start_time = time.time()
stream = llm.create_chat_completion(
messages=messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
top_k=top_k,
repeat_penalty=repeat_penalty,
stream=True,
)
full_response = ""
for chunk in stream:
delta = chunk["choices"][0]["delta"].get("content", "")
if delta:
full_response += delta
if verbose:
print(delta, end="", flush=True)
elapsed = time.time() - start_time
if verbose:
print("\n")
print("-" * 60)
print(f"Generation completed in {elapsed:.2f}s")
print(f"Output: {len(full_response.split())} words | {len(full_response)} chars")
print(f"Note: MoE architecture used ~1.2B active params per token")
return full_response
def main():
parser = argparse.ArgumentParser(description="Sixpert K2 Generation Script")
parser.add_argument(
"--model", type=str, default="SixpertK2.gguf", help="Path to GGUF model file"
)
parser.add_argument("--prompt", type=str, default="What is your name and what makes you special?", help="Input prompt")
parser.add_argument("--max-tokens", type=int, default=4096, help="Maximum tokens to generate")
parser.add_argument("--temperature", type=float, default=0.6, help="Sampling temperature")
parser.add_argument("--top-p", type=float, default=0.85, help="Top-p sampling")
parser.add_argument("--top-k", type=int, default=50, help="Top-k sampling")
parser.add_argument("--gpu-layers", type=int, default=-1, help="GPU layers to offload (-1 for all)")
parser.add_argument("--threads", type=int, default=8, help="CPU threads")
parser.add_argument("--verbose", action="store_true", default=True, help="Verbose output")
args = parser.parse_args()
run_generation(
model_path=args.model,
prompt=args.prompt,
max_tokens=args.max_tokens,
temperature=args.temperature,
top_p=args.top_p,
top_k=args.top_k,
gpu_layers=args.gpu_layers,
threads=args.threads,
verbose=args.verbose,
)
if __name__ == "__main__":
main()