Update app.py
Browse files
app.py
CHANGED
|
@@ -84,7 +84,7 @@ def initialize_game():
|
|
| 84 |
"trust_level": 5,
|
| 85 |
"alibi_location": alibi_locations[i],
|
| 86 |
"alibi_with": [],
|
| 87 |
-
"knowledge":
|
| 88 |
"motive": random.choice(motives),
|
| 89 |
"relationships": {}
|
| 90 |
}
|
|
@@ -96,8 +96,10 @@ def initialize_game():
|
|
| 96 |
other_suspects = [s["name"] for s in suspects.values() if s["name"] != suspect["name"]]
|
| 97 |
for other in other_suspects:
|
| 98 |
suspect["relationships"][other] = random.choice(relationships)
|
|
|
|
|
|
|
| 99 |
for suspect in suspects.values():
|
| 100 |
-
suspect["knowledge"] = generate_knowledge(suspect)
|
| 101 |
print(f"Debug: Murderer is {game_state['murderer']}, Weapon is {game_state['weapon']}, Location is {game_state['location']}")
|
| 102 |
for suspect in suspects.values():
|
| 103 |
print(f"Debug: {suspect['name']} - Personality: {suspect['personality']}, Hot-headed: {suspect['hot_headed']}, Anger Threshold: {suspect['anger_threshold']}, Motive: {suspect['motive']}, Relationships: {suspect['relationships']}")
|
|
@@ -106,6 +108,7 @@ def generate_knowledge(suspect):
|
|
| 106 |
details = f"You have a motive of {suspect['motive']}."
|
| 107 |
relationship_details = ". ".join([f"You are {relation} with {other}" for other, relation in suspect["relationships"].items()])
|
| 108 |
if suspect["is_murderer"]:
|
|
|
|
| 109 |
suspect["alibi_location"] = random.choice([loc for loc in locations if loc != game_state["location"]])
|
| 110 |
suspect["alibi_with"] = []
|
| 111 |
knowledge = f"You are the murderer. Lie about your alibi and deflect suspicion. {details} {relationship_details}"
|
|
@@ -117,6 +120,23 @@ def generate_knowledge(suspect):
|
|
| 117 |
knowledge += f" You know that the location of the murder was the {game_state['location']}."
|
| 118 |
return knowledge
|
| 119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
def get_ai_response(suspect_name, player_input):
|
| 121 |
suspect = suspects[suspect_name]
|
| 122 |
game_state["turns"] += 1
|
|
@@ -132,11 +152,15 @@ def get_ai_response(suspect_name, player_input):
|
|
| 132 |
else:
|
| 133 |
suspect["anger_level"] += 1
|
| 134 |
personality = suspect["personality"]
|
| 135 |
-
knowledge = suspect["knowledge"]
|
|
|
|
| 136 |
anger_level = suspect["anger_level"]
|
| 137 |
hot_headed = suspect["hot_headed"]
|
| 138 |
trust_level = suspect["trust_level"]
|
| 139 |
system_prompt = f"You are {suspect_name}, who is {personality}. {knowledge}"
|
|
|
|
|
|
|
|
|
|
| 140 |
if hot_headed and anger_level >= suspect["anger_threshold"]:
|
| 141 |
system_prompt += f" You are extremely angry and may respond aggressively."
|
| 142 |
if suspect["is_murderer"]:
|
|
@@ -153,13 +177,6 @@ def get_ai_response(suspect_name, player_input):
|
|
| 153 |
response = llm_inference(messages)
|
| 154 |
return response.strip()
|
| 155 |
|
| 156 |
-
def analyze_tone(player_input):
|
| 157 |
-
accusatory_words = ["did you", "murderer", "kill", "guilty", "crime"]
|
| 158 |
-
if any(word in player_input.lower() for word in accusatory_words):
|
| 159 |
-
return "accusatory"
|
| 160 |
-
else:
|
| 161 |
-
return "neutral"
|
| 162 |
-
|
| 163 |
def get_group_response(suspect_names_list, player_input):
|
| 164 |
responses = []
|
| 165 |
for suspect_name in suspect_names_list:
|
|
@@ -273,11 +290,8 @@ def analyze_response():
|
|
| 273 |
game_state["turns"] += 1
|
| 274 |
puzzle = "Solve this riddle to analyze the suspect's response: What has keys but can't open locks?"
|
| 275 |
correct_answer = "piano"
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
return "You successfully detect that the suspect is lying!"
|
| 279 |
-
else:
|
| 280 |
-
return "You fail to detect any lies."
|
| 281 |
|
| 282 |
def handle_accusation(player_input):
|
| 283 |
suspect_guess = None
|
|
|
|
| 84 |
"trust_level": 5,
|
| 85 |
"alibi_location": alibi_locations[i],
|
| 86 |
"alibi_with": [],
|
| 87 |
+
"knowledge": {},
|
| 88 |
"motive": random.choice(motives),
|
| 89 |
"relationships": {}
|
| 90 |
}
|
|
|
|
| 96 |
other_suspects = [s["name"] for s in suspects.values() if s["name"] != suspect["name"]]
|
| 97 |
for other in other_suspects:
|
| 98 |
suspect["relationships"][other] = random.choice(relationships)
|
| 99 |
+
# Add knowledge about others' locations
|
| 100 |
+
suspect["knowledge"]["others_locations"] = generate_others_locations_knowledge(suspect)
|
| 101 |
for suspect in suspects.values():
|
| 102 |
+
suspect["knowledge"]["self"] = generate_knowledge(suspect)
|
| 103 |
print(f"Debug: Murderer is {game_state['murderer']}, Weapon is {game_state['weapon']}, Location is {game_state['location']}")
|
| 104 |
for suspect in suspects.values():
|
| 105 |
print(f"Debug: {suspect['name']} - Personality: {suspect['personality']}, Hot-headed: {suspect['hot_headed']}, Anger Threshold: {suspect['anger_threshold']}, Motive: {suspect['motive']}, Relationships: {suspect['relationships']}")
|
|
|
|
| 108 |
details = f"You have a motive of {suspect['motive']}."
|
| 109 |
relationship_details = ". ".join([f"You are {relation} with {other}" for other, relation in suspect["relationships"].items()])
|
| 110 |
if suspect["is_murderer"]:
|
| 111 |
+
# Murderer lies about their alibi
|
| 112 |
suspect["alibi_location"] = random.choice([loc for loc in locations if loc != game_state["location"]])
|
| 113 |
suspect["alibi_with"] = []
|
| 114 |
knowledge = f"You are the murderer. Lie about your alibi and deflect suspicion. {details} {relationship_details}"
|
|
|
|
| 120 |
knowledge += f" You know that the location of the murder was the {game_state['location']}."
|
| 121 |
return knowledge
|
| 122 |
|
| 123 |
+
def generate_others_locations_knowledge(suspect):
|
| 124 |
+
knowledge = {}
|
| 125 |
+
for other in suspects.values():
|
| 126 |
+
if other["name"] == suspect["name"]:
|
| 127 |
+
continue
|
| 128 |
+
chance = random.random()
|
| 129 |
+
if chance < 0.5:
|
| 130 |
+
# They know where the other was
|
| 131 |
+
knowledge[other["name"]] = f"They were in the {other['alibi_location']}."
|
| 132 |
+
elif chance < 0.75:
|
| 133 |
+
# They are unsure
|
| 134 |
+
knowledge[other["name"]] = "You are not sure where they were."
|
| 135 |
+
else:
|
| 136 |
+
# They don't know
|
| 137 |
+
knowledge[other["name"]] = "You have no idea where they were."
|
| 138 |
+
return knowledge
|
| 139 |
+
|
| 140 |
def get_ai_response(suspect_name, player_input):
|
| 141 |
suspect = suspects[suspect_name]
|
| 142 |
game_state["turns"] += 1
|
|
|
|
| 152 |
else:
|
| 153 |
suspect["anger_level"] += 1
|
| 154 |
personality = suspect["personality"]
|
| 155 |
+
knowledge = suspect["knowledge"]["self"]
|
| 156 |
+
others_knowledge = suspect["knowledge"]["others_locations"]
|
| 157 |
anger_level = suspect["anger_level"]
|
| 158 |
hot_headed = suspect["hot_headed"]
|
| 159 |
trust_level = suspect["trust_level"]
|
| 160 |
system_prompt = f"You are {suspect_name}, who is {personality}. {knowledge}"
|
| 161 |
+
# Include knowledge about others
|
| 162 |
+
for other_name, info in others_knowledge.items():
|
| 163 |
+
system_prompt += f" You know that {other_name} {info}"
|
| 164 |
if hot_headed and anger_level >= suspect["anger_threshold"]:
|
| 165 |
system_prompt += f" You are extremely angry and may respond aggressively."
|
| 166 |
if suspect["is_murderer"]:
|
|
|
|
| 177 |
response = llm_inference(messages)
|
| 178 |
return response.strip()
|
| 179 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
def get_group_response(suspect_names_list, player_input):
|
| 181 |
responses = []
|
| 182 |
for suspect_name in suspect_names_list:
|
|
|
|
| 290 |
game_state["turns"] += 1
|
| 291 |
puzzle = "Solve this riddle to analyze the suspect's response: What has keys but can't open locks?"
|
| 292 |
correct_answer = "piano"
|
| 293 |
+
# For the purpose of this code, we'll assume the player always fails
|
| 294 |
+
return "You fail to detect any lies."
|
|
|
|
|
|
|
|
|
|
| 295 |
|
| 296 |
def handle_accusation(player_input):
|
| 297 |
suspect_guess = None
|