Views
No views yet
dataset = load_dataset("omarkamali/wikipedia-monthly", "20251001.tr", split="train[:50000]")1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM
3from peft import PeftModel
4
5def main():
6 model_name = "Qwen/Qwen3-14B"
7 adapter_path = "uisikdag/qwen3-14b-tr-wiki-monthly-qlora"
8
9 print(f"Loading {model_name}...")
10
11 try:
12 tokenizer = AutoTokenizer.from_pretrained(model_name)
13 except Exception as e:
14 print(f"Error loading tokenizer: {e}")
15 return
16
17 # --- FIX: Changed import location for is_bitsandbytes_available ---
18 try:
19 from transformers.utils import is_bitsandbytes_available
20 except ImportError:
21 # Fallback for older versions if needed, but the main cause is fixed
22 from transformers.integrations import is_bitsandbytes_available
23
24 if not is_bitsandbytes_available():
25 print("Bitsandbytes not installed, falling back to float16. Ensure bnb is installed for 4-bit loading.")
26 bnb_config = None
27 torch_dtype = torch.float16
28 else:
29 from transformers import BitsAndBytesConfig
30 bnb_config = BitsAndBytesConfig(
31 load_in_4bit=True,
32 bnb_4bit_quant_type="nf4",
33 bnb_4bit_compute_dtype=torch.float16,
34 )
35 torch_dtype = None
36 # -------------------------------------------------------------------
37
38 try:
39 base_model = AutoModelForCausalLM.from_pretrained(
40 model_name,
41 quantization_config=bnb_config,
42 device_map="auto",
43 torch_dtype=torch_dtype
44 )
45 except Exception as e:
46 print(f"Error loading base model: {e}")
47 return
48
49 print(f"Loading adapter from {adapter_path}...")
50 try:
51 model = PeftModel.from_pretrained(base_model, adapter_path)
52 except Exception as e:
53 print(f"Error loading adapter (ensure training finished): {e}")
54 print("Falling back to base model only for demonstration...")
55 model = base_model
56
57 print("\n--- Qwen3 14B Inference (Type 'quit' to exit) ---")
58
59 messages = []
60
61 while True:
62 user_input = input("User: ")
63 if user_input.lower() in ["quit", "exit"]:
64 break
65
66 messages.append({"role": "user", "content": user_input})
67
68 text = tokenizer.apply_chat_template(
69 messages,
70 tokenize=False,
71 add_generation_prompt=True
72 )
73
74 model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
75
76 generated_ids = model.generate(
77 **model_inputs,
78 max_new_tokens=1024,
79 do_sample=True,
80 temperature=0.7
81 )
82
83 input_ids_length = model_inputs.input_ids.shape[1]
84
85 generated_ids = [
86 output_ids[input_ids_length:] for output_ids in generated_ids
87 ]
88
89 response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
90
91 print(f"Assistant: {response}")
92 messages.append({"role": "assistant", "content": response})
93
94if __name__ == "__main__":
95 main()