Add 10 second timeout generating new prompts before returning old ones

This commit is contained in:
Wells Bunker 2025-09-10 22:55:35 -06:00
parent b546d121fd
commit 6069c24061
No known key found for this signature in database
GPG Key ID: DB16D6F2679B78FC
2 changed files with 21 additions and 25 deletions

View File

@ -22,7 +22,6 @@ const app = new Hono().get(
async (c) => { async (c) => {
try { try {
const userId = c.req.param('id'); const userId = c.req.param('id');
const authenticatedUser = c.get('busterUser'); const authenticatedUser = c.get('busterUser');
// Authorization check: Users can only access their own suggested prompts // Authorization check: Users can only access their own suggested prompts
@ -34,38 +33,36 @@ const app = new Hono().get(
const currentSuggestedPrompts = await getUserSuggestedPrompts({ userId }); const currentSuggestedPrompts = await getUserSuggestedPrompts({ userId });
// If no prompts exist, try to generate new ones or return defaults if (currentSuggestedPrompts) {
if (!currentSuggestedPrompts) { // Check if the updatedAt date is from today
try { const today = new Date();
const newPrompts = await buildNewSuggestedPrompts(userId); const updatedDate = new Date(currentSuggestedPrompts.updatedAt);
return c.json(newPrompts);
} catch { const isToday =
return c.json(DEFAULT_USER_SUGGESTED_PROMPTS); today.getFullYear() === updatedDate.getFullYear() &&
today.getMonth() === updatedDate.getMonth() &&
today.getDate() === updatedDate.getDate();
if (isToday) {
return c.json(currentSuggestedPrompts);
} }
} }
// Check if the updatedAt date is from today const timeoutMs = 10000; // 10 seconds timeout
const today = new Date();
const updatedDate = new Date(currentSuggestedPrompts.updatedAt); const timeoutPromise = new Promise<never>((_, reject) => {
setTimeout(() => {
const isToday = reject(new Error('Request timeout after 10 seconds. Returning current suggested prompts.'));
today.getFullYear() === updatedDate.getFullYear() && }, timeoutMs);
today.getMonth() === updatedDate.getMonth() && });
today.getDate() === updatedDate.getDate();
// If prompts are from today, return them
if (isToday) {
return c.json(currentSuggestedPrompts);
}
try { try {
const newPrompts = await buildNewSuggestedPrompts(userId); const newPrompts = await Promise.race([buildNewSuggestedPrompts(userId), timeoutPromise]);
return c.json(newPrompts); return c.json(newPrompts);
} catch { } catch {
if (currentSuggestedPrompts) { if (currentSuggestedPrompts) {
return c.json(currentSuggestedPrompts); return c.json(currentSuggestedPrompts);
} }
return c.json(DEFAULT_USER_SUGGESTED_PROMPTS); return c.json(DEFAULT_USER_SUGGESTED_PROMPTS);
} }
} catch (error) { } catch (error) {

View File

@ -1,5 +1,4 @@
import { openai } from '@ai-sdk/openai'; import { DEFAULT_USER_SUGGESTED_PROMPTS } from '@buster/database';
import { DEFAULT_USER_SUGGESTED_PROMPTS, type UserSuggestedPromptsField } from '@buster/database';
import { generateObject } from 'ai'; import { generateObject } from 'ai';
import { wrapTraced } from 'braintrust'; import { wrapTraced } from 'braintrust';
import { z } from 'zod'; import { z } from 'zod';