Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
leeduckgo committed Nov 30, 2023
1 parent 90c4266 commit b2f4e51
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 111 deletions.
4 changes: 3 additions & 1 deletion packages/nextjs/pages/debug.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ const Debug: NextPage = () => {
))}
</div>
)}
<p><b>uuid: {uuid}</b></p>
<p>
<b>uuid: {uuid}</b>
</p>
{contractNames.map(contractName => (
<ContractUI
key={contractName}
Expand Down
227 changes: 117 additions & 110 deletions packages/nextjs/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import { useEffect, useState } from "react";
import { NextPage } from "next";
import { type } from "os";
import { useEffect, useState } from "react";
import ReactMarkdown from 'react-markdown';
import ReactMarkdown from "react-markdown";

//定义一个新的数据类型来记录后端返回的数据
export type resultByDataset ={
dataset_id:string,
results:search_result[]
}
export type resultByDataset = {
dataset_id: string;
results: search_result[];
};
//定义一个数据类型来记录每个搜索结果
export type search_result={
id: string,
data:string,
export type search_result = {
id: string;
data: string;
metadata: {};
}
};

const ETHSpace: NextPage = () => {
//在对后端发起请求后,将response的内容保存在results中
//如果用户选择使用mixed模式,则使用resultByDataset来记录结果
const [res,setRes]=useState<resultByDataset[]>([]);
const [res, setRes] = useState<resultByDataset[]>([]);
//设置默认是在我们提供的数据集而不是公共数据集中查询
const [qinPublic, setQinPublic] = useState(false);
//获取目前提供的数据集选项
Expand All @@ -29,7 +29,7 @@ const ETHSpace: NextPage = () => {
const [seaPrompt, setSeaPrompt] = useState("");
//仅在组件挂载时执行一次获取数据集列表
useEffect(() => {
fetchOptions();
fetchOptions();
// console.log(data);
});

Expand All @@ -48,63 +48,63 @@ const ETHSpace: NextPage = () => {
setOptions(["base-chain"]);
};
//获取search prompt与dataset名字后向后端发request
const handleonClick = async() => {
const handleonClick = async () => {
//每次查询前要先把res重置为空
setRes([]);
//如果用户选择的是mix混合搜索,则需要向所有get-cluster得来的VecDB列表发请求,但我觉得其实这个逻辑在后端做会比较好,尤其如果访问量大的话,3倍请求很容易造成服务器压力过大
if(dataset=='mixed'){
options.map(async (option)=>{
const response = await fetch("https://faas.movespace.xyz/api/v1/run?name=VectorAPI&func_name=search_data",{
method:"POST",
headers:{
'Content-Type':'application/json; charset=utf-8',
if (dataset == "mixed") {
options.map(async option => {
const response = await fetch("https://faas.movespace.xyz/api/v1/run?name=VectorAPI&func_name=search_data", {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
},
body: JSON.stringify({
params: [option, seaPrompt, 3],
}),
});
const data = await response.json();
// console.log(data);
//现在把每个接口的数据都保存下来
const res1: resultByDataset = {
dataset_id: data.result.dataset_id,
results: data.result.similarities.map((s: { id: any; data: any; metadata: any }) => {
return {
data: s.data,
metadata: s.metadata,
id: s.id,
};
}),
};
// console.log("this is res1:",res1);
// console.log("this is res before",res);
setRes(res => [res1, ...res]);
// console.log("this is res after",res);
});
// console.log(res);
} else {
const response = await fetch("https://faas.movespace.xyz/api/v1/run?name=VectorAPI&func_name=search_data", {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
},
body:JSON.stringify({
"params": [option, seaPrompt, 3]
})
body: JSON.stringify({
params: [dataset, seaPrompt, 5],
}),
});
const data=await response.json();
// console.log(data);
//现在把每个接口的数据都保存下来
const res1:resultByDataset={
dataset_id:data.result.dataset_id,
results:data.result.similarities.map((s: { id: any ; data: any; metadata: any; })=>{
const data = await response.json();
const res1: resultByDataset = {
dataset_id: data.result.dataset_id,
results: data.result.similarities.map((s: { data: any; metadata: any }) => {
return {
data:s.data,
metadata:s.metadata,
id: s.id,
}
})
data: s.data,
metadata: s.metadata,
};
}),
};
// console.log("this is res1:",res1);
// console.log("this is res before",res);
setRes(res=>[res1,...res]);
// console.log("this is res after",res);
});
// console.log(data.result.similarities);
setRes(res => [res1, ...res]);
// console.log(res);
}else{
const response = await fetch("https://faas.movespace.xyz/api/v1/run?name=VectorAPI&func_name=search_data",{
method:"POST",
headers:{
'Content-Type':'application/json; charset=utf-8',
},
body:JSON.stringify({
"params": [dataset, seaPrompt, 5]
})
});
const data=await response.json();
const res1:resultByDataset={
dataset_id:data.result.dataset_id,
results:data.result.similarities.map((s: { data: any; metadata: any; })=>{
return {
data:s.data,
metadata:s.metadata
}
})
};
// console.log(data.result.similarities);
setRes(res=>[res1,...res]);
// console.log(res);
}
};
return (
Expand Down Expand Up @@ -134,47 +134,57 @@ const ETHSpace: NextPage = () => {
style={{ width: "300px" }}
className="input input-bordered join-item"
value={seaPrompt}
onChange={(e) => {
onChange={e => {
setSeaPrompt(e.target.value);
}}
placeholder="Enter your prompt to search" />
placeholder="Enter your prompt to search"
/>
</div>
</div>
<div>
<div>
{!qinPublic ? (
<select
className="select select-bordered join-item"
onChange={(e) => {
onChange={e => {
setDataset(e.target.value);
}}>
<option value="mixed">mixed</option>
{
options.map((option, index) => (
<option key={index} value={option}>{option}</option>
))
}
}}
>
<option value="mixed">mixed</option>
{options.map((option, index) => (
<option key={index} value={option}>
{option}
</option>
))}
</select>
) : (
<input
className="input input-bordered join-item"
value={dataset}
onChange={(e) => {
onChange={e => {
setDataset(e.target.value);
}}
placeholder="Pls input the public dataset name" />
placeholder="Pls input the public dataset name"
/>
)}
</div>
</div>
<div className="indicator">
<button className="btn join-item" onClick={() => {
handleonClick();
}}>Search</button>
<button
className="btn join-item"
onClick={() => {
handleonClick();
}}
>
Search
</button>
</div>
</div>
<div className="hero-content text-left">
<span className="text-sm">
<p><b>Some search question examples: </b></p>
<p>
<b>Some search question examples: </b>
</p>
<p>* friend.tech</p>
<p>* social</p>
</span>
Expand All @@ -186,43 +196,40 @@ const ETHSpace: NextPage = () => {
<div className="mx-auto w-4/5 max-h-[600px] backdrop-blur-lg backdrop-filter p-10 m-10 rounded-lg opacity-80 shadow-md overflow-auto overflow-y-auto">
<h2 className="text-4xl font-bold mb-1">Search Results</h2>
<div>
{
res.map((r,index)=>(
<div key={index} className="collapse bg-base-200 m-5 overflow-x-auto">
<input type="checkbox" className="peer" />
<div className="collapse-title bg-primary text-primary-content peer-checked:bg-secondary peer-checked:text-secondary-content">
Results from {r.dataset_id}
</div>
<div className="collapse-content bg-primary text-primary-content peer-checked:bg-secondary peer-checked:text-secondary-content">
{
r.results.map((item,index)=>(
<div key={index}>
<div className="divider"></div>
<span className="text-xl">Data</span>
<pre className="text-base mb-3">
<ReactMarkdown>{item.data}</ReactMarkdown>
</pre>
<span className="text-xl">Metadata</span>
<pre className="text-base">{JSON.stringify(item.metadata,null,2)}</pre>
<span className="text-xl">id</span>
<pre className="text-base"><b>{item.id}</b></pre>
<a href={"/debug?uuid=" + item.id} target="_blank" rel="noreferrer">
<button className="btn join-item" >Tag this Proj!</button>
</a>
<button className="btn join-item" >Tag the TXs for this project! //TODO</button>
</div>
))
}
</div>
{res.map((r, index) => (
<div key={index} className="collapse bg-base-200 m-5 overflow-x-auto">
<input type="checkbox" className="peer" />
<div className="collapse-title bg-primary text-primary-content peer-checked:bg-secondary peer-checked:text-secondary-content">
Results from {r.dataset_id}
</div>
))
}
<div className="collapse-content bg-primary text-primary-content peer-checked:bg-secondary peer-checked:text-secondary-content">
{r.results.map((item, index) => (
<div key={index}>
<div className="divider"></div>
<span className="text-xl">Data</span>
<pre className="text-base mb-3">
<ReactMarkdown>{item.data}</ReactMarkdown>
</pre>
<span className="text-xl">Metadata</span>
<pre className="text-base">{JSON.stringify(item.metadata, null, 2)}</pre>
<span className="text-xl">id</span>
<pre className="text-base">
<b>{item.id}</b>
</pre>
<a href={"/debug?uuid=" + item.id} target="_blank" rel="noreferrer">
<button className="btn join-item">Tag this Proj!</button>
</a>
<button className="btn join-item">Tag the TXs for this project! //TODO</button>
</div>
))}
</div>
</div>
))}
</div>
</div>

</div>
</div>
)
);
};

export default ETHSpace;
export default ETHSpace;

0 comments on commit b2f4e51

Please sign in to comment.