SixpertK1 / examples /generate.py
SixpertAI's picture
Upload examples/generate.py with huggingface_hub
987117f verified
Raw
History Blame Contribute Delete
4.49 kB
#!/usr/bin/env python3
"""
Sixpert K1 - Example Generation Script
=======================================
Demonstrates how to load and run inference with Sixpert K1 (Q4_K_M GGUF)
using llama-cpp-python.
Usage:
pip install llama-cpp-python
python generate.py --prompt "Explain quantum entanglement"
"""
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 = 2048,
temperature: float = 0.7,
top_p: float = 0.8,
top_k: int = 40,
repeat_penalty: float = 1.05,
gpu_layers: int = -1,
threads: int = 8,
verbose: bool = True,
):
"""Run text generation with Sixpert K1."""
print(f"Loading Sixpert K1 from: {model_path}")
print(f"Quantization: Q4_K_M | Layers: {gpu_layers if gpu_layers > 0 else 'All (offload)'}")
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 K1, a precision logic engine developed by Sixpert AI. "
"You excel at reasoning, code generation, mathematical analysis, "
"and structured problem-solving. You think before you respond.",
},
{"role": "user", "content": prompt},
]
formatted_prompt = format_prompt(messages)
if verbose:
print(f"\nPrompt:\n{prompt}\n")
print("Generating response...")
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")
return full_response
def main():
parser = argparse.ArgumentParser(description="Sixpert K1 Generation Script")
parser.add_argument(
"--model", type=str, default="SixpertK1.gguf", help="Path to GGUF model file"
)
parser.add_argument("--prompt", type=str, default="What is your name and what can you do?", help="Input prompt")
parser.add_argument("--max-tokens", type=int, default=2048, help="Maximum tokens to generate")
parser.add_argument("--temperature", type=float, default=0.7, help="Sampling temperature")
parser.add_argument("--top-p", type=float, default=0.8, help="Top-p sampling")
parser.add_argument("--top-k", type=int, default=40, 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()