From 9e5742307bd8af53fff472c5bcb89b7472622b31 Mon Sep 17 00:00:00 2001 From: JobsBoard Deployer Date: Sat, 5 Sep 2026 14:12:42 -0400 Subject: [PATCH] Switch default model to google/gemini-2.5-flash, add max_tokens: 3500, and safeguard JSON truncation on parse --- docker-compose.yml | 2 +- web/src/app/api/resume/parse/route.ts | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6e7d29e..f411d35 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,7 +36,7 @@ services: NEXTAUTH_URL: "${NEXTAUTH_URL:-http://localhost:3000}" NODE_ENV: "production" OPENROUTER_API_KEY: "${OPENROUTER_API_KEY:-}" - OPENROUTER_MODEL: "${OPENROUTER_MODEL:-meta-llama/llama-3.2-3b-instruct}" + OPENROUTER_MODEL: "${OPENROUTER_MODEL:-google/gemini-2.5-flash}" depends_on: db: condition: service_healthy diff --git a/web/src/app/api/resume/parse/route.ts b/web/src/app/api/resume/parse/route.ts index 9562306..81a6662 100644 --- a/web/src/app/api/resume/parse/route.ts +++ b/web/src/app/api/resume/parse/route.ts @@ -406,6 +406,7 @@ CRITICAL EXTRACTION GUIDELINES: body: JSON.stringify({ model, temperature: 0.1, + max_tokens: 3500, messages: [ { role: "system", content: systemPrompt }, { @@ -431,7 +432,22 @@ CRITICAL EXTRACTION GUIDELINES: // Clean markdown code fence wrappers if present content = content.replace(/^```(?:json)?\s*/i, "").replace(/\s*```$/i, "").trim(); - const parsed = JSON.parse(content); + let parsed: any = null; + try { + parsed = JSON.parse(content); + } catch (parseErr: any) { + console.warn("[Resume Parser] JSON parse error on raw output:", parseErr.message, "Raw snippet:", content.slice(0, 300)); + // Attempt repair if closed prematurely + const lastBrace = content.lastIndexOf("}"); + if (lastBrace > 0) { + try { + parsed = JSON.parse(content.slice(0, lastBrace + 1)); + } catch (repairErr) { + // Could not salvage + } + } + } + if (parsed && (parsed.profile || Array.isArray(parsed.work))) { console.log("[Resume Parser] Successfully extracted structured resume with LLM."); return parsed;