Starchik1 commited on
Commit
fb141e5
·
verified ·
1 Parent(s): cd198d1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -13
app.py CHANGED
@@ -3,28 +3,40 @@ import gradio as gr
3
 
4
  client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.3")
5
 
6
- # Хранение состояния игры
 
 
 
 
 
 
 
 
 
 
 
7
  game_state = {
8
- "players": {},
9
- "story_progress": "Начало игры..."
10
  }
11
 
12
  def format_prompt(message, history, genre, player_id):
13
- # Получаем промпт для выбранного жанра
14
  genre_prompt = GENRE_PROMPTS.get(genre, "Жанр игры неизвестен.")
15
- prompt = f"Игрок {player_id} в жанре {genre}. {genre_prompt} История: {game_state['story_progress']}."
16
  for user_prompt, bot_response in history:
17
  prompt += f"[INST] {user_prompt} [/INST] {bot_response}</s> "
18
  prompt += f"[INST] {message} [/INST]"
19
  return prompt
20
 
21
  def generate(player_id, message, genre, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0):
 
22
  if player_id not in game_state["players"]:
23
- game_state["players"][player_id] = {"history": []}
24
-
25
  history = game_state["players"][player_id]["history"]
26
  formatted_prompt = format_prompt(message, history, genre, player_id)
27
-
28
  generate_kwargs = {
29
  "temperature": temperature,
30
  "max_new_tokens": max_new_tokens,
@@ -33,26 +45,27 @@ def generate(player_id, message, genre, temperature=0.9, max_new_tokens=256, top
33
  "do_sample": True,
34
  "seed": 42,
35
  }
36
-
37
  response = client.text_generation(formatted_prompt, **generate_kwargs)
38
  game_state["players"][player_id]["history"].append((message, response))
39
  game_state["story_progress"] += f"\n{response}"
40
-
41
  return response
42
 
43
  def gradio_interface():
 
44
  with gr.Blocks() as demo:
45
  player_id = gr.Textbox(label="Player ID", placeholder="Введите ваш уникальный идентификатор")
46
  genre = gr.Radio(label="Game Genre", choices=list(GENRE_PROMPTS.keys()), value="Horror")
47
  message = gr.Textbox(label="Ваше сообщение")
48
  output = gr.Textbox(label="Ответ игры")
49
-
50
  def play_game(player_id, message, genre):
51
  return generate(player_id, message, genre)
52
-
53
  submit = gr.Button("Отправить")
54
  submit.click(play_game, inputs=[player_id, message, genre], outputs=output)
55
-
56
  demo.launch()
57
 
58
  if __name__ == "__main__":
 
3
 
4
  client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.3")
5
 
6
+ # Шаблоны промптов для каждого жанра
7
+ GENRE_PROMPTS = {
8
+ "Investigation": "Ты находишься в жанре игры Investigation на мотив Sherlock Holmes. В игре игрок должен разгадывать сложные загадки, находить улики и разгадывать тайны.",
9
+ "Fantasy": "Ты находишься в жанре игры Fantasy на мотив Final Fantasy. Мир наполнен магией, эпическими сражениями и древними легендами.",
10
+ "Sci-Fi": "Ты находишься в жанре игры Sci-Fi на мотив Alien. Игрок исследует космос, сталкивается с высокими технологиями и инопланетными угрозами.",
11
+ "Horror": "Ты находишься в жанре игры Horror на мотив фильма Saw. Игрок должен пережить атмосферу ужаса, избегая смертельных ловушек.",
12
+ "Adventure": "Ты находишься в жанре игры Adventure на мотив Indiana Jones. Игрок участвует в захватывающих приключениях, полных загадок и опасностей.",
13
+ "Mystery": "Ты находишься в жанре игры Mystery, где игрок разгадывает мистические события и сталкивается с необъяснимым.",
14
+ "You": "Ты находишься в игре, которая выглядит как обычная игра, а на самом деле это психологический тест, но игрок не должен об этом догадываться. Должно быть 50 провокационных вопросов, по типу Проблема вагонетки. В конце игры должен быть составлен психологический портрет игрока. Игра должна морально давить, чтобы проявить все плохие качества игрока."
15
+ }
16
+
17
+ # Глобальное состояние игры
18
  game_state = {
19
+ "players": {}, # Данные каждого игрока
20
+ "story_progress": "Начало игры..." # Общая история
21
  }
22
 
23
  def format_prompt(message, history, genre, player_id):
24
+ """Форматирование промпта для генерации текста."""
25
  genre_prompt = GENRE_PROMPTS.get(genre, "Жанр игры неизвестен.")
26
+ prompt = f"Игрок {player_id} в жанре {genre}. {genre_prompt} История: {game_state['story_progress']}. "
27
  for user_prompt, bot_response in history:
28
  prompt += f"[INST] {user_prompt} [/INST] {bot_response}</s> "
29
  prompt += f"[INST] {message} [/INST]"
30
  return prompt
31
 
32
  def generate(player_id, message, genre, temperature=0.9, max_new_tokens=256, top_p=0.95, repetition_penalty=1.0):
33
+ """Генерация ответа для игрока."""
34
  if player_id not in game_state["players"]:
35
+ game_state["players"][player_id] = {"history": []} # Создать историю для нового игрока
36
+
37
  history = game_state["players"][player_id]["history"]
38
  formatted_prompt = format_prompt(message, history, genre, player_id)
39
+
40
  generate_kwargs = {
41
  "temperature": temperature,
42
  "max_new_tokens": max_new_tokens,
 
45
  "do_sample": True,
46
  "seed": 42,
47
  }
48
+
49
  response = client.text_generation(formatted_prompt, **generate_kwargs)
50
  game_state["players"][player_id]["history"].append((message, response))
51
  game_state["story_progress"] += f"\n{response}"
52
+
53
  return response
54
 
55
  def gradio_interface():
56
+ """Создание интерфейса Gradio для кооперативной игры."""
57
  with gr.Blocks() as demo:
58
  player_id = gr.Textbox(label="Player ID", placeholder="Введите ваш уникальный идентификатор")
59
  genre = gr.Radio(label="Game Genre", choices=list(GENRE_PROMPTS.keys()), value="Horror")
60
  message = gr.Textbox(label="Ваше сообщение")
61
  output = gr.Textbox(label="Ответ игры")
62
+
63
  def play_game(player_id, message, genre):
64
  return generate(player_id, message, genre)
65
+
66
  submit = gr.Button("Отправить")
67
  submit.click(play_game, inputs=[player_id, message, genre], outputs=output)
68
+
69
  demo.launch()
70
 
71
  if __name__ == "__main__":