LazyHuman10 commited on
Commit ·
1eea13b
1
Parent(s): 1f637de
fix: fill missing NPC keys with defaults instead of failing validation
Browse files- model_engine.py +23 -9
model_engine.py
CHANGED
|
@@ -177,23 +177,37 @@ def parse_json_safe(text: str) -> dict:
|
|
| 177 |
|
| 178 |
|
| 179 |
def _validate_npc_payload(payload: dict) -> dict:
|
| 180 |
-
"""Validate the NPC payload shape
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
|
|
|
|
|
|
| 184 |
|
| 185 |
stats = payload.get("stats")
|
| 186 |
if not isinstance(stats, dict):
|
| 187 |
-
|
|
|
|
|
|
|
| 188 |
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
|
|
|
|
|
|
| 192 |
|
| 193 |
-
payload["level"] = int(payload["level"])
|
| 194 |
for key in REQUIRED_STAT_KEYS:
|
| 195 |
stats[key] = max(1, min(100, int(stats[key])))
|
| 196 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 197 |
return payload
|
| 198 |
|
| 199 |
|
|
|
|
| 177 |
|
| 178 |
|
| 179 |
def _validate_npc_payload(payload: dict) -> dict:
|
| 180 |
+
"""Validate the NPC payload shape, filling in missing keys from DEFAULT_NPC."""
|
| 181 |
+
# Fill any missing top-level keys with defaults so a partial response still works
|
| 182 |
+
for key in REQUIRED_NPC_KEYS:
|
| 183 |
+
if key not in payload:
|
| 184 |
+
print(f"[NPCverse] NPC payload missing key '{key}', using default.")
|
| 185 |
+
payload[key] = DEFAULT_NPC[key]
|
| 186 |
|
| 187 |
stats = payload.get("stats")
|
| 188 |
if not isinstance(stats, dict):
|
| 189 |
+
print("[NPCverse] NPC stats invalid, using defaults.")
|
| 190 |
+
payload["stats"] = dict(DEFAULT_NPC["stats"])
|
| 191 |
+
stats = payload["stats"]
|
| 192 |
|
| 193 |
+
# Fill any missing stat keys with defaults
|
| 194 |
+
for key in REQUIRED_STAT_KEYS:
|
| 195 |
+
if key not in stats:
|
| 196 |
+
print(f"[NPCverse] NPC stat '{key}' missing, using default.")
|
| 197 |
+
stats[key] = DEFAULT_NPC["stats"][key]
|
| 198 |
|
| 199 |
+
payload["level"] = int(payload.get("level") or DEFAULT_NPC["level"])
|
| 200 |
for key in REQUIRED_STAT_KEYS:
|
| 201 |
stats[key] = max(1, min(100, int(stats[key])))
|
| 202 |
|
| 203 |
+
# Ensure quests is a list of dicts
|
| 204 |
+
if not isinstance(payload.get("quests"), list) or len(payload["quests"]) == 0:
|
| 205 |
+
payload["quests"] = DEFAULT_NPC["quests"]
|
| 206 |
+
|
| 207 |
+
# Ensure secrets is a list of strings
|
| 208 |
+
if not isinstance(payload.get("secrets"), list) or len(payload["secrets"]) == 0:
|
| 209 |
+
payload["secrets"] = DEFAULT_NPC["secrets"]
|
| 210 |
+
|
| 211 |
return payload
|
| 212 |
|
| 213 |
|