Starchik1 commited on
Commit
e974634
·
verified ·
1 Parent(s): e26a955

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -117
app.py CHANGED
@@ -1,144 +1,58 @@
1
- from huggingface_hub import InferenceClient
2
  import gradio as gr
3
 
4
- # Подключаем клиента для текстовой модели
5
- client = InferenceClient(
6
- "mistralai/Mistral-7B-Instruct-v0.3"
7
- )
8
 
9
- # Подключаем клиента для генерации изображений
10
- image_client = InferenceClient(
11
- "stabilityai/stable-diffusion-2"
12
- )
 
13
 
14
- # Форматируем текстовый запрос
15
- def format_prompt(message, history, genre):
16
- prompt = f"Ты — персонаж в текстовой игре, тебя зовут Рассказчик, взаимодействующий с игроком на русском языке. " \
17
- f"Ты находишься в жанре игры: {genre}. Каждый твой ответ должен продолжать сюжет игры, принимая во внимание прошлые действия игрока и текущую ситуацию. " \
18
- f"Твой стиль общения должен быть интересным и поддерживать атмосферу игры. Ты должен поддерживать динамичность сюжета и постоянно добавлять элементы интерактивности и новых вызовов. " \
19
- f"В начале игры игроку предоставляется информация о мире, его текущем положении и доступных действиях. Он может выбирать из предложенных вариантов или описывать свои действия свободно. " \
20
- f"Важно, чтобы ты адаптировал ответы в зависимости от решений игрока и развивал сюжет на основе их выбора. Каждый ответ должен быть логичным продолжением событий, с описанием последствий выбранных действий." \
21
- f"В жанре Horror нужно вызвать у игрока эффект зловещей долины, и иногда ломать четвёртую стену." \
22
- f"Стиль повествования меняется в зависимости от жанра"
23
-
24
  for user_prompt, bot_response in history:
25
  prompt += f"[INST] {user_prompt} [/INST]"
26
  prompt += f" {bot_response}</s> "
27
  prompt += f"[INST] {message} [/INST]"
28
  return prompt
29
 
30
- # Генерация текста
31
  def generate(
32
- prompt, history, system_prompt, genre, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
33
  ):
34
- temperature = float(temperature)
35
- if temperature < 1e-2:
36
- temperature = 1e-2
37
- top_p = float(top_p)
38
-
39
- generate_kwargs = dict(
40
- temperature=temperature,
41
- max_new_tokens=max_new_tokens,
42
- top_p=top_p,
43
- repetition_penalty=repetition_penalty,
44
- do_sample=True,
45
- seed=42,
46
- )
47
-
48
- formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history, genre)
49
- stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=True)
50
  output = ""
51
-
52
  for response in stream:
53
  output += response.token.text
54
  yield output
55
  return output
56
 
57
- # Генер��ция изображений
58
- def generate_image(description):
59
- image = image_client.text_to_image(description, width=512, height=512)
60
- return image.url
61
-
62
- # Дополнительные настройки для Gradio
63
  additional_inputs = [
64
- gr.Textbox(
65
- label="System Prompt",
66
- max_lines=1,
67
- interactive=True,
68
- visible=False # Скрыть поле ввода системного запроса
69
- ),
70
- gr.Radio(
71
- label="Game Genre",
72
- choices=["Investigation", "Fantasy", "Sci-Fi", "Horror", "Adventure", "Mystery"],
73
- value="Horror", # Жанр по умолчанию
74
- interactive=True,
75
- info="Select the genre of the game",
76
- visible=True # Отображение выбора жанра
77
- ),
78
- gr.Slider(
79
- label="Temperature",
80
- value=0.1,
81
- minimum=0.0,
82
- maximum=1.0,
83
- step=0.05,
84
- interactive=True,
85
- info="Higher values produce more diverse outputs",
86
- visible=False # Скрыть слайдер температуры
87
- ),
88
- gr.Slider(
89
- label="Max new tokens",
90
- value=1024,
91
- minimum=128,
92
- maximum=8192,
93
- step=64,
94
- interactive=True,
95
- info="The maximum numbers of new tokens",
96
- visible=False # Скрыть слайдер максимального числа токенов
97
- ),
98
- gr.Slider(
99
- label="Top-p (nucleus sampling)",
100
- value=0.90,
101
- minimum=0.0,
102
- maximum=1,
103
- step=0.05,
104
- interactive=True,
105
- info="Higher values sample more low-probability tokens",
106
- visible=False # Скрыть слайдер top-p
107
- ),
108
- gr.Slider(
109
- label="Repetition penalty",
110
- value=1.2,
111
- minimum=1.0,
112
- maximum=2.0,
113
- step=0.05,
114
- interactive=True,
115
- info="Penalize repeated tokens",
116
- visible=False # Скрыть слайдер штрафа за повторения
117
- ),
118
- gr.Textbox(
119
- label="Image Description",
120
- placeholder="Describe the scene or character you want to generate.",
121
- interactive=True
122
- )
123
  ]
124
 
125
- # Пример выбора
126
- examples = [["Подробнее"], ["Варианты"]]
 
 
 
127
 
128
- # Интерфейс Gradio
129
  gr.ChatInterface(
130
- fn=generate,
131
- chatbot=gr.Chatbot(show_label=False, show_share_button=True, show_copy_button=True, likeable=True, layout="panel"),
132
  additional_inputs=additional_inputs,
133
- title="theGame",
134
  examples=examples,
135
  concurrency_limit=20,
136
  ).launch(show_api=False)
137
-
138
- # Интерфейс для генерации картинок
139
- gr.Interface(
140
- fn=generate_image,
141
- inputs="text",
142
- outputs="image",
143
- title="Image Generator"
144
- ).launch()
 
1
+ from huggingface_hub import InferenceClient
2
  import gradio as gr
3
 
4
+ client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.3")
 
 
 
5
 
6
+ # Шаблоны промптов для каждого жанра
7
+ GENRE_PROMPTS = {
8
+ "Investigation": "Ты находишься в жанре игры Investigation...",
9
+ # Остальные жанры остаются неизменными
10
+ }
11
 
12
+ def format_prompt(message, history, genre, players):
13
+ genre_prompt = GENRE_PROMPTS.get(genre, "Жанр игры неизвестен.")
14
+ prompt = f"Ты — персонаж в текстовой игре, тебя зовут Рассказчик, взаимодействующий с игроками на русском языке. " \
15
+ f"{genre_prompt} Учитывай, что в игре участвуют несколько игроков: {', '.join(players)}. " \
16
+ f"Каждый твой ответ должен учитывать действия всех игроков, их взаимодействие и текущую ситуацию. " \
17
+ f"Добавляй элементы кооперации: совместное решение задач, голосование за действия и влияние выборов одного игрока на другого."
 
 
 
 
18
  for user_prompt, bot_response in history:
19
  prompt += f"[INST] {user_prompt} [/INST]"
20
  prompt += f" {bot_response}</s> "
21
  prompt += f"[INST] {message} [/INST]"
22
  return prompt
23
 
 
24
  def generate(
25
+ prompt, history, system_prompt, genre, players, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0,
26
  ):
27
+ formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history, genre, players)
28
+ stream = client.text_generation(formatted_prompt, stream=True, details=True, return_full_text=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  output = ""
 
30
  for response in stream:
31
  output += response.token.text
32
  yield output
33
  return output
34
 
 
 
 
 
 
 
35
  additional_inputs = [
36
+ gr.Textbox(label="System Prompt", max_lines=1, interactive=True, visible=False),
37
+ gr.Radio(label="Game Genre", choices=list(GENRE_PROMPTS.keys()), value="Horror", interactive=True),
38
+ gr.Textbox(label="Players (comma-separated)", interactive=True, placeholder="Player1, Player2", visible=True),
39
+ gr.Slider(label="Temperature", value=0.1, minimum=0.0, maximum=1.0, step=0.05, interactive=True, visible=False),
40
+ gr.Slider(label="Max new tokens", value=1024, minimum=128, maximum=8192, step=64, interactive=True, visible=False),
41
+ gr.Slider(label="Top-p (nucleus sampling)", value=0.90, minimum=0.0, maximum=1, step=0.05, interactive=True, visible=False),
42
+ gr.Slider(label="Repetition penalty", value=1.2, minimum=1.0, maximum=2.0, step=0.05, interactive=True, visible=False),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  ]
44
 
45
+ examples = [["Подробнее"], ["Обстановка"]]
46
+
47
+ def wrapped_generate(prompt, history, system_prompt, genre, temperature, max_new_tokens, top_p, repetition_penalty, players):
48
+ player_list = [p.strip() for p in players.split(",") if p.strip()]
49
+ return generate(prompt, history, system_prompt, genre, player_list, temperature, max_new_tokens, top_p, repetition_penalty)
50
 
 
51
  gr.ChatInterface(
52
+ fn=wrapped_generate,
53
+ chatbot=gr.Chatbot(show_label=False),
54
  additional_inputs=additional_inputs,
55
+ title="theGame with Co-op",
56
  examples=examples,
57
  concurrency_limit=20,
58
  ).launch(show_api=False)