diff --git a/pages/api/google.ts b/pages/api/google.ts index 86df1d6..1a130c8 100644 --- a/pages/api/google.ts +++ b/pages/api/google.ts @@ -1,5 +1,5 @@ -import { ChatBody, Message } from '@/types/chat'; -import { GoogleSource } from '@/types/google'; +import { Message } from '@/types/chat'; +import { GoogleBody, GoogleSource } from '@/types/google'; import { OPENAI_API_HOST } from '@/utils/app/const'; import { cleanSourceText } from '@/utils/server/google'; import { Readability } from '@mozilla/readability'; @@ -9,14 +9,17 @@ import { NextApiRequest, NextApiResponse } from 'next'; const handler = async (req: NextApiRequest, res: NextApiResponse) => { 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 googleRes = await fetch( `https://customsearch.googleapis.com/customsearch/v1?key=${ - process.env.GOOGLE_API_KEY - }&cx=${process.env.GOOGLE_CSE_ID}&q=${userMessage.content.trim()}&num=5`, + googleAPIKey ? googleAPIKey : process.env.GOOGLE_API_KEY + }&cx=${ + googleCSEId ? googleCSEId : process.env.GOOGLE_CSE_ID + }&q=${userMessage.content.trim()}&num=5`, ); const googleData = await googleRes.json(); @@ -33,7 +36,16 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { const sourcesWithText: any = await Promise.all( sources.map(async (source) => { 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 virtualConsole = new jsdom.VirtualConsole(); @@ -56,9 +68,11 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { text: sourceText.slice(0, 2000), } as GoogleSource; } + // } return null; } catch (error) { + console.error(error); return null; } }), diff --git a/pages/index.tsx b/pages/index.tsx index 2cff012..d063465 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -118,6 +118,21 @@ const Home: React.FC = ({ }; 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 response = await fetch(endpoint, { @@ -126,7 +141,7 @@ const Home: React.FC = ({ 'Content-Type': 'application/json', }, signal: controller.signal, - body: JSON.stringify(chatBody), + body, }); if (!response.ok) { diff --git a/types/google.ts b/types/google.ts index 47b1d67..1f10b42 100644 --- a/types/google.ts +++ b/types/google.ts @@ -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 { message: Message;