A fine-tuned LLaMA 3.2B model on private Indonesian legal Q&A dataset, specifically tailored for tax law cases. This model is optimized to extract relevant legal context and generate structured justifications using Indonesian regulatory references.
This model builds upon the base
unsloth/Llama-3.2-3B-Instruct, and is fine-tuned to handle
Indonesian legal consultation-style questions and generate:
-
Supports questions like "Apa itu PPh Pasal 26 dan bagaimana pengenaan terhadap wajib pajak luar negeri?"
-
Need to input context in format of array of object, Example: [{'full_text': 'Pajak penghasilan yang terutang atas penghasilan yang diterima atau diperoleh Wajib Pajak luar negeri dari sumber penghasilan di Indonesia, dipotong oleh Pemotong Pajak, kecuali untuk penghasilan sebagaimana dimaksud dalam Pasal 24.', 'name': 'Pasal 26 Undang-Undang Nomor 7 Tahun 1983 tentang Pajak Penghasilan'}, {'full_text': 'Dalam Undang-undang ini, yang dimaksud dengan: Wajib Pajak adalah orang pribadi atau badan yang memiliki kewajiban untuk membayar pajak.', 'name': 'Pasal 1 Undang-Undang Nomor 7 Tahun 1983 tentang Pajak Penghasilan'}, {'full_text': 'Penghasilan yang diterima atau diperoleh Wajib Pajak dari sumber penghasilan di Indonesia, baik dari dalam maupun dari luar negeri, merupakan objek pajak.', 'name': 'Pasal 2 Undang-Undang Nomor 7 Tahun 1983 tentang Pajak Penghasilan'}]
-
Returns:
- Structured answer
- Legal justifications in a JSON-like array
-
Model type: Causal LM
-
Language(s): Indonesian (id)
-
Finetuned from model: unsloth/Llama-3.2-3B-Instruct
-
License: Apache 2.0
1pip install transformers accelerate torch
2
3from transformers import AutoModelForCausalLM, AutoTokenizer
4model = AutoModelForCausalLM.from_pretrained("avisena/llama3.2-3b-enforcea")
5tokenizer = AutoTokenizer.from_pretrained("avisena/llama3.2-3b-enforcea")
6
7from transformers import LogitsProcessor
8import torch
9
10class EOSBiasProcessor(LogitsProcessor):
11 def __init__(self, eos_token_id, bias=4.32):
12 self.eos_token_id = eos_token_id
13 self.bias = bias
14
15 def __call__(self, input_ids, scores):
16 scores[:, self.eos_token_id] += self.bias
17 return scores
18
19def generate_response(question, context, max_new_tokens=2048):
20 eos_bias_processor = EOSBiasProcessor(tokenizer.convert_tokens_to_ids("<|eot_id|>"), bias=5.7)
21
22 # Prepare prompt
23 prompt = f"""### Question:\n{question}\n\n### Context:\n{context}"""
24 inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
25
26 with torch.no_grad():
27 output = model.generate(
28 **inputs,
29 max_new_tokens=max_new_tokens,
30 do_sample=True,
31 top_k=50,
32 top_p=0.65,
33 temperature=0.2,
34 repetition_penalty=0.86,
35 logits_processor=[eos_bias_processor],
36 eos_token_id=tokenizer.convert_tokens_to_ids("<|eot_id|>"),
37 )
38 return (tokenizer.decode(output[0], skip_special_tokens=True), context)
39
40question = "Apa itu Permanent Establishment (BUT) dan bagaimana pajaknya?"
41context = [
42 {
43 "full_text": "Bentuk Usaha Tetap adalah bentuk usaha yang dipergunakan oleh orang pribadi yang tidak bertempat tinggal di Indonesia, orang pribadi yang berada di Indonesia tidak lebih dari 183 (seratus delapan puluh tiga) hari dalam jangka waktu 12 (dua belas) bulan, dan badan yang tidak didirikan dan tidak bertempat kedudukan di Indonesia untuk menjalankan usaha atau melakukan kegiatan di Indonesia, yang dapat berupa: tempat kedudukan manajemen; cabang perusahaan; kantor perwakilan; gedung kantor; pabrik; bengkel; gudang; ruang untuk promosi dan penjualan; pertambangan dan penggalian sumber alam; wilayah kerja pertambangan minyak dan gas bumi; perikanan, peternakan, pertanian, perkebunan, atau kehutanan; proyek konstruksi, instalasi, atau proyek perakitan; pemberian jasa dalam bentuk apa pun oleh pegawai atau orang lain, sepanjang dilakukan lebih dari 60 (enam puluh) hari dalam jangka waktu 12 (dua belas) bulan; orang atau badan yang bertindak sebagai agen yang kedudukannya tidak bebas; atau agen atau pegawai dari perusahaan asuransi luar negeri yang tidak didirikan dan tidak bertempat kedudukan di Indonesia yang menerima premi atau menanggung risiko di Indonesia.",
44 "name": "Pasal 2 ayat (5) Undang-Undang Nomor 36 Tahun 2008 tentang Pajak Penghasilan"
45 },
46 {
47 "full_text": "Penghasilan yang diterima atau diperoleh bentuk usaha tetap dari menjalankan usaha atau melakukan kegiatan di Indonesia atau dari harta yang dimiliki atau dikuasai, dikenai pajak yang bersifat final atau tidak final sebagaimana halnya pajak yang dikenakan terhadap wajib pajak dalam negeri.",
48 "name": "Pasal 26 ayat (4) Undang-Undang Nomor 36 Tahun 2008 tentang Pajak Penghasilan"
49 }
50]
51
52response = generate_response(question, context)