Upload folder using huggingface_hub
Browse files- modeling_twentyq.py +22 -14
modeling_twentyq.py
CHANGED
|
@@ -70,9 +70,11 @@ class TwentyQForCausalLM(PreTrainedModel, GenerationMixin):
|
|
| 70 |
text = raw_bytes.decode("utf-8", errors="replace")
|
| 71 |
|
| 72 |
# Parse conversation and get next response
|
| 73 |
-
answers, qnum, last_was_guess, game_over_msg = self._parse_conversation(text)
|
| 74 |
|
| 75 |
-
if
|
|
|
|
|
|
|
| 76 |
response = game_over_msg
|
| 77 |
else:
|
| 78 |
# Seed RNG from conversation for deterministic play
|
|
@@ -90,6 +92,7 @@ class TwentyQForCausalLM(PreTrainedModel, GenerationMixin):
|
|
| 90 |
qnum = 0
|
| 91 |
last_was_guess = False
|
| 92 |
game_over_msg = None
|
|
|
|
| 93 |
|
| 94 |
# Split into turns by [A] and [U] markers
|
| 95 |
parts = text.replace("\r", "").split("\n")
|
|
@@ -120,6 +123,9 @@ class TwentyQForCausalLM(PreTrainedModel, GenerationMixin):
|
|
| 120 |
if avm_code:
|
| 121 |
answers.append((0, avm_code, False))
|
| 122 |
qnum += 1
|
|
|
|
|
|
|
|
|
|
| 123 |
i += 2
|
| 124 |
|
| 125 |
elif a_msg.lower().startswith("i'm guessing"):
|
|
@@ -130,14 +136,14 @@ class TwentyQForCausalLM(PreTrainedModel, GenerationMixin):
|
|
| 130 |
ans_code = ANSWER_WORDS.get(u_lower, 0)
|
| 131 |
if ans_code == 2: # Yes — correct guess
|
| 132 |
game_over_msg = f"I win! Got it in {qnum + 1} questions."
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
answers.append((t_idx, 0, True))
|
| 136 |
-
qnum += 1
|
| 137 |
-
else: # No — wrong
|
| 138 |
if t_idx >= 0:
|
| 139 |
answers.append((t_idx, 0, True))
|
| 140 |
qnum += 1
|
|
|
|
|
|
|
|
|
|
| 141 |
i += 2
|
| 142 |
|
| 143 |
elif a_msg.lower().startswith("i win") or a_msg.lower().startswith("i'm stumped"):
|
|
@@ -149,17 +155,19 @@ class TwentyQForCausalLM(PreTrainedModel, GenerationMixin):
|
|
| 149 |
# Regular question
|
| 150 |
q_text = a_msg.rstrip("?").strip()
|
| 151 |
q_idx = self._q_lookup.get(q_text.lower(), -1)
|
| 152 |
-
ans_code = ANSWER_WORDS.get(u_lower,
|
| 153 |
-
if ans_code == -1:
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
|
|
|
|
|
|
| 158 |
i += 2
|
| 159 |
else:
|
| 160 |
i += 1
|
| 161 |
|
| 162 |
-
return answers, qnum, last_was_guess, game_over_msg
|
| 163 |
|
| 164 |
def _next_move(self, answers, qnum, last_was_guess):
|
| 165 |
if qnum == 0:
|
|
|
|
| 70 |
text = raw_bytes.decode("utf-8", errors="replace")
|
| 71 |
|
| 72 |
# Parse conversation and get next response
|
| 73 |
+
answers, qnum, last_was_guess, game_over_msg, unrecognized = self._parse_conversation(text)
|
| 74 |
|
| 75 |
+
if unrecognized:
|
| 76 |
+
response = f"I didn't understand that. Please answer: {unrecognized}"
|
| 77 |
+
elif game_over_msg:
|
| 78 |
response = game_over_msg
|
| 79 |
else:
|
| 80 |
# Seed RNG from conversation for deterministic play
|
|
|
|
| 92 |
qnum = 0
|
| 93 |
last_was_guess = False
|
| 94 |
game_over_msg = None
|
| 95 |
+
unrecognized = None # set to hint string if last answer wasn't understood
|
| 96 |
|
| 97 |
# Split into turns by [A] and [U] markers
|
| 98 |
parts = text.replace("\r", "").split("\n")
|
|
|
|
| 123 |
if avm_code:
|
| 124 |
answers.append((0, avm_code, False))
|
| 125 |
qnum += 1
|
| 126 |
+
unrecognized = None
|
| 127 |
+
else:
|
| 128 |
+
unrecognized = "Animal, Vegetable, Mineral, or Other"
|
| 129 |
i += 2
|
| 130 |
|
| 131 |
elif a_msg.lower().startswith("i'm guessing"):
|
|
|
|
| 136 |
ans_code = ANSWER_WORDS.get(u_lower, 0)
|
| 137 |
if ans_code == 2: # Yes — correct guess
|
| 138 |
game_over_msg = f"I win! Got it in {qnum + 1} questions."
|
| 139 |
+
unrecognized = None
|
| 140 |
+
elif ans_code == 1 or ans_code == -1: # No or Close
|
|
|
|
|
|
|
|
|
|
| 141 |
if t_idx >= 0:
|
| 142 |
answers.append((t_idx, 0, True))
|
| 143 |
qnum += 1
|
| 144 |
+
unrecognized = None
|
| 145 |
+
else:
|
| 146 |
+
unrecognized = "Yes, No, or Close"
|
| 147 |
i += 2
|
| 148 |
|
| 149 |
elif a_msg.lower().startswith("i win") or a_msg.lower().startswith("i'm stumped"):
|
|
|
|
| 155 |
# Regular question
|
| 156 |
q_text = a_msg.rstrip("?").strip()
|
| 157 |
q_idx = self._q_lookup.get(q_text.lower(), -1)
|
| 158 |
+
ans_code = ANSWER_WORDS.get(u_lower, 0)
|
| 159 |
+
if ans_code == -1 or ans_code == 0:
|
| 160 |
+
unrecognized = "Yes, No, Probably, Doubtful, Maybe, or Unknown"
|
| 161 |
+
else:
|
| 162 |
+
unrecognized = None
|
| 163 |
+
if q_idx >= 0:
|
| 164 |
+
answers.append((q_idx, ans_code, False))
|
| 165 |
+
qnum += 1
|
| 166 |
i += 2
|
| 167 |
else:
|
| 168 |
i += 1
|
| 169 |
|
| 170 |
+
return answers, qnum, last_was_guess, game_over_msg, unrecognized
|
| 171 |
|
| 172 |
def _next_move(self, answers, qnum, last_was_guess):
|
| 173 |
if qnum == 0:
|