in appdev_genai_googlecloud/src/knowledge-drive/src/app/api/question/route.ts [20:107]
export async function POST(request: Request) {
const action = "question";
const headersList = headers();
const owner = await getOwner(headersList);
const sourceIP = await getSourceIP(headersList);
const { question } = await request.json();
if (!process.env.SEARCH_HOST) {
logError({
owner: owner,
sourceIP: sourceIP,
action: action,
message: `${sourceIP}/${owner}/${action}: No search host set`,
});
return NextResponse.json(
{ message: "No search host set" },
{ status: 500 },
);
}
try {
const auth = new GoogleAuth();
const client = await auth.getIdTokenClient(process.env.SEARCH_HOST);
const res = await client.request({
url: `${process.env.SEARCH_HOST}${ENDPOINT_PATH}`,
method: "POST",
headers: {
"Content-Type": "application/json",
},
data: {
user_id: owner,
question: question,
},
});
const status = res.status;
const data = res.data;
if (status !== 200) {
logError({
owner: owner,
sourceIP: sourceIP,
action: action,
message: `${sourceIP}/${owner}/${action}/${question}: Got ${status} from search backend API`,
});
return NextResponse.json({ message: "Search failed" }, { status: 500 });
}
if (!isValidSearchResponse(data)) {
logError({
owner: owner,
sourceIP: sourceIP,
action: action,
message: `${sourceIP}/${owner}/${action}/${question}: Invalid response from search backend API`,
data: data,
});
return NextResponse.json(
{ message: "Invalid response from search API" },
{ status: 500 },
);
}
const validData = data as QuestionResponse;
// validData.metadata.source = "[UUID:21 characters].[Filename]"
const filename = validData.metadata.source.substring(22);
logInfo({
owner: owner,
sourceIP: sourceIP,
action: action,
message: `${sourceIP}/${owner}/${action}/${question}: Answered to the question`,
data: validData,
});
return NextResponse.json({
answer: validData.answer,
metadata: {
source: filename,
page: validData.metadata.page,
},
});
} catch (e) {
logError({
owner: owner,
sourceIP: sourceIP,
action: action,
message: `${sourceIP}/${owner}/${action}/${question}: Unknown error occurred`,
error: e,
});
return NextResponse.json({ message: e }, { status: 500 });
}
}