From 0ff43f697bd87a251d1640a25fc91e200e4b017a Mon Sep 17 00:00:00 2001 From: danbusse <81775558+danbusse@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:53:42 -0600 Subject: [PATCH] fix: handle alternative JSON keys in Claude response (decklist/deck -> cards) --- backend/app/services/ai/claude_client.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/app/services/ai/claude_client.py b/backend/app/services/ai/claude_client.py index 3c2d275..9523411 100644 --- a/backend/app/services/ai/claude_client.py +++ b/backend/app/services/ai/claude_client.py @@ -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", []):