import torchimport jsonfrom transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfigfrom peft import PeftModel MODEL_ID = "Qwen/Qwen2.5-1.5B-Instruct"ADAPTER_ID = "mahdi2020/qwen2.5-1.5B-ecommerce-lora-fine-tuned" # Configure 4-bit quantization for resource efficiencybnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16,) # Load Tokenizertokenizer = AutoTokenizer.from_pretrained(ADAPTER_ID) # Load Base Model + PEFT Adapterbase_model = AutoModelForCausalLM.from_pretrained( MODEL_ID, quantization_config=bnb_config, device_map="auto", trust_remote_code=True,)model = PeftModel.from_pretrained(base_model, ADAPTER_ID)model.eval() def get_action(user_message: str): prompt = ( f"<|im_start|>user\n{user_message}<|im_end|>\n" f"<|im_start|>assistant\n" ) inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): output_ids = model.generate( **inputs, max_new_tokens=128, do_sample=False, pad_token_id=tokenizer.eos_token_id, eos_token_id=tokenizer.convert_tokens_to_ids("<|im_end|>"), ) new_tokens = output_ids[0][inputs["input_ids"].shape[1]:] raw_output = tokenizer.decode(new_tokens, skip_special_tokens=True).strip() return json.loads(raw_output) # Example executionprint(get_action("I want to cancel my order #789456"))# Output:# {'intent': 'cancel_order', 'order_id': '789456'}