omertaAI / sample.py
homixide55555's picture
Clean commit of Omerta AI project for deployment
13ac718
Raw
History Blame Contribute Delete
2.11 kB
import torch
import os
from model import GPTLanguageModel
device = 'cuda' if torch.cuda.is_available() else 'cpu'
checkpoint_path = 'model_checkpoint.pth'
if not os.path.exists(checkpoint_path):
print("Checkpoint not found. Please run train.py first.")
exit(1)
# Load the checkpoint to get chars and model state
checkpoint = torch.load(checkpoint_path, map_location=device)
chars = checkpoint['chars']
vocab_size = len(chars)
# Recreate the exact same mapping
stoi = { ch:i for i,ch in enumerate(chars) }
itos = { i:ch for i,ch in enumerate(chars) }
encode = lambda s: [stoi[c] for c in s]
decode = lambda l: ''.join([itos[i] for i in l])
# Initialize the model with the same hyperparameters used in training
n_embd = 128
n_head = 4
n_layer = 8
block_size = 64
dropout = 0.1
model = GPTLanguageModel(vocab_size, n_embd, n_head, n_layer, block_size, dropout)
model.load_state_dict(checkpoint['model_state_dict'])
model.to(device)
model.eval()
# Interactive Chat Mode
print("\n--- Ինտերակտիվ Զրույց (Interactive Chat) ---")
print("Գրեք 'quit' դուրս գալու համար:")
print("ԶԳՈՒՇԱՑՈՒՄ: Մոդելը ճանաչում է միայն այն տառերը, որոնք կան data/ թղթապանակում:\n")
while True:
user_input = input("ՄԱՐԴ: ")
if user_input.lower() == 'quit':
break
prompt = f"ՄԱՐԴ: {user_input}\nԱԻ:"
try:
context = torch.tensor([encode(prompt)], dtype=torch.long, device=device)
except KeyError as e:
print(f"[Սխալ: '{e.args[0]}' տառը գոյություն չունի մոդելի բառարանում: Փորձեք այլ բառ:]")
continue
# Գեներացնում ենք 100 նոր տառ
generated_output = decode(model.generate(context, max_new_tokens=100)[0].tolist())
# Առանձնացնում ենք ԱԻ-ի պատասխանը (կտրում ենք մեր գրած prompt-ը)
response = generated_output[len(prompt):].split("ՄԱՐԴ:")[0] # stop if it starts writing for human
print(f"ԱԻ:{response.strip()}\n")