Views
No views yet
pip install torch transformers accelerate unsloth1from transformers import AutoTokenizer, AutoModelForCausalLM, LogitsProcessor
2from unsloth import FastLanguageModel
3import torch
4import re
5from IPython.display import Markdown, display
6
7# Load model and tokenizer (no Unsloth)
8model_path = "avisena/legalqa-llama3-1b-klinik-hukumonline-16bit"
9tokenizer = AutoTokenizer.from_pretrained(model_path)
10# Ensure the model is loaded to the correct device as well
11model, tokenizer = FastLanguageModel.from_pretrained(
12 model_name = model_path, # Load from the saved path
13 max_seq_length = 2048,
14 load_in_4bit = False,
15 load_in_8bit = False,
16 full_finetuning = False,
17)
18
19# Ensure the model is on the correct device
20model.to("cuda")
21
22# EOS bias processor to encourage stopping
23class EOSBiasProcessor(LogitsProcessor):
24 def __init__(self, eos_token_id, bias=6.54):
25 self.eos_token_id = eos_token_id
26 self.bias = bias
27
28 def __call__(self, input_ids, scores):
29 scores[:, self.eos_token_id] += self.bias
30 return scores
31
32
33# Sample question
34question = "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?"
35
36# Context from RAG system
37context = [
38 {
39 "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).",
40 "name": "Pasal 63 ayat (6) Undang-Undang Nomor 22 Tahun 2009 tentang Lalu Lintas dan Angkutan Jalan"
41 },
42 {
43 "full_text": "Setiap orang dilarang melakukan perbuatan yang mengakibatkan kerusakan dan/atau gangguan fungsi jalan.",
44 "name": "Pasal 28 ayat (1) Undang-Undang Nomor 22 Tahun 2009 tentang Lalu Lintas dan Angkutan Jalan"
45 },
46 {
47 "full_text": "Setiap orang dilarang melakukan perbuatan yang membahayakan keamanan, keselamatan, ketertiban, dan kelancaran lalu lintas dan angkutan jalan.",
48 "name": "Pasal 115 huruf a Undang-Undang Nomor 22 Tahun 2009 tentang Lalu Lintas dan Angkutan Jalan"
49 },
50 {
51 "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.",
52 "name": "Pasal 274 Kitab Undang-Undang Hukum Pidana (KUHP)"
53 }
54]
55
56# Prepare prompt
57prompt = f"""### Question:\n{question}\n\n### Context:\n{context}"""
58
59#Reduce the bias value for longer output
60eos_bias_processor = EOSBiasProcessor(tokenizer.convert_tokens_to_ids("<|eot_id|>"), bias=6.54)
61
62# Tokenize
63inputs = tokenizer(prompt, return_tensors="pt")
64inputs = {k: v.to("cuda") for k, v in inputs.items()}
65
66# Generate
67with torch.no_grad():
68 outputs = model.generate(
69 **inputs,
70 max_new_tokens=2200,
71 do_sample=True,
72 temperature=0.4,
73 top_k=22,
74 top_p=0.95,
75 no_repeat_ngram_size=9,
76 repetition_penalty=1.1,
77 early_stopping=True,
78 eos_token_id=tokenizer.convert_tokens_to_ids("<|eot_id|>"),
79 logits_processor=[eos_bias_processor],
80 )
81
82# Decode and extract answer
83decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
84match = re.search(r"### Answer:\s*(.*)", decoded_output, re.DOTALL)
85answer = match.group(1).strip() if match else "❌ No answer found."
86
87# Show in Markdown
88display(Markdown(f"### 🧾 Extracted Answer:\n\n{answer}"))