Spaces:
Runtime error
Runtime error
| import { NextRequest, NextResponse } from "next/server"; | |
| import { isAuthenticated } from "@/shared/utils/apiAuth"; | |
| import { | |
| clearReasoningCacheAll, | |
| deleteReasoningCacheEntry, | |
| getReasoningCacheServiceEntries, | |
| getReasoningCacheServiceStats, | |
| } from "@omniroute/open-sse/services/reasoningCache.ts"; | |
| import { sanitizeErrorMessage } from "@omniroute/open-sse/utils/error"; | |
| function errorMessage(error: unknown): string { | |
| return sanitizeErrorMessage(error); | |
| } | |
| /** | |
| * GET /api/cache/reasoning | |
| * | |
| * Returns reasoning replay cache stats + paginated entries. | |
| * Query params: ?provider=deepseek&model=deepseek-reasoner&limit=50&offset=0 | |
| */ | |
| export async function GET(req: NextRequest) { | |
| if (!(await isAuthenticated(req))) { | |
| return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); | |
| } | |
| try { | |
| const { searchParams } = new URL(req.url); | |
| const provider = searchParams.get("provider") || undefined; | |
| const model = searchParams.get("model") || undefined; | |
| const limit = parseInt(searchParams.get("limit") || "50", 10); | |
| const offset = parseInt(searchParams.get("offset") || "0", 10); | |
| const stats = getReasoningCacheServiceStats(); | |
| const entries = getReasoningCacheServiceEntries({ | |
| limit: Math.min(Math.max(limit, 1), 200), | |
| offset: Math.max(offset, 0), | |
| provider, | |
| model, | |
| }); | |
| return NextResponse.json({ stats, entries }); | |
| } catch (error) { | |
| return NextResponse.json({ error: errorMessage(error) }, { status: 500 }); | |
| } | |
| } | |
| /** | |
| * DELETE /api/cache/reasoning | |
| * | |
| * Clears reasoning cache entries. | |
| * Query params: ?toolCallId=call_abc (single entry), ?provider=deepseek, or no params. | |
| */ | |
| export async function DELETE(req: NextRequest) { | |
| if (!(await isAuthenticated(req))) { | |
| return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); | |
| } | |
| try { | |
| const { searchParams } = new URL(req.url); | |
| const toolCallId = searchParams.get("toolCallId") || undefined; | |
| const provider = searchParams.get("provider") || undefined; | |
| if (toolCallId) { | |
| const cleared = deleteReasoningCacheEntry(toolCallId); | |
| return NextResponse.json({ | |
| ok: true, | |
| cleared, | |
| scope: "toolCallId", | |
| toolCallId, | |
| }); | |
| } | |
| const cleared = clearReasoningCacheAll(provider); | |
| return NextResponse.json({ | |
| ok: true, | |
| cleared, | |
| scope: provider ? "provider" : "all", | |
| ...(provider ? { provider } : {}), | |
| }); | |
| } catch (error) { | |
| return NextResponse.json({ error: errorMessage(error) }, { status: 500 }); | |
| } | |
| } | |