Spaces:
Paused
Paused
matt HOFFNER
commited on
Commit
·
d92a0cd
1
Parent(s):
29df9bc
move to server
Browse files- src/app/search/web/page.jsx +5 -7
- src/pages/api/google.js +24 -0
src/app/search/web/page.jsx
CHANGED
|
@@ -1,6 +1,5 @@
|
|
| 1 |
"use client"
|
| 2 |
import { useEffect, useState } from "react";
|
| 3 |
-
import openai from 'openai';
|
| 4 |
import WebSearchResults from "@/components/WebSearchResults";
|
| 5 |
import Link from "next/link";
|
| 6 |
|
|
@@ -11,20 +10,19 @@ export default function WebSearchPage({ searchParams }) {
|
|
| 11 |
|
| 12 |
useEffect(() => {
|
| 13 |
async function fetchData() {
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
);
|
| 17 |
-
|
| 18 |
if (!response.ok) {
|
| 19 |
console.log(response);
|
| 20 |
throw new Error("Something went wrong");
|
| 21 |
}
|
| 22 |
-
|
| 23 |
const data = await response.json();
|
| 24 |
setResults(data.items);
|
| 25 |
|
|
|
|
| 26 |
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?`;
|
| 27 |
|
|
|
|
| 28 |
const openaiRes = new EventSource('/api/llm', {
|
| 29 |
method: 'POST',
|
| 30 |
headers: {
|
|
@@ -33,10 +31,10 @@ export default function WebSearchPage({ searchParams }) {
|
|
| 33 |
body: JSON.stringify({ aiPrompt }),
|
| 34 |
});
|
| 35 |
|
|
|
|
| 36 |
openaiRes.onmessage = function(event) {
|
| 37 |
setAiResponse(aiResponse => aiResponse + event.data);
|
| 38 |
};
|
| 39 |
-
|
| 40 |
}
|
| 41 |
|
| 42 |
fetchData();
|
|
|
|
| 1 |
"use client"
|
| 2 |
import { useEffect, useState } from "react";
|
|
|
|
| 3 |
import WebSearchResults from "@/components/WebSearchResults";
|
| 4 |
import Link from "next/link";
|
| 5 |
|
|
|
|
| 10 |
|
| 11 |
useEffect(() => {
|
| 12 |
async function fetchData() {
|
| 13 |
+
// Fetch Google search results via server-side route
|
| 14 |
+
const response = await fetch(`/api/search?searchTerm=${searchParams.searchTerm}&start=${startIndex}`);
|
|
|
|
|
|
|
| 15 |
if (!response.ok) {
|
| 16 |
console.log(response);
|
| 17 |
throw new Error("Something went wrong");
|
| 18 |
}
|
|
|
|
| 19 |
const data = await response.json();
|
| 20 |
setResults(data.items);
|
| 21 |
|
| 22 |
+
// Prepare AI prompt
|
| 23 |
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?`;
|
| 24 |
|
| 25 |
+
// Fetch AI response via server-side route
|
| 26 |
const openaiRes = new EventSource('/api/llm', {
|
| 27 |
method: 'POST',
|
| 28 |
headers: {
|
|
|
|
| 31 |
body: JSON.stringify({ aiPrompt }),
|
| 32 |
});
|
| 33 |
|
| 34 |
+
// Listen for AI responses and append to state
|
| 35 |
openaiRes.onmessage = function(event) {
|
| 36 |
setAiResponse(aiResponse => aiResponse + event.data);
|
| 37 |
};
|
|
|
|
| 38 |
}
|
| 39 |
|
| 40 |
fetchData();
|
src/pages/api/google.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// pages/api/search.js
|
| 2 |
+
|
| 3 |
+
export default async function handler(req, res) {
|
| 4 |
+
const { searchTerm, startIndex = "1" } = req.query;
|
| 5 |
+
|
| 6 |
+
if (!searchTerm) {
|
| 7 |
+
res.status(400).json({ error: 'Search term is required' });
|
| 8 |
+
return;
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
const response = await fetch(
|
| 12 |
+
`https://www.googleapis.com/customsearch/v1?key=${process.env.API_KEY}&cx=${process.env.CONTEXT_KEY}&q=${searchTerm}&start=${startIndex}`
|
| 13 |
+
);
|
| 14 |
+
|
| 15 |
+
if (!response.ok) {
|
| 16 |
+
res.status(response.status).json({ error: 'Failed to fetch search results' });
|
| 17 |
+
return;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
const data = await response.json();
|
| 21 |
+
|
| 22 |
+
res.status(200).json(data);
|
| 23 |
+
}
|
| 24 |
+
|