quiz-generator / model.py
Abdullah Khan Kakar
feat: PDF URL input for topic extraction, title generation, fix parse_json for objects
0705f93
Raw
History Blame Contribute Delete
1.38 kB
from transformers import AutoTokenizer
from transformers import AutoModelForCausalLM
import torch
CHECKPOINT = "HuggingFaceTB/SmolLM2-1.7B-Instruct"
_model = None
_tokenizer = None
try:
import spaces
IS_SPACES = True
except ImportError:
IS_SPACES = False
def _load_model(device):
global _model, _tokenizer
if _model is None:
_tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
_model = AutoModelForCausalLM.from_pretrained(CHECKPOINT).to(device)
def _generate(prompt, device):
_load_model(device)
messages = [{"role": "user", "content": prompt}]
chat = _tokenizer.apply_chat_template(messages, tokenize=False)
inputs = _tokenizer(chat, return_tensors="pt").to(device)
input_len = inputs["input_ids"].shape[1]
outputs = _model.generate(
**inputs,
max_new_tokens=2048,
temperature=0.2,
top_p=0.9,
do_sample=True,
pad_token_id=_tokenizer.eos_token_id
)
generated_tokens = outputs[0][input_len:]
response = _tokenizer.decode(generated_tokens, skip_special_tokens=True).strip()
print(response)
return response
if IS_SPACES:
@spaces.GPU
def generate(prompt):
return _generate(prompt, "cuda")
else:
def generate(prompt):
device = "cuda" if torch.cuda.is_available() else "cpu"
return _generate(prompt, device)