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:
|
def _parse_json(text: str) -> dict:
|
||||||
text = re.sub(r"^```(?:json)?\s*", "", text, flags=re.MULTILINE)
|
text = re.sub(r"^```(?:json)?\s*", "", text, flags=re.MULTILINE)
|
||||||
text = re.sub(r"\s*```$", "", text, flags=re.MULTILINE)
|
text = re.sub(r"\s*```$", "", text, flags=re.MULTILINE)
|
||||||
|
text = text.strip()
|
||||||
try:
|
try:
|
||||||
return json.loads(text.strip())
|
return json.loads(text)
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
raise ValueError(f"Claude response was not valid JSON: {e}\n\nRaw: {text[:500]}")
|
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 = DeckPayload()
|
||||||
payload.deck_name = data.get("deck_name", "Untitled Deck")
|
payload.deck_name = data.get("deck_name", "Untitled Deck")
|
||||||
payload.strategy_summary = data.get("strategy_summary", "")
|
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"):
|
if raw_card.get("name"):
|
||||||
payload.cards.append(CardEntry(raw_card))
|
payload.cards.append(CardEntry(raw_card))
|
||||||
for raw_cut in data.get("cuts", []):
|
for raw_cut in data.get("cuts", []):
|
||||||
|
|||||||
Reference in New Issue
Block a user