1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
3from peft import PeftModel
4
5# Configuration
6base_model_name = "unsloth/qwen3-14b-unsloth-bnb-4bit"
7lora_adapter = "serhanayberkkilic/qwen3-14b-physiotherapy-lora"
8
9# 4-bit quantization
10bnb_config = BitsAndBytesConfig(
11 load_in_4bit=True,
12 bnb_4bit_quant_type="nf4",
13 bnb_4bit_compute_dtype=torch.bfloat16,
14 bnb_4bit_use_double_quant=True,
15)
16
17# Load tokenizer
18tokenizer = AutoTokenizer.from_pretrained(lora_adapter, trust_remote_code=True)
19
20# Load base model
21base_model = AutoModelForCausalLM.from_pretrained(
22 base_model_name,
23 quantization_config=bnb_config,
24 device_map="auto",
25 trust_remote_code=True,
26)
27
28# Load LoRA adapter
29model = PeftModel.from_pretrained(base_model, lora_adapter)
30model.eval()
31
32# Generate response
33def generate(question: str, max_tokens: int = 512):
34 messages = [{"role": "user", "content": question}]
35 text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
36 inputs = tokenizer(text, return_tensors="pt").to(model.device)
37
38 with torch.no_grad():
39 outputs = model.generate(
40 **inputs,
41 max_new_tokens=max_tokens,
42 temperature=0.7,
43 top_p=0.9,
44 do_sample=True,
45 )
46
47 response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
48 return response
49
50# Example usage
51question = "What are the evidence-based treatments for chronic low back pain?"
52answer = generate(question)
53print(answer)
1@misc{kilic2024physiolora,
2 author = {Kilic, Serhan Ayberk},
3 title = {Qwen3-14B Physiotherapy Evidence-Based QA LoRA},
4 year = {2024},
5 publisher = {HuggingFace},
6 url = {https://huggingface.co/serhanayberkkilic/qwen3-14b-physiotherapy-lora}
7}
This model is released under the
Apache 2.0 License. See
LICENSE for more details.