Examples

Here are some practical examples showing how to use LLM Samplers in various scenarios.

Basic Text Generation

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from llm_samplers import TemperatureSampler

# Load model and tokenizer
model_name = "gpt2"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Initialize sampler
sampler = TemperatureSampler(temperature=0.7)

# Setup input
input_text = "Once upon a time"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# Generate text
max_length = 50
output_ids = sampler.sample(model, input_ids, max_new_tokens=max_length)

# Decode and print result
generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(generated_text)

Comparing Different Samplers

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from llm_samplers import (
    TemperatureSampler,
    TopKSampler,
    TopPSampler,
    MinPSampler
)

# Load model and tokenizer
model_name = "gpt2-medium"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Initialize samplers
samplers = {
    "Temperature (0.7)": TemperatureSampler(temperature=0.7),
    "Top-K (40)": TopKSampler(k=40),
    "Top-P (0.95)": TopPSampler(p=0.95),
    "Min-P (0.05)": MinPSampler(min_p=0.05),
}

# Setup input
input_text = "The future of artificial intelligence is"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# Generate text with each sampler
max_length = 100
results = {}

for name, sampler in samplers.items():
    output_ids = sampler.sample(model, input_ids, max_new_tokens=max_length)
    generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
    results[name] = generated_text

# Print results
for name, text in results.items():
    print(f"\n=== {name} ===")
    print(text)

Customizing Generation Parameters

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from llm_samplers import TopPSampler

# Load model and tokenizer
model_name = "gpt2-large"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Initialize sampler with custom parameters
sampler = TopPSampler(
    p=0.92,
    temperature=0.8,  # You can combine Top-P with temperature
    repetition_penalty=1.2  # Penalize repeated tokens
)

# Setup input
input_text = "Write a short poem about"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# Generate with custom parameters
output_ids = sampler.sample(
    model,
    input_ids,
    max_new_tokens=150,
    min_new_tokens=50,  # Force minimum generation length
    no_repeat_ngram_size=3  # Prevent repeating 3-grams
)

# Decode and print result
generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(generated_text)

Using Anti-Slop for Higher Quality

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from llm_samplers import AntiSlopSampler

# Load model and tokenizer
model_name = "gpt2-xl"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Initialize Anti-Slop sampler
sampler = AntiSlopSampler(
    word_level=True,  # Enable word-level backtracking
    backtrack_threshold=0.4,  # Threshold for backtracking
    max_retries=3  # Maximum number of retries
)

# Setup input
input_text = "Explain the concept of quantum computing in simple terms:"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# Generate text
output_ids = sampler.sample(model, input_ids, max_new_tokens=200)

# Decode and print result
generated_text = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(generated_text)