fix: handle alternative JSON keys in Claude response (decklist/deck -> cards)
This commit is contained in:
@@ -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", []):
|
||||
|
||||
Reference in New Issue
Block a user