Files
wehub-resource-sync a8262fc01e
docs / build (push) Waiting to run
docs / deploy (push) Blocked by required conditions
chore: import upstream snapshot with attribution
2026-07-13 13:10:22 +08:00

69 lines
2.5 KiB
Python

import torch
import tiktoken
import argparse
from config.config import default_config as config
from src.models.transformer import Transformer # Assuming your Transformer class is in this module
def load_checkpoint(model_path: str, device: str):
try:
return torch.load(model_path, map_location=torch.device(device), weights_only=False)
except TypeError:
return torch.load(model_path, map_location=torch.device(device))
def generate_text(model_path: str, input_text: str, max_new_tokens: int = 100, device: str = 'cuda') -> str:
"""
Generates text using a pre-trained Transformer model.
Args:
model_path (str): Path to the saved model checkpoint.
input_text (str): The initial text to start generation from.
max_new_tokens (int): The maximum number of new tokens to generate.
device (str): 'cuda' or 'cpu', the device to run the model on.
Returns:
str: The generated text.
"""
# Load the model checkpoint
checkpoint = load_checkpoint(model_path, device)
# Initialize the model using the configuration from config.py
model = Transformer(
n_head=config['n_head'],
n_embed=config['n_embed'],
context_length=config['context_length'],
vocab_size=config['vocab_size'],
N_BLOCKS=config['n_blocks']
)
model.load_state_dict(checkpoint['model_state_dict'])
model.eval().to(device)
# Load the tokenizer
enc = tiktoken.get_encoding("r50k_base")
start_ids = enc.encode_ordinary(input_text)
context = torch.tensor(start_ids, dtype=torch.long, device=device).unsqueeze(0)
# Generation process
with torch.no_grad():
generated_tokens = model.generate(context, max_new_tokens=max_new_tokens)[0].tolist()
# Decode the generated tokens
output_text = enc.decode(generated_tokens)
return output_text
def main() -> None:
parser = argparse.ArgumentParser(description="Generate text using a pre-trained Transformer model.")
parser.add_argument('--model_path', type=str, help='Path to the saved model checkpoint.')
parser.add_argument('--input_text', type=str, help='The initial text to start generation from.')
parser.add_argument('--max_new_tokens', type=int, default=100, help='Maximum number of new tokens to generate.')
args = parser.parse_args()
generated = generate_text(args.model_path, args.input_text, args.max_new_tokens, config['device'])
print(f"Generated text:\n{generated}")
if __name__ == "__main__":
main()