ilyassh commited on
Commit
94e8bd7
·
verified ·
1 Parent(s): 82972eb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -26
app.py CHANGED
@@ -38,7 +38,7 @@ possible_personalities = [
38
  {"description": "sarcastic and witty", "hot_headed": False},
39
  {"description": "arrogant and dismissive", "hot_headed": True}
40
  ]
41
-
42
  anger_level_descriptions = {
43
  0: "calm",
44
  1: "slightly annoyed",
@@ -48,6 +48,7 @@ anger_level_descriptions = {
48
  5: "very angry",
49
  6: "furious"
50
  }
 
51
 
52
  def get_anger_description(anger_level):
53
  if anger_level <= 1:
@@ -149,14 +150,18 @@ def initialize_game():
149
  }
150
  suspects[game_state["murderer"]] = murderer
151
  for suspect in suspects.values():
152
- others_in_same_location = [s["name"] for s in suspects.values()
153
- if s["alibi_location"] == suspect["alibi_location"] and s["name"] != suspect["name"]]
154
- suspect["alibi_with"] = others_in_same_location
 
 
155
  for suspect in suspects.values():
156
- other_suspects = [s["name"] for s in suspects.values() if s["name"] != suspect["name"]]
157
  for other in other_suspects:
158
- suspect["relationships"][other] = random.choice(relationships)
159
- suspect["suspects"] = random.choice([s for s in other_suspects if s not in suspect["alibi_with"]])
 
 
160
  suspect["backstory"] = generate_backstory(suspect)
161
  suspect["knowledge"]["others_locations"] = generate_others_locations_knowledge(suspect)
162
  for suspect in suspects.values():
@@ -183,22 +188,22 @@ def generate_knowledge(suspect):
183
  def generate_others_locations_knowledge(suspect):
184
  knowledge = {}
185
  for other in suspects.values():
186
- if other["name"] == suspect["name"]:
187
  continue
188
- elif other["name"] == game_state["murderer"]:
189
- knowledge[other["name"]] = "You know that they were not in your location."
190
  else:
191
  chance = random.random()
192
  if chance < 0.5:
193
- knowledge[other["name"]] = f"was in the {other['alibi_location']}."
194
  elif chance < 0.75:
195
- knowledge[other["name"]] = "you are not sure where they were."
196
  else:
197
- knowledge[other["name"]] = "you have no idea where they were."
198
  return knowledge
199
 
200
  def analyze_tone(player_input):
201
- accusatory_words = ["did you", "murderer", "kill", "guilty", "crime", "weapon", "suspect"]
202
  if any(word in player_input.lower() for word in accusatory_words):
203
  return "accusatory"
204
  else:
@@ -206,10 +211,10 @@ def analyze_tone(player_input):
206
 
207
  def get_ai_response(suspect_name, player_input):
208
  suspect = suspects[suspect_name]
209
- game_state["turns"] += 1
210
- game_state["player_questions"].append(player_input)
211
  tone = analyze_tone(player_input)
212
- if "accuse" in player_input.lower() or any(word in player_input.lower() for word in ["murderer", "kill", "guilty"]):
213
  suspect["trust_level"] -= 1
214
  else:
215
  suspect["trust_level"] += 1
@@ -222,13 +227,13 @@ def get_ai_response(suspect_name, player_input):
222
  if suspect["anger_level"] > 6:
223
  suspect["anger_level"] = 6
224
  if suspect["anger_level"] >= 3 and suspect["hot_headed"]:
225
- suspect["personality"] = "agitated and defensive"
226
  personality = suspect["personality"]
227
  knowledge = suspect["knowledge"]["self"]
228
  others_knowledge = suspect["knowledge"]["others_locations"]
229
  anger_description = get_anger_description(suspect["anger_level"])
230
- trust_description = get_trust_description(suspect["trust_level"])
231
- previous_questions = " ".join(game_state["player_questions"][-3:])
232
  system_prompt = f"You are {suspect_name}, who is {personality}. {knowledge}"
233
  for other_name, info in others_knowledge.items():
234
  system_prompt += f" You know that {other_name} {info}"
@@ -246,13 +251,13 @@ def get_ai_response(suspect_name, player_input):
246
  return response.strip()
247
 
248
  def get_group_response(suspect_names_list, player_input):
249
- responses = []
250
  for suspect_name in suspect_names_list:
251
  response = get_ai_response(suspect_name, player_input)
252
  responses.append(f"**{suspect_name}:** {response.strip()}")
253
  return "\n\n".join(responses)
254
 
255
- def process_input(player_input, selected_suspects):
256
  if game_state["is_game_over"]:
257
  return "The game is over. Please restart to play again.", game_state["history"]
258
  if game_state["accused"]:
@@ -297,7 +302,7 @@ def process_input(player_input, selected_suspects):
297
  game_state["history"].append(("Group", ai_response))
298
  return ai_response, game_state["history"]
299
 
300
- def search_location(location):
301
  if location not in locations:
302
  return "That location does not exist."
303
  if location in game_state["searched_locations"]:
@@ -310,7 +315,7 @@ def search_location(location):
310
  else:
311
  return f"You search the {location} but find nothing of interest."
312
 
313
- def eavesdrop():
314
  if game_state["eavesdropped"]:
315
  return "You have already eavesdropped once."
316
  game_state["eavesdropped"] = True
@@ -334,7 +339,7 @@ def bluff(player_input):
334
  response = f"{suspect_name} seems unsettled by your claim and might reveal more information."
335
  return response
336
 
337
- def analyze_response():
338
  game_state["turns"] += 1
339
  success = random.choice([True, False])
340
  if success:
@@ -342,7 +347,7 @@ def analyze_response():
342
  else:
343
  return "You fail to detect any lies."
344
 
345
- def handle_accusation(player_input):
346
  suspect_guess = None
347
  weapon_guess = None
348
  location_guess = None
 
38
  {"description": "sarcastic and witty", "hot_headed": False},
39
  {"description": "arrogant and dismissive", "hot_headed": True}
40
  ]
41
+ '''
42
  anger_level_descriptions = {
43
  0: "calm",
44
  1: "slightly annoyed",
 
48
  5: "very angry",
49
  6: "furious"
50
  }
51
+ '''
52
 
53
  def get_anger_description(anger_level):
54
  if anger_level <= 1:
 
150
  }
151
  suspects[game_state["murderer"]] = murderer
152
  for suspect in suspects.values():
153
+ others_in_same_location = [
154
+ s["name"]
155
+ for s in suspects.values()
156
+ if s["alibi_location"] == suspect["alibi_location"] and s["name"] != suspect["name"]] #найти всех кто был в одной комнате
157
+ suspect["alibi_with"] = others_in_same_location #их алиби
158
  for suspect in suspects.values():
159
+ other_suspects = [s["name"] for s in suspects.values() if s["name"] != suspect["name"]] #подозреваемые ИИ
160
  for other in other_suspects:
161
+ suspect["relationships"][other] = random.choice(relationships) #отношения между ИИ
162
+ suspect["suspects"] = random.choice([
163
+ s for s in other_suspects
164
+ if s not in suspect["alibi_with"]]) #если были в одной локации, то ИИ не подозревает их
165
  suspect["backstory"] = generate_backstory(suspect)
166
  suspect["knowledge"]["others_locations"] = generate_others_locations_knowledge(suspect)
167
  for suspect in suspects.values():
 
188
  def generate_others_locations_knowledge(suspect):
189
  knowledge = {}
190
  for other in suspects.values():
191
+ if other["name"] == suspect["name"]: #не генерируй знания о себе
192
  continue
193
+ elif other["name"] == game_state["murderer"]:
194
+ knowledge[other["name"]] = "you have no idea where they were." #никто не знает где был убийца
195
  else:
196
  chance = random.random()
197
  if chance < 0.5:
198
+ knowledge[other["name"]] = f"was in the {other['alibi_location']}." #50 знает где был другой игрок
199
  elif chance < 0.75:
200
+ knowledge[other["name"]] = f"you are not sure where they were, but they might have been in the {random.choice(locations)}." #25 не уверен, говорит рандомную информацию
201
  else:
202
+ knowledge[other["name"]] = "you have no idea where they were." #25 не знает
203
  return knowledge
204
 
205
  def analyze_tone(player_input):
206
+ accusatory_words = ["did you", "murderer", "kill", "guilty", "crime", "weapon", "suspect"] #бэйсик тон детекшн, можно прикрутить сентимент анализ
207
  if any(word in player_input.lower() for word in accusatory_words):
208
  return "accusatory"
209
  else:
 
211
 
212
  def get_ai_response(suspect_name, player_input):
213
  suspect = suspects[suspect_name]
214
+ game_state["turns"] += 1 #пусть будет
215
+ game_state["player_questions"].append(player_input)
216
  tone = analyze_tone(player_input)
217
+ if "accuse" in player_input.lower() or any(word in player_input.lower() for word in ["murderer", "kill", "guilty"]): #бейсик тон детекшн
218
  suspect["trust_level"] -= 1
219
  else:
220
  suspect["trust_level"] += 1
 
227
  if suspect["anger_level"] > 6:
228
  suspect["anger_level"] = 6
229
  if suspect["anger_level"] >= 3 and suspect["hot_headed"]:
230
+ suspect["personality"] = "agitated and defensive" #меняем персоналити изза того что чел агрессивный
231
  personality = suspect["personality"]
232
  knowledge = suspect["knowledge"]["self"]
233
  others_knowledge = suspect["knowledge"]["others_locations"]
234
  anger_description = get_anger_description(suspect["anger_level"])
235
+ trust_description = get_trust_description(suspect["trust_level"]) #достаём всю инфу
236
+ previous_questions = " ".join(game_state["player_questions"][-3:]) #контекст
237
  system_prompt = f"You are {suspect_name}, who is {personality}. {knowledge}"
238
  for other_name, info in others_knowledge.items():
239
  system_prompt += f" You know that {other_name} {info}"
 
251
  return response.strip()
252
 
253
  def get_group_response(suspect_names_list, player_input):
254
+ responses = [] #тут тоже можно что-то прикрутить, например ИИ начинают разговаривать между собой
255
  for suspect_name in suspect_names_list:
256
  response = get_ai_response(suspect_name, player_input)
257
  responses.append(f"**{suspect_name}:** {response.strip()}")
258
  return "\n\n".join(responses)
259
 
260
+ def process_input(player_input, selected_suspects): #парсим инпуты
261
  if game_state["is_game_over"]:
262
  return "The game is over. Please restart to play again.", game_state["history"]
263
  if game_state["accused"]:
 
302
  game_state["history"].append(("Group", ai_response))
303
  return ai_response, game_state["history"]
304
 
305
+ def search_location(location): #тут 100% можно что-то докрутить, очень базовый функционал
306
  if location not in locations:
307
  return "That location does not exist."
308
  if location in game_state["searched_locations"]:
 
315
  else:
316
  return f"You search the {location} but find nothing of interest."
317
 
318
+ def eavesdrop(): #можно добавить подслушивание ллм
319
  if game_state["eavesdropped"]:
320
  return "You have already eavesdropped once."
321
  game_state["eavesdropped"] = True
 
339
  response = f"{suspect_name} seems unsettled by your claim and might reveal more information."
340
  return response
341
 
342
+ def analyze_response(): #очевидно можно как-то сравнить ответ с инфой в словаре, но я не успел
343
  game_state["turns"] += 1
344
  success = random.choice([True, False])
345
  if success:
 
347
  else:
348
  return "You fail to detect any lies."
349
 
350
+ def handle_accusation(player_input): #парсим ответ детектива
351
  suspect_guess = None
352
  weapon_guess = None
353
  location_guess = None