from transformers import AutoTokenizer, AutoModelForCausalLM, LogitsProcessorfrom unsloth import FastLanguageModelimport torchimport refrom IPython.display import Markdown, display # Load model and tokenizer (no Unsloth)model_path = "avisena/legalqa-llama3-1b-klinik-hukumonline-16bit"tokenizer = AutoTokenizer.from_pretrained(model_path)# Ensure the model is loaded to the correct device as wellmodel, tokenizer = FastLanguageModel.from_pretrained( model_name = model_path, # Load from the saved path max_seq_length = 2048, load_in_4bit = False, load_in_8bit = False, full_finetuning = False,) # Ensure the model is on the correct devicemodel.to("cuda") # EOS bias processor to encourage stoppingclass EOSBiasProcessor(LogitsProcessor): def __init__(self, eos_token_id, bias=6.54): self.eos_token_id = eos_token_id self.bias = bias def __call__(self, input_ids, scores): scores[:, self.eos_token_id] += self.bias return scores # Sample questionquestion = "Kini banyak content creator yang nekat buat video di tengah jalan atau sekedar foto di tengah jalan hingga mengganggu lalu lintas dan membahayakan keselamatan pengguna jalan. Adakah hukumnya mereka yang buat video konten di jalan?" # Context from RAG systemcontext = [ { "full_text": "Setiap orang yang melakukan perbuatan yang mengakibatkan gangguan pada fungsi jalan, sebagaimana dimaksud dalam Pasal 28 ayat (1), dipidana dengan pidana penjara paling lama 1 (satu) tahun atau denda paling banyak Rp24.000.000,00 (dua puluh empat juta rupiah).", "name": "Pasal 63 ayat (6) Undang-Undang Nomor 22 Tahun 2009 tentang Lalu Lintas dan Angkutan Jalan" }, { "full_text": "Setiap orang dilarang melakukan perbuatan yang mengakibatkan kerusakan dan/atau gangguan fungsi jalan.", "name": "Pasal 28 ayat (1) Undang-Undang Nomor 22 Tahun 2009 tentang Lalu Lintas dan Angkutan Jalan" }, { "full_text": "Setiap orang dilarang melakukan perbuatan yang membahayakan keamanan, keselamatan, ketertiban, dan kelancaran lalu lintas dan angkutan jalan.", "name": "Pasal 115 huruf a Undang-Undang Nomor 22 Tahun 2009 tentang Lalu Lintas dan Angkutan Jalan" }, { "full_text": "Barang siapa dengan sengaja menimbulkan bahaya bagi lalu lintas umum di jalan, dipidana dengan pidana penjara paling lama satu tahun empat bulan atau pidana denda.", "name": "Pasal 274 Kitab Undang-Undang Hukum Pidana (KUHP)" }] # Prepare promptprompt = f"""### Question:\n{question}\n\n### Context:\n{context}""" #Reduce the bias value for longer outputeos_bias_processor = EOSBiasProcessor(tokenizer.convert_tokens_to_ids("<|eot_id|>"), bias=6.54) # Tokenizeinputs = tokenizer(prompt, return_tensors="pt")inputs = {k: v.to("cuda") for k, v in inputs.items()} # Generatewith torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=2200, do_sample=True, temperature=0.4, top_k=22, top_p=0.95, no_repeat_ngram_size=9, repetition_penalty=1.1, early_stopping=True, eos_token_id=tokenizer.convert_tokens_to_ids("<|eot_id|>"), logits_processor=[eos_bias_processor], ) # Decode and extract answerdecoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True)match = re.search(r"### Answer:\s*(.*)", decoded_output, re.DOTALL)answer = match.group(1).strip() if match else "❌ No answer found." # Show in Markdowndisplay(Markdown(f"### 🧾 Extracted Answer:\n\n{answer}"))