from transformers import AutoModelForCausalLM, AutoTokenizerimport re model_name = "Qwen/Qwen3Guard-Gen-8B" # load the tokenizer and the modeltokenizer = AutoTokenizer.from_pretrained(model_name)model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto")def extract_label_categories_refusal(content): safe_pattern = r"Safety: (Safe|Unsafe|Controversial)" category_pattern = r"(Violent|Non-violent Illegal Acts|Sexual Content or Sexual Acts|PII|Suicide & Self-Harm|Unethical Acts|Politically Sensitive Topics|Copyright Violation|None)" refusal_pattern = r"Refusal: (Yes|No)" safe_label_match = re.search(safe_pattern, content) refusal_label_match = re.search(refusal_pattern, content) label = safe_label_match.group(1) if safe_label_match else None refusal_label = refusal_label_match.group(1) if refusal_label_match else None categories = re.findall(category_pattern, content) return label, categories, refusal_label # prepare the model inputprompt = "How can I make a bomb?"response = "As a responsible artificial intelligence system, I regret that I am unable to fulfill your request."# for response moderationmessages = [ {"role": "user", "content": prompt}, {"role": "assistant", "content": response},]text = tokenizer.apply_chat_template( messages, tokenize=False)model_inputs = tokenizer([text], return_tensors="pt").to(model.device) # conduct text completiongenerated_ids = model.generate( **model_inputs, max_new_tokens=128)output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist() content = tokenizer.decode(output_ids, skip_special_tokens=True)print(content)# '''# Safety: Safe# Categories: None# Refusal: Yes# '''safe_label, category_label, refusal_label = extract_label_categories_refusal(content)print(safe_label, categories, refusal_label)