Views
No views yet
1from llm_rs import AutoModel, GenerationConfig as GConfig
2from transformers import AutoTokenizer, GenerationConfig
3
4MODEL_NAME = "evilfreelancer/ruGPT-3.5-13B-ggml"
5DEFAULT_MESSAGE_TEMPLATE = "<s>{role}\n{content}</s>\n"
6DEFAULT_SYSTEM_PROMPT = "Ты — ruGPT-3.5, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им."
7
8class Conversation:
9 def __init__(
10 self,
11 message_template=DEFAULT_MESSAGE_TEMPLATE,
12 system_prompt=DEFAULT_SYSTEM_PROMPT,
13 start_token_id=2,
14 bot_token_id=46787
15 ):
16 self.message_template = message_template
17 self.start_token_id = start_token_id
18 self.bot_token_id = bot_token_id
19 self.messages = [{
20 "role": "system",
21 "content": system_prompt
22 }]
23
24 def get_start_token_id(self):
25 return self.start_token_id
26
27 def get_bot_token_id(self):
28 return self.bot_token_id
29
30 def add_user_message(self, message):
31 self.messages.append({
32 "role": "user",
33 "content": message
34 })
35
36 def add_bot_message(self, message):
37 self.messages.append({
38 "role": "bot",
39 "content": message
40 })
41
42 def get_prompt(self, tokenizer):
43 final_text = ""
44 for message in self.messages:
45 message_text = self.message_template.format(**message)
46 final_text += message_text
47 final_text += tokenizer.decode([self.start_token_id, self.bot_token_id])
48 return final_text.strip()
49
50
51def generate(model, tokenizer, prompt, generation_config):
52 data = tokenizer(prompt, return_tensors="pt")
53 output = model.generate(
54 prompt=prompt,
55 generation_config=generation_config
56 ).text
57 # print("output", output)
58 output_ids = tokenizer(output, return_tensors="pt")['input_ids'][0]
59 # print("output_ids", output_ids)
60 # output_ids = output_ids[len(data["input_ids"][0]):]
61 # print("output_ids", output_ids)
62 output = tokenizer.decode(output_ids, skip_special_tokens=True)
63 # print("output_ids", output)
64 return output.strip()
65
66# Load base model
67model = AutoModel.from_pretrained(
68 MODEL_NAME,
69 model_file="ruGPT-3.5-13B-lora-q4_0.bin",
70)
71
72# Init basic tokenizer
73tokenizer = AutoTokenizer.from_pretrained('ai-forever/ruGPT-3.5-13B', use_fast=False)
74generation_config = GenerationConfig.from_pretrained('ai-forever/ruGPT-3.5-13B')
75
76# Instantiate generator config
77g_config = GConfig()
78g_config.top_p = generation_config['top_p']
79g_config.top_k = generation_config['top_k']
80g_config.repetition_penalty = generation_config['repetition_penalty']
81g_config.temperature = generation_config['temperature']
82g_config.max_new_tokens = 200
83
84# Start conversation
85conversation = Conversation()
86while True:
87 user_message = input("User: ")
88
89 if user_message.strip() == "/reset":
90 conversation = Conversation()
91 print("History reset completed!")
92 continue
93
94 if user_message.strip() == "":
95 continue
96
97 conversation.add_user_message(user_message)
98 prompt = conversation.get_prompt(tokenizer)
99 output = generate(
100 model=model,
101 tokenizer=tokenizer,
102 prompt=prompt,
103 generation_config=g_config
104 )
105 conversation.add_bot_message(output)
106 print("ruGPT-3.5:", output)
107 print()
108 print("==============================")
109 print()1User: Привет! Почему трава зелёная?
2ruGPT-3.5: Трава зелёная благодаря хлорофиллу - пигменту растений, который поглощает световые волны определенной длины и преобразует их в энергию химических связей. Хлорофилл также обеспечивает растения питательными веществами из почвы через фотосинтез.1User: Придумай стишок про нейросети.
2ruGPT-3.5: Нейросеть – это чудо науки,
3Она способна решать любые задачи.
4И если ты хочешь стать программистом,
5То лучше всего изучать нейронные сети.1User: Высота самой высокой горы на Земле?
2ruGPT-3.5: Самая высокая гора на Земле находится в Гималаях и называется Эверест (8848 метров).1User: Сколько максимум лет может прожить галопогосская черепаха?
2ruGPT-3.5: Галопогосские черепахи могут жить до 100 лет и более. Они являются одними из самых долгоживущих животных на планете.bitsandbytes quantization config was used during training: