summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app/src
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-12-28 13:54:09 -0500
committerFrank <[email protected]>2025-12-28 13:54:11 -0500
commit81c5e7b9ed218e342aba154cdd5ed436c7775966 (patch)
treea85f85d0496818a2ddf6f169308252b22845ec8d /packages/console/app/src
parentddf4897eaa7580bbc473923f4d3026a628e58a65 (diff)
downloadopencode-81c5e7b9ed218e342aba154cdd5ed436c7775966.tar.gz
opencode-81c5e7b9ed218e342aba154cdd5ed436c7775966.zip
wip: benchmark
Diffstat (limited to 'packages/console/app/src')
-rw-r--r--packages/console/app/src/routes/bench/index.tsx52
-rw-r--r--packages/console/app/src/routes/bench/submission.ts29
2 files changed, 81 insertions, 0 deletions
diff --git a/packages/console/app/src/routes/bench/index.tsx b/packages/console/app/src/routes/bench/index.tsx
new file mode 100644
index 000000000..adf31fbc6
--- /dev/null
+++ b/packages/console/app/src/routes/bench/index.tsx
@@ -0,0 +1,52 @@
+import { Title } from "@solidjs/meta"
+import { createAsync, query } from "@solidjs/router"
+import { For } from "solid-js"
+import { Database, desc } from "@opencode-ai/console-core/drizzle/index.js"
+import { BenchmarkTable } from "@opencode-ai/console-core/schema/benchmark.sql.js"
+
+async function getBenchmarks() {
+ "use server"
+ const rows = await Database.use((tx) =>
+ tx.select().from(BenchmarkTable).orderBy(desc(BenchmarkTable.timeCreated)).limit(100),
+ )
+ return rows.map((row) => {
+ const parsed = JSON.parse(row.result) as { averageScore: number }
+ return {
+ agent: row.agent,
+ model: row.model,
+ averageScore: parsed.averageScore,
+ }
+ })
+}
+
+const queryBenchmarks = query(getBenchmarks, "benchmarks.list")
+
+export default function Bench() {
+ const benchmarks = createAsync(() => queryBenchmarks())
+
+ return (
+ <main data-page="bench">
+ <Title>Benchmark</Title>
+ <table>
+ <thead>
+ <tr>
+ <th>Agent</th>
+ <th>Model</th>
+ <th>Average Score</th>
+ </tr>
+ </thead>
+ <tbody>
+ <For each={benchmarks()}>
+ {(row) => (
+ <tr>
+ <td>{row.agent}</td>
+ <td>{row.model}</td>
+ <td>{row.averageScore}</td>
+ </tr>
+ )}
+ </For>
+ </tbody>
+ </table>
+ </main>
+ )
+}
diff --git a/packages/console/app/src/routes/bench/submission.ts b/packages/console/app/src/routes/bench/submission.ts
new file mode 100644
index 000000000..94639439b
--- /dev/null
+++ b/packages/console/app/src/routes/bench/submission.ts
@@ -0,0 +1,29 @@
+import type { APIEvent } from "@solidjs/start/server"
+import { Database } from "@opencode-ai/console-core/drizzle/index.js"
+import { BenchmarkTable } from "@opencode-ai/console-core/schema/benchmark.sql.js"
+import { Identifier } from "@opencode-ai/console-core/identifier.js"
+
+interface SubmissionBody {
+ model: string
+ agent: string
+ result: string
+}
+
+export async function POST(event: APIEvent) {
+ const body = (await event.request.json()) as SubmissionBody
+
+ if (!body.model || !body.agent || !body.result) {
+ return Response.json({ error: "All fields are required" }, { status: 400 })
+ }
+
+ await Database.use((tx) =>
+ tx.insert(BenchmarkTable).values({
+ id: Identifier.create("benchmark"),
+ model: body.model,
+ agent: body.agent,
+ result: body.result,
+ }),
+ )
+
+ return Response.json({ success: true }, { status: 200 })
+}