diff --git a/src/app/api/chat/cancel/route.ts b/src/app/api/chat/cancel/route.ts index c7614a9..673a9bb 100644 --- a/src/app/api/chat/cancel/route.ts +++ b/src/app/api/chat/cancel/route.ts @@ -1,37 +1,5 @@ import { NextRequest } from 'next/server'; - -// In-memory map to store cancel tokens by messageId -const cancelTokens: Record = {}; - -// Export for use in chat/route.ts -export function registerCancelToken( - messageId: string, - controller: AbortController, -) { - cancelTokens[messageId] = controller; -} - -export function cleanupCancelToken(messageId: string) { - var cancelled = false; - if (messageId in cancelTokens) { - delete cancelTokens[messageId]; - cancelled = true; - } - return cancelled; -} - -export function cancelRequest(messageId: string) { - const controller = cancelTokens[messageId]; - if (controller) { - try { - controller.abort(); - } catch (e) { - console.error(`Error aborting request for messageId ${messageId}:`, e); - } - return true; - } - return false; -} +import { cancelRequest } from '@/lib/cancel-tokens'; export async function POST(req: NextRequest) { const { messageId } = await req.json(); diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts index c242002..56a657f 100644 --- a/src/app/api/chat/route.ts +++ b/src/app/api/chat/route.ts @@ -21,7 +21,7 @@ import { EventEmitter } from 'stream'; import { registerCancelToken, cleanupCancelToken, -} from './cancel/route'; +} from '@/lib/cancel-tokens'; export const runtime = 'nodejs'; export const dynamic = 'force-dynamic'; diff --git a/src/lib/cancel-tokens.ts b/src/lib/cancel-tokens.ts new file mode 100644 index 0000000..ca6e2fa --- /dev/null +++ b/src/lib/cancel-tokens.ts @@ -0,0 +1,36 @@ +export {}; + +// In-memory map to store cancel tokens by messageId +const cancelTokens: Record = {}; + +// Register a cancel token for a message ID +export function registerCancelToken( + messageId: string, + controller: AbortController, +) { + cancelTokens[messageId] = controller; +} + +// Remove a cancel token from the map +export function cleanupCancelToken(messageId: string) { + var cancelled = false; + if (messageId in cancelTokens) { + delete cancelTokens[messageId]; + cancelled = true; + } + return cancelled; +} + +// Cancel a request by its message ID +export function cancelRequest(messageId: string) { + const controller = cancelTokens[messageId]; + if (controller) { + try { + controller.abort(); + } catch (e) { + console.error(`Error aborting request for messageId ${messageId}:`, e); + } + return true; + } + return false; +}