Pteradonto/NPCBot
0
1 2import gradio as gr3from transformers import AutoTokenizer, AutoModelForCausalLM4import torch5 6# Завантаження моделі7model_path = "./finetuned_model_optimized"8device = "cuda" if torch.cuda.is_available() else "cpu"9 10tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False)11tokenizer.pad_token = tokenizer.eos_token or tokenizer.eos_token_id or tokenizer.sep_token or "<|endoftext|>"12model = AutoModelForCausalLM.from_pretrained(model_path).to(device)13model.eval()14 15# Функція чату16def chat_fn(user_input, history=[]):17 try:18 context = ""19 for pair in history:20 context += pair[0] + tokenizer.eos_token + pair[1] + tokenizer.eos_token21 context += user_input + tokenizer.eos_token22 23 input_ids = tokenizer.encode(context, return_tensors="pt").to(device)24 with torch.no_grad():25 output_ids = model.generate(26 input_ids,27 max_length=256,28 pad_token_id=tokenizer.eos_token_id,29 do_sample=True,30 top_k=50,31 top_p=0.95,32 temperature=0.8,33 no_repeat_ngram_size=334 )35 36 reply = tokenizer.decode(output_ids[:, input_ids.shape[-1]:][0], skip_special_tokens=True)37 history.append([user_input, reply])38 return history, history39 except Exception as e:40 return [["❌ Error", str(e)]], []41 42# Інтерфейс Gradio43gr.ChatInterface(44 fn=chat_fn,45 title="🎮 NPC Chatbot",46 description="Імітація діалогів з персонажами відеоігор",47 textbox=gr.Textbox(placeholder="Постав своє питання..."),48).launch()49 