From 765834b3d60584c468708783ece986be7d2cdfce Mon Sep 17 00:00:00 2001 From: danbusse <81775558+danbusse@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:47:49 -0600 Subject: [PATCH] fix: increase max_tokens to 16000 to prevent JSON truncation --- backend/app/services/ai/deck_service.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/backend/app/services/ai/deck_service.py b/backend/app/services/ai/deck_service.py index a7a3f39..5dd4eee 100644 --- a/backend/app/services/ai/deck_service.py +++ b/backend/app/services/ai/deck_service.py @@ -11,6 +11,11 @@ from app.services.ai import prompts from app.services.ai.claude_client import call_claude, DeckPayload from app.services.ai.constraints import build_constraint_context, build_owned_card_list +# A full 99-card deck with reasoning needs ~16000 tokens +GENERATE_MAX_TOKENS = 16000 +COMPLETE_MAX_TOKENS = 16000 +CULL_MAX_TOKENS = 16000 + async def generate_deck(req: GenerateRequest, user_id: int, db: AsyncSession) -> Deck: owned_names = await _owned_names(user_id, db) if req.constraints.prefer_owned else [] @@ -20,7 +25,7 @@ async def generate_deck(req: GenerateRequest, user_id: int, db: AsyncSession) -> constraint_text=build_constraint_context(req.constraints, owned_names or None), owned_list_text=build_owned_card_list(owned_names), ) - payload = await call_claude(system, user_msg) + payload = await call_claude(system, user_msg, max_tokens=GENERATE_MAX_TOKENS) return await _persist_deck( payload=payload, user_id=user_id, mode=DeckMode.GENERATE, commander=req.commander, name=req.name or payload.deck_name, @@ -38,7 +43,7 @@ async def complete_deck(req: CompleteRequest, user_id: int, db: AsyncSession) -> constraint_text=build_constraint_context(req.constraints, owned_names or None), owned_list_text=build_owned_card_list(owned_names), ) - payload = await call_claude(system, user_msg) + payload = await call_claude(system, user_msg, max_tokens=COMPLETE_MAX_TOKENS) return await _persist_deck( payload=payload, user_id=user_id, mode=DeckMode.COMPLETE, commander=req.commander, name=req.name or payload.deck_name, @@ -61,7 +66,7 @@ async def cull_deck(req: CullRequest, user_id: int, db: AsyncSession) -> Deck: owned_list_text=build_owned_card_list(owned_names), prefer_owned=req.constraints.prefer_owned, ) - payload = await call_claude(system, user_msg, max_tokens=10000) + payload = await call_claude(system, user_msg, max_tokens=CULL_MAX_TOKENS) return await _persist_deck( payload=payload, user_id=user_id, mode=DeckMode.CULL, commander=req.commander, name=req.name or payload.deck_name,