matt HOFFNER
identify if fileId before sending message
f1b879c
raw
history blame
1.52 kB
import type { NextApiRequest, NextApiResponse } from 'next';
import { storesDir } from '@/utils/file-handler';
import { makeChain } from '@/utils/make-chain';
import XenovaTransformersEmbeddings from '../../embed/hf';
import { HNSWLib } from 'langchain/vectorstores/hnswlib';
let vectorStore: HNSWLib;
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
const { prompt, messages } = req.body;
if (!prompt) {
return res.status(400).json({ message: 'No question in the request' });
}
// OpenAI recommends replacing newlines with spaces for best results
const sanitizedQuestion = prompt.trim().replaceAll('\n', ' ');
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache, no-transform',
Connection: 'keep-alive',
});
const sendData = (data: string) => {
res.write(`${data}\n\n`);
};
// load store
if (!vectorStore) {
vectorStore = await HNSWLib.load(storesDir, new XenovaTransformersEmbeddings());
}
//create chain
const chain = makeChain(vectorStore, (token: string) => {
// skipping stremaing for now
// sendData(JSON.stringify({ data: token }));
});
try {
//Ask a question
const response = await chain.call({
question: sanitizedQuestion,
chat_history: messages || [],
});
console.log('response', response);
sendData(response.text);
} catch (error) {
console.log('error', error);
} finally {
// sendData('[DONE]');
res.end();
}
}