PitterTMYT commited on
Commit
952b9c8
·
verified ·
1 Parent(s): 168745b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -53
app.py CHANGED
@@ -1,63 +1,54 @@
1
  import gradio as gr
2
- import torch, os
3
- from transformers import AutoTokenizer, AutoModelForCausalLM
4
- from huggingface_hub import login
5
-
6
- def init_model():
7
- global model, tokenizer
8
- hf_token = os.getenv("HF_TOKEN")
9
-
10
- if hf_token is None:
11
- raise ValueError("Hugging Face token is not set. Please set the HF_TOKEN environment variable.")
12
-
13
- login(hf_token, add_to_git_credential=True)
14
-
15
- tokenizer = AutoTokenizer.from_pretrained("IlyaGusev/saiga_gemma2_10b", use_auth_token=hf_token)
16
- model = AutoModelForCausalLM.from_pretrained(
17
- "IlyaGusev/saiga_gemma2_10b",
18
- use_auth_token=hf_token,
19
- torch_dtype=torch.float16, # Использование float16 для уменьшения потребления памяти
20
- low_cpu_mem_usage=True # Настройка для уменьшения использования памяти на CPU
21
- )
22
-
23
- device = torch.device("cpu") # Использование CPU
24
- model.to(device)
25
-
26
- def generate_response(prompt, max_length=100, temperature=0.7, top_p=0.85, repetition_penalty=1.1):
27
- try:
28
- input_ids = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
29
- attention_mask = torch.ones_like(input_ids).to(model.device)
30
-
31
- output = model.generate(
32
- input_ids,
33
- attention_mask=attention_mask,
34
- max_length=max_length,
35
- temperature=temperature,
36
- top_p=top_p,
37
- repetition_penalty=repetition_penalty,
38
- do_sample=True,
39
- num_return_sequences=1,
40
- pad_token_id=tokenizer.eos_token_id
41
- )
42
- response_text = tokenizer.decode(output[0], skip_special_tokens=True)
43
- return response_text
44
- except Exception as e:
45
- return f"Извините, произошла ошибка при генерации ответа: {str(e)}"
46
-
47
- init_model()
48
-
49
  iface = gr.Interface(
50
  fn=generate_response,
51
  inputs=[
52
- gr.Textbox(lines=2, placeholder="Введите ваш текст здесь..."),
53
- gr.Slider(20, 200, step=1, default=100, label="Максимальная длина"),
54
- gr.Slider(0.1, 1.0, step=0.1, default=0.7, label="Температу��а"),
55
- gr.Slider(0.1, 1.0, step=0.05, default=0.85, label="Top-p"),
56
- gr.Slider(1.0, 2.0, step=0.1, default=1.1, label="Штраф за повторение")
 
57
  ],
58
  outputs="text",
59
  title="LLM Model Demo",
60
- description="Введите текстовый запрос, чтобы сгенерировать ответ с помощью LLM модели."
61
  )
62
 
63
  if __name__ == "__main__":
 
1
  import gradio as gr
2
+ import llama_cpp_python as llama
3
+ import os
4
+
5
+ # Определение персонажей
6
+ characters = [
7
+ {"name": "Алекс",
8
+ "description": "Алекс - молодой и амбициозный приключенец, обладающий неутомимой энергией и жаждой новых открытий. Он всегда готов бросить вызов любым трудностям и стремится к познанию неизведанных мест.",
9
+ "traits": "смелый, энергичный, оптимистичный, решительный"},
10
+
11
+ {"name": "Майя",
12
+ "description": "Майя - мудрая и опытная волшебница, обладающая глубокими знаниями в магии и древних ритуалах. Она известна своим спокойствием, аналитическим умом и способностью находить решения в сложных ситуациях.",
13
+ "traits": "спокойная, вдумчивая, интуитивная, внимательная"},
14
+
15
+ {"name": "Виктор",
16
+ "description": "Виктор - бывший воин, который оставил боевые подвиги ради поиска внутреннего мира и гармонии. Его жизненный опыт и стремление к справедливости делают его надежным другом и наставником.",
17
+ "traits": "серьезный, рассудительный, справедливый, уравновешенный"}
18
+ ]
19
+
20
+ # Загрузка модели
21
+ model_path = "model-q4_K.gguf"
22
+ model = llama.load_model(model_path)
23
+
24
+ def generate_response(character_name, prompt, max_length=100, temperature=0.7, top_p=0.85, repetition_penalty=1.1):
25
+ # Поиск данных персонажа
26
+ character = next((c for c in characters if c["name"] == character_name), None)
27
+ if not character:
28
+ return "Персонаж не найден."
29
+
30
+ # Формирование текста запроса
31
+ prompt_text = (f"Ты - {character_name}, {character['description']}. Черты характера: {character['traits']}. "
32
+ f"В ответ на вопрос '{prompt}' {random.choice(['вдохновленно', 'с сомнением', 'с радостью', 'вдумчиво', 'с недоверием'])}. Пожалуйста, закончите ответ полностью.")
33
+
34
+ # Генерация ответа
35
+ response = model.generate(prompt_text, max_length=max_length, temperature=temperature, top_p=top_p, repetition_penalty=repetition_penalty)
36
+ return response
37
+
38
+ # Создание интерфейса Gradio
 
 
 
 
 
 
 
 
 
 
39
  iface = gr.Interface(
40
  fn=generate_response,
41
  inputs=[
42
+ gr.inputs.Dropdown([c["name"] for c in characters], label="Выберите персонажа"),
43
+ gr.inputs.Textbox(lines=2, placeholder="Введите ваш текст здесь..."),
44
+ gr.inputs.Slider(20, 200, step=1, default=100, label="Максимальная длина"),
45
+ gr.inputs.Slider(0.1, 1.0, step=0.1, default=0.7, label="Температура"),
46
+ gr.inputs.Slider(0.1, 1.0, step=0.05, default=0.85, label="Top-p"),
47
+ gr.inputs.Slider(1.0, 2.0, step=0.1, default=1.1, label="Штраф за повторение")
48
  ],
49
  outputs="text",
50
  title="LLM Model Demo",
51
+ description="Введите текстовый запрос, чтобы сгенерировать ответ с помощью модели, основываясь на выбранном персонаже."
52
  )
53
 
54
  if __name__ == "__main__":