Spaces:
Paused
Paused
"use client" | |
import { useEffect, useState } from "react"; | |
import WebSearchResults from "@/components/WebSearchResults"; | |
import Link from "next/link"; | |
export default function WebSearchPage({ searchParams }) { | |
const [results, setResults] = useState(null); | |
const [aiResponse, setAiResponse] = useState(null); | |
const startIndex = searchParams.start || "1"; | |
useEffect(() => { | |
async function fetchData() { | |
// Fetch Google search results via server-side route | |
const response = await fetch(`/api/search?searchTerm=${searchParams.searchTerm}&start=${startIndex}`); | |
if (!response.ok) { | |
console.log(response); | |
throw new Error("Something went wrong"); | |
} | |
const data = await response.json(); | |
setResults(data.items); | |
// Prepare AI prompt | |
const aiPrompt = `You're creating a search engine experience. You got the following search results for the term "${searchParams.searchTerm}": ${JSON.stringify(data.items)}. How can you present these results in a helpful way?`; | |
// Fetch AI response via server-side route | |
const openaiRes = new EventSource('/api/llm', { | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json', | |
}, | |
body: JSON.stringify({ | |
'model': 'gpt-3.5-turbo-16k', | |
'messages': [{ | |
'role': 'system', | |
'content': 'You are a helpful assistant.' | |
}, { | |
'role': 'user', | |
'content': searchParams.searchTerm | |
}], | |
'prompt': aiPrompt, | |
'temperature': 0.5 | |
}) | |
}); | |
// Listen for AI responses and append to state | |
openaiRes.onmessage = function(event) { | |
setAiResponse(aiResponse => aiResponse + event.data); | |
}; | |
} | |
fetchData(); | |
}, [searchParams, startIndex]); | |
if (!results) { | |
return ( | |
<div className="flex flex-col justify-center items-center pt-10"> | |
<h1 className="text-3xl mb-4">No results found</h1> | |
<p className="text-lg"> | |
Try searching for something else or go back to the homepage{" "} | |
<Link href="/" className="text-blue-500"> | |
Home | |
</Link> | |
</p> | |
</div> | |
); | |
} | |
return <>{results && <WebSearchResults results={results} aiResponse={aiResponse} />}</>; | |
} | |