Spaces:
Build error
Build error
import getDB from "@/utils/getDB" | |
import Head from "next/head" | |
import Link from "next/link" | |
export const getStaticPaths = async () => { | |
const db = await getDB() | |
const prompts = await db.all(`SELECT * FROM prompts`) | |
return { | |
paths: prompts.map((prompt) => ({ | |
params: { slug: prompt.slug }, | |
})), | |
fallback: false, | |
} | |
} | |
export const getStaticProps = async (props) => { | |
const db = await getDB() | |
const slug = props.params.slug | |
const prompt = await db.get(`SELECT * FROM prompts WHERE slug = ?`, [slug]) | |
// get results with their model (join) | |
const results = await db.all( | |
`SELECT * FROM results INNER JOIN models ON results.model = models.id WHERE prompt = ? ORDER BY models.name ASC`, | |
[prompt.id] | |
) | |
return { props: { prompt, results } } | |
} | |
export default function Prompt({ prompt, results }) { | |
return ( | |
<> | |
<Head> | |
<title>LLM Benchmark</title> | |
<meta name="description" content={`Asking models: ${prompt.text}`} /> | |
</Head> | |
<h3>Prompt asked:</h3> | |
<br /> | |
<pre style={{ maxWidth: 800 }}>{prompt.text}</pre> | |
<br /> | |
{prompt.note && <p>Note: {prompt.note}</p>} | |
<br /> | |
<Link href="/">Back to home</Link> | |
<br /> | |
<br /> | |
<table> | |
<thead> | |
<tr> | |
<th>Model</th> | |
<th>Answer</th> | |
<th>Latency</th> | |
<th>Chars / s</th> | |
</tr> | |
</thead> | |
<tbody> | |
{results.map((result, i) => ( | |
<tr key={i}> | |
<td> | |
<Link | |
href={`/model/${result.api_id | |
.split("/") | |
.pop() | |
.toLowerCase()}`} | |
> | |
{result.name} | |
</Link> | |
</td> | |
<td> | |
<pre>{result.result.trim()}</pre> | |
</td> | |
<td>{result.duration}ms</td> | |
<td>{result.rate}</td> | |
</tr> | |
))} | |
</tbody> | |
</table> | |
<br /> | |
<Link href="/">Back to home</Link> | |
<br /> | |
<br /> | |
<table style={{ maxWidth: 600 }}> | |
<th> | |
<p> | |
Edit: as this got popular, I added an email form to receive | |
notifications for future benchmark results: | |
</p> | |
<iframe | |
src="https://embeds.beehiiv.com/65bd6af1-2dea-417a-baf2-b65bc27e1610?slim=true" | |
height="52" | |
frameborder="0" | |
scrolling="no" | |
style={{ | |
width: 400, | |
border: "none", | |
transform: "scale(0.8)", | |
transformOrigin: "left", | |
}} | |
></iframe> | |
<br /> | |
<small>(no spam, max 1 email per month)</small> | |
</th> | |
</table> | |
<br /> | |
</> | |
) | |
} | |