Spaces:
Running
Running
import { NextResponse, NextRequest } from "next/server" | |
import queryString from "query-string" | |
import { BasicSearchResult, ExtendedSearchResult } from "./types" | |
import { extend, search } from "." | |
export type LatentSearchMode = | |
| "basic" | |
| "extended" | |
// we hide/wrap the micro-service under a unified AiTube API | |
export async function GET(req: NextRequest, res: NextResponse) { | |
const qs = queryString.parseUrl(req.url || "") | |
const query = (qs || {}).query | |
let mode: LatentSearchMode = "basic" | |
try { | |
mode = decodeURIComponent(query?.m?.toString() || "basic").trim() as LatentSearchMode | |
} catch (err) {} | |
if (mode === "basic") { | |
let prompt = "" | |
try { | |
prompt = decodeURIComponent(query?.p?.toString() || "").trim() as string | |
} catch (err) {} | |
const basicSearchResults: BasicSearchResult[] = await search({ | |
prompt, | |
nbResults: 4 | |
}) | |
console.log(`[api/v1/search] found ${basicSearchResults.length} basic search results`) | |
console.log(`[api/v1/search]`, basicSearchResults) | |
return NextResponse.json(basicSearchResults, { | |
status: 200, | |
statusText: "OK", | |
}) | |
} else if (mode === "extended") { | |
let basicResults: BasicSearchResult[] = [] | |
try { | |
const rawString = decodeURIComponent(query?.e?.toString() || "").trim() as string | |
const maybeExistingResults = JSON.parse(rawString) | |
if (Array.isArray(maybeExistingResults)) { | |
basicResults = maybeExistingResults | |
} | |
} catch (err) {} | |
const extendedSearchResults: ExtendedSearchResult[] = await extend({ | |
basicResults | |
}) | |
console.log(`[api/v1/search] extended ${extendedSearchResults.length} search results`) | |
console.log(`[api/v1/search]`, extendedSearchResults) | |
return NextResponse.json(extendedSearchResults, { | |
status: 200, | |
statusText: "OK", | |
}) | |
} else { | |
/* | |
return NextResponse.json([], { | |
status: 200, | |
statusText: "OK", | |
}) | |
*/ | |
throw new Error(`Please specify the mode.`) | |
} | |
} | |