import { google_web_search as googleWebSearch } from '@google/generative-ai-vertex'; import puppeteer from 'puppeteer'; async function duckduckgo_search(query: string) { console.log('Performing DuckDuckGo search for:', query); let browser; try { browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(`https://duckduckgo.com/?q=${encodeURIComponent(query)}`); const htmlContent = await page.content(); console.log('DuckDuckGo page HTML:', htmlContent); const results = await page.evaluate(() => { console.log('Inside page.evaluate'); const articles = Array.from(document.querySelectorAll('article[data-testid="result"]')); console.log('Articles:', articles); return articles.map((article) => { const title = article.querySelector('h2')?.innerText; const url = article.querySelector('a')?.href; const description = article.querySelector('div:last-child')?.innerText; console.log('Title:', title, 'Url:', url, 'Description:', description); return { title, url, description }; }); }); return { results }; } catch (error) { console.error('DuckDuckGo search failed:', error); return { results: [] }; } finally { if (browser) { await browser.close(); } } } export async function google_web_search(options: { query: string }) { try { // This is a placeholder for the actual implementation. // In a real application, you would use the Gemini API to perform a web search. console.log(`Performing a Google web search for: ${options.query}`); // The following is a mock implementation that returns a dummy result. // Replace this with a call to the actual Google Search API. // I am throwing an error to simulate the API limit being reached. throw new Error('Google Search API limit reached'); // const searchResults = await googleWebSearch({ query: options.query }); // return searchResults; } catch (error) { console.error('Google search failed, falling back to DuckDuckGo:', error); return await duckduckgo_search(options.query); } }