Google fixes (#415)

* push

* fixes
This commit is contained in:
Mckay Wrigley 2023-04-04 10:09:28 -06:00 committed by GitHub
parent e1f286efb8
commit 4f92751ee3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 8 deletions

View File

@ -1,5 +1,5 @@
import { ChatBody, Message } from '@/types/chat'; import { Message } from '@/types/chat';
import { GoogleSource } from '@/types/google'; import { GoogleBody, GoogleSource } from '@/types/google';
import { OPENAI_API_HOST } from '@/utils/app/const'; import { OPENAI_API_HOST } from '@/utils/app/const';
import { cleanSourceText } from '@/utils/server/google'; import { cleanSourceText } from '@/utils/server/google';
import { Readability } from '@mozilla/readability'; import { Readability } from '@mozilla/readability';
@ -9,14 +9,17 @@ import { NextApiRequest, NextApiResponse } from 'next';
const handler = async (req: NextApiRequest, res: NextApiResponse<any>) => { const handler = async (req: NextApiRequest, res: NextApiResponse<any>) => {
try { try {
const { messages, key, model } = req.body as ChatBody; const { messages, key, model, googleAPIKey, googleCSEId } =
req.body as GoogleBody;
const userMessage = messages[messages.length - 1]; const userMessage = messages[messages.length - 1];
const googleRes = await fetch( const googleRes = await fetch(
`https://customsearch.googleapis.com/customsearch/v1?key=${ `https://customsearch.googleapis.com/customsearch/v1?key=${
process.env.GOOGLE_API_KEY googleAPIKey ? googleAPIKey : process.env.GOOGLE_API_KEY
}&cx=${process.env.GOOGLE_CSE_ID}&q=${userMessage.content.trim()}&num=5`, }&cx=${
googleCSEId ? googleCSEId : process.env.GOOGLE_CSE_ID
}&q=${userMessage.content.trim()}&num=5`,
); );
const googleData = await googleRes.json(); const googleData = await googleRes.json();
@ -33,7 +36,16 @@ const handler = async (req: NextApiRequest, res: NextApiResponse<any>) => {
const sourcesWithText: any = await Promise.all( const sourcesWithText: any = await Promise.all(
sources.map(async (source) => { sources.map(async (source) => {
try { try {
const res = await fetch(source.link); const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timed out')), 5000),
);
const res = (await Promise.race([
fetch(source.link),
timeoutPromise,
])) as any;
// if (res) {
const html = await res.text(); const html = await res.text();
const virtualConsole = new jsdom.VirtualConsole(); const virtualConsole = new jsdom.VirtualConsole();
@ -56,9 +68,11 @@ const handler = async (req: NextApiRequest, res: NextApiResponse<any>) => {
text: sourceText.slice(0, 2000), text: sourceText.slice(0, 2000),
} as GoogleSource; } as GoogleSource;
} }
// }
return null; return null;
} catch (error) { } catch (error) {
console.error(error);
return null; return null;
} }
}), }),

View File

@ -118,6 +118,21 @@ const Home: React.FC<HomeProps> = ({
}; };
const endpoint = getEndpoint(plugin); const endpoint = getEndpoint(plugin);
let body;
if (!plugin) {
body = JSON.stringify(chatBody);
} else {
body = JSON.stringify({
...chatBody,
googleAPIKey: pluginKeys
.find((key) => key.pluginId === 'google-search')
?.requiredKeys.find((key) => key.key === 'GOOGLE_API_KEY')?.value,
googleCSEId: pluginKeys
.find((key) => key.pluginId === 'google-search')
?.requiredKeys.find((key) => key.key === 'GOOGLE_CSE_ID')?.value,
});
}
const controller = new AbortController(); const controller = new AbortController();
const response = await fetch(endpoint, { const response = await fetch(endpoint, {
@ -126,7 +141,7 @@ const Home: React.FC<HomeProps> = ({
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
signal: controller.signal, signal: controller.signal,
body: JSON.stringify(chatBody), body,
}); });
if (!response.ok) { if (!response.ok) {

View File

@ -1,4 +1,9 @@
import { Message } from './chat'; import { ChatBody, Message } from './chat';
export interface GoogleBody extends ChatBody {
googleAPIKey: string;
googleCSEId: string;
}
export interface GoogleResponse { export interface GoogleResponse {
message: Message; message: Message;