| """ |
| Text Generation utilities for interactive prompt evaluation |
| """ |
|
|
| import torch |
| from typing import Union |
|
|
|
|
| def generate( |
| model, |
| tok, |
| prompt: str, |
| max_new_tokens: int = 100, |
| temperature: float = 0.8, |
| top_k: int = 40, |
| device: Union[str, torch.device] = None |
| ) -> str: |
| """ |
| Generates text continuation for a prompt using model and tokenizer. |
| """ |
| if device is None: |
| device = next(model.parameters()).device |
|
|
| model.eval() |
|
|
| |
| if hasattr(tok, "encode"): |
| tokens = tok.encode(prompt) |
| else: |
| tokens = tok.encode_ordinary(prompt) |
|
|
| idx = torch.tensor(tokens, dtype=torch.long, device=device).unsqueeze(0) |
|
|
| raw_model = model.module if hasattr(model, "module") else model |
| out_idx = raw_model.generate(idx, max_new_tokens=max_new_tokens, temperature=temperature, top_k=top_k) |
|
|
| if hasattr(tok, "decode"): |
| return tok.decode(out_idx[0].tolist()) |
| else: |
| return tok.decode(out_idx[0].tolist()) |
|
|