fix: handle alternative JSON keys in Claude response (decklist/deck -> cards)

This commit is contained in:
danbusse
2026-06-22 21:53:42 -06:00
parent d1d1813403
commit 0ff43f697b
+12 -2
View File
@@ -60,8 +60,9 @@ def _extract_text(message) -> str:
def _parse_json(text: str) -> dict:
text = re.sub(r"^```(?:json)?\s*", "", text, flags=re.MULTILINE)
text = re.sub(r"\s*```$", "", text, flags=re.MULTILINE)
text = text.strip()
try:
return json.loads(text.strip())
return json.loads(text)
except json.JSONDecodeError as e:
raise ValueError(f"Claude response was not valid JSON: {e}\n\nRaw: {text[:500]}")
@@ -114,7 +115,16 @@ def _build_payload(data: dict) -> DeckPayload:
payload = DeckPayload()
payload.deck_name = data.get("deck_name", "Untitled Deck")
payload.strategy_summary = data.get("strategy_summary", "")
for raw_card in data.get("cards", []):
# Handle both 'cards' and alternative keys Claude sometimes returns
cards_list = (
data.get("cards")
or data.get("decklist")
or data.get("deck")
or []
)
for raw_card in cards_list:
if raw_card.get("name"):
payload.cards.append(CardEntry(raw_card))
for raw_cut in data.get("cuts", []):