Views
No views yet
1from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
2import torch
3
4def parse_llama_chat(
5 messages,
6 function_call = None,
7 default_system = 'Anda adalah pembantu AI yang berguna dan mampu jawab segala soalan yang diberikan.'
8):
9
10 if messages[0]['role'] != 'system':
11 system = default_system
12 start_index = 0
13 else:
14 system = messages[0]['content']
15 start_index = 1
16
17 user_query = messages[-1]['content']
18
19 users, assistants = [], []
20 for q in messages[start_index:-1]:
21 if q['role'] == 'user':
22 users.append(q['content'])
23 elif q['role'] == 'assistant':
24 assistants.append(q['content'])
25
26 texts = [f'<s>[INST] <<SYS>>\n{system}\n<</SYS>>\n\n']
27 if function_call:
28 fs = []
29 for f in function_call:
30 f = json.dumps(f, indent=4)
31 fs.append(f)
32 fs = '\n\n'.join(fs)
33 texts.append(f'\n[FUNCTIONCALL]\n{fs}\n')
34 for u, a in zip(users, assistants):
35 texts.append(f'{u.strip()} [/INST] {a.strip()} </s><s>[INST] ')
36 texts.append(f'{user_query.strip()} [/INST]')
37 prompt = ''.join(texts).strip()
38 return prompt
39
40TORCH_DTYPE = 'bfloat16'
41nf4_config = BitsAndBytesConfig(
42 load_in_4bit=True,
43 bnb_4bit_quant_type='nf4',
44 bnb_4bit_use_double_quant=True,
45 bnb_4bit_compute_dtype=getattr(torch, TORCH_DTYPE)
46)
47
48tokenizer = AutoTokenizer.from_pretrained('mesolitica/malaysian-tinyllama-1.1b-16k-instructions')
49model = AutoModelForCausalLM.from_pretrained(
50 'mesolitica/malaysian-tinyllama-1.1b-16k-instructions',
51 use_flash_attention_2 = True,
52 quantization_config = nf4_config
53)
54
55messages = [
56 {'role': 'system', 'content': 'awak adalah AI yang mampu jawab segala soalan'},
57 {'role': 'user', 'content': 'kwsp tu apa'}
58]
59prompt = parse_llama_chat(messages)
60inputs = tokenizer([prompt], return_tensors='pt', add_special_tokens=False).to('cuda')
61generate_kwargs = dict(
62 inputs,
63 max_new_tokens=1024,
64 top_p=0.95,
65 top_k=50,
66 temperature=0.9,
67 do_sample=True,
68 num_beams=1,
69)
70r = model.generate(**generate_kwargs)
71print(tokenizer.decode(r[0]))<s> [INST] <<SYS>>
awak adalah AI yang mampu jawab segala soalan
<</SYS>>
kwsp tu apa [/INST] KWSP (Kumpulan Wang Simpanan Pekerja) merupakan sistem persaraan yang disediakan oleh kerajaan Malaysia untuk memberikan simpanan dan kebajikan kepada pekerja dan pekerja yang berumur 55 tahun ke atas. KWSP adalah singkatan bagi "Kumpulan Wang Simpanan Pekerja" dan ia merupakan salah satu dana persaraan yang popular di Malaysia. </s>