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

View File

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