From 9ee85e4e75ba7d3be423e79b188b2e39b9d66255 Mon Sep 17 00:00:00 2001 From: SpirusNox <78000963+SpirusNox@users.noreply.github.com> Date: Tue, 22 Apr 2025 16:39:50 -0500 Subject: [PATCH] fix: JSON parsing errors and healthcheck endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed transcript parsing in audio-files/[id]/transcript endpoint - Added robust type checking for transcript data formats - Added type safety to summarize endpoint for transcript processing - Removed /health path from Docker healthcheck 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- docker-compose.yml | 2 +- .../audio-files/[id]/transcript/+server.ts | 20 +++++++++++++++++-- src/routes/api/summarize/+server.ts | 19 ++++++++++++++++-- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 3d59cfc..88724c4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,7 @@ services: networks: - app-network healthcheck: - test: ["CMD-SHELL", "curl -f http://localhost:3000/health || exit 1"] + test: ["CMD-SHELL", "curl -f http://localhost:3000 || exit 1"] interval: 30s timeout: 10s retries: 5 diff --git a/src/routes/api/audio-files/[id]/transcript/+server.ts b/src/routes/api/audio-files/[id]/transcript/+server.ts index 3d6fc3e..2172d8f 100644 --- a/src/routes/api/audio-files/[id]/transcript/+server.ts +++ b/src/routes/api/audio-files/[id]/transcript/+server.ts @@ -32,9 +32,25 @@ export async function GET({ params, locals }) { // Parse the transcript let transcript = []; try { - transcript = file.transcript ? JSON.parse(file.transcript) : []; + if (file.transcript) { + if (typeof file.transcript === 'string') { + try { + transcript = JSON.parse(file.transcript); + } catch (parseError) { + console.error('Failed to parse transcript string:', parseError); + } + } else if (Array.isArray(file.transcript)) { + transcript = file.transcript; + } else if (typeof file.transcript === 'object') { + // Try to convert object to array if possible + console.warn('Transcript is an object, not an array or string. Attempting to handle.'); + transcript = Array.isArray(Object.values(file.transcript)) + ? Object.values(file.transcript) + : [file.transcript]; + } + } } catch (e) { - console.error('Failed to parse transcript:', e); + console.error('Failed to process transcript:', e); } return json({ diff --git a/src/routes/api/summarize/+server.ts b/src/routes/api/summarize/+server.ts index 45a384d..c61e889 100644 --- a/src/routes/api/summarize/+server.ts +++ b/src/routes/api/summarize/+server.ts @@ -51,6 +51,21 @@ export async function POST({ request }) { return new Response('Missing fileId, prompt, or transcript', { status: 400 }); } + // Parse transcript if it's an object instead of a string + let transcriptText; + try { + if (typeof transcript === 'string') { + transcriptText = transcript; + } else if (typeof transcript === 'object') { + // If it's already an object, stringify it for use in the prompt + transcriptText = JSON.stringify(transcript); + } else { + throw new Error(`Invalid transcript format: ${typeof transcript}`); + } + } catch (transcriptError) { + return new Response(`Failed to parse transcript: ${transcriptError.message}`, { status: 400 }); + } + const openai = getOpenAI(); if (!openai) { return new Response('AI client not initialized. Check your OPENAI_BASE_URL, OLLAMA_BASE_URL or OPENAI_API_KEY configuration.', { status: 500 }); @@ -70,7 +85,7 @@ export async function POST({ request }) { const messages = [ { role: 'user', - content: `${prompt}\n\nTranscript:\n${transcript}` + content: `${prompt}\n\nTranscript:\n${transcriptText}` } ]; @@ -125,7 +140,7 @@ export async function POST({ request }) { messages: [ { role: "user", - content: `${prompt}\n\nTranscript:\n${transcript}` + content: `${prompt}\n\nTranscript:\n${transcriptText}` } ] })