@vercel/agent-eval-playground 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/fallback-build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3702960d._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__3702960d._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__4228b9c3._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__4228b9c3._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a216b589._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__a216b589._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ac2a456c._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__ac2a456c._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b8fc4094._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__b8fc4094._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__c73d60f7._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__c73d60f7._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__f286e9a8._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__f286e9a8._.js.map +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +2 -2
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/lib/data.ts +55 -7
- package/lib/types.ts +1 -0
- package/package.json +4 -4
- /package/.next/static/{18FWD5uOgTIXkpCwU5Mf_ → e-_lBXo-NK4NsMjf8KVfw}/_buildManifest.js +0 -0
- /package/.next/static/{18FWD5uOgTIXkpCwU5Mf_ → e-_lBXo-NK4NsMjf8KVfw}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{18FWD5uOgTIXkpCwU5Mf_ → e-_lBXo-NK4NsMjf8KVfw}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/playground/lib/data.ts","../../../../../../packages/playground/components/ui/card.tsx","../../../../../../packages/playground/components/ShowMore.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/components/EvalsPage.tsx","../../../../../../packages/playground/app/evals/page.tsx"],"sourcesContent":["/**\n * Server-side data access for the playground.\n * Reads JSON files from the results/ and evals/ directories.\n * Directory paths are provided via RESULTS_DIR and EVALS_DIR env vars.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { join, resolve } from \"path\";\n\nfunction getResultsDir(): string {\n return resolve(process.env.RESULTS_DIR || \"./results\");\n}\n\nfunction getEvalsDir(): string {\n return resolve(process.env.EVALS_DIR || \"./evals\");\n}\n\n/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */\nexport function listExperiments(limit?: number) {\n const resultsDir = getResultsDir();\n\n if (!existsSync(resultsDir)) {\n return { items: [], total: 0 };\n }\n\n const entries = readdirSync(resultsDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const expDir = join(resultsDir, name);\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n let latestPassRate: number | undefined;\n let latestTotalRuns = 0;\n let latestPassedRuns = 0;\n\n if (timestamps.length > 0) {\n const latestDir = join(expDir, timestamps[0]);\n const evalDirs = readdirSync(latestDir, { withFileTypes: true }).filter(\n (e) => e.isDirectory()\n );\n\n for (const evalDir of evalDirs) {\n const summaryPath = join(latestDir, evalDir.name, \"summary.json\");\n if (existsSync(summaryPath)) {\n try {\n const summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n latestTotalRuns += summary.totalRuns ?? 0;\n latestPassedRuns += summary.passedRuns ?? 0;\n } catch {\n // Skip invalid summary files\n }\n }\n }\n\n if (latestTotalRuns > 0) {\n latestPassRate = (latestPassedRuns / latestTotalRuns) * 100;\n }\n }\n\n return {\n name,\n timestamps,\n latestTimestamp: timestamps[0] ?? null,\n latestPassRate,\n latestTotalRuns,\n latestPassedRuns,\n };\n });\n\n return { items, total };\n}\n\n/** Get timestamps for a specific experiment */\nexport function getExperiment(name: string) {\n const expDir = join(getResultsDir(), name);\n\n if (!existsSync(expDir)) {\n return null;\n }\n\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n return { name, timestamps, latestTimestamp: timestamps[0] ?? null };\n}\n\n/** Get full experiment detail for a specific timestamp */\nexport function getExperimentDetail(name: string, timestamp: string) {\n const runDir = join(getResultsDir(), name, timestamp);\n\n if (!existsSync(runDir)) {\n return null;\n }\n\n const evalDirs = readdirSync(runDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n const evals = evalDirs.map((evalName) => {\n const evalDir = join(runDir, evalName);\n const summaryPath = join(evalDir, \"summary.json\");\n\n let summary = {\n totalRuns: 0,\n passedRuns: 0,\n passRate: \"0%\",\n meanDuration: 0,\n };\n if (existsSync(summaryPath)) {\n try {\n summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n } catch {\n // Use defaults\n }\n }\n\n // List run directories\n const runDirs = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name.startsWith(\"run-\"))\n .map((e) => e.name)\n .sort();\n\n // Read each run's result.json\n const runs = runDirs.map((runDirName) => {\n const resultPath = join(evalDir, runDirName, \"result.json\");\n let result = null;\n if (existsSync(resultPath)) {\n try {\n result = JSON.parse(readFileSync(resultPath, \"utf-8\"));\n } catch {\n // Skip\n }\n }\n return { name: runDirName, result };\n });\n\n return {\n name: evalName,\n totalRuns: summary.totalRuns,\n passedRuns: summary.passedRuns,\n passRate:\n typeof summary.passRate === \"string\"\n ? parseFloat(summary.passRate)\n : summary.passRate,\n meanDuration: summary.meanDuration,\n runs,\n };\n });\n\n return { name, timestamp, evals };\n}\n\n/** Get result for a specific run */\nexport function getRunResult(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const resultPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"result.json\"\n );\n\n if (!existsSync(resultPath)) {\n return null;\n }\n\n try {\n return { result: JSON.parse(readFileSync(resultPath, \"utf-8\")) };\n } catch {\n return null;\n }\n}\n\n/** Get parsed transcript for a specific run */\nexport function getTranscript(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const transcriptPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"transcript.json\"\n );\n\n if (!existsSync(transcriptPath)) {\n return null;\n }\n\n try {\n return JSON.parse(readFileSync(transcriptPath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\n/** List evals from the evals directory. Pass limit to cap per-item reads. */\nexport function listEvals(limit?: number) {\n const evalsDir = getEvalsDir();\n\n if (!existsSync(evalsDir)) {\n return { items: [], total: 0 };\n }\n\n // Recursively discover all evals (directories with PROMPT.md)\n const entries: string[] = [];\n function walk(dir: string, basePath: string = \"\") {\n const dirEntries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of dirEntries) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\")) {\n continue;\n }\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const entryPath = join(dir, entry.name);\n const promptPath = join(entryPath, \"PROMPT.md\");\n\n // Check if this is an eval directory (has PROMPT.md)\n if (existsSync(promptPath)) {\n entries.push(relativePath);\n } else {\n // Not an eval, recurse into it\n walk(entryPath, relativePath);\n }\n }\n }\n\n walk(evalsDir);\n entries.sort();\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const evalDir = join(evalsDir, name);\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n const files = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name);\n\n return { name, prompt, files };\n });\n\n return { items, total };\n}\n\n/** Get detail for a specific eval */\nexport function getEvalDetail(name: string) {\n const evalDir = join(getEvalsDir(), name);\n\n if (!existsSync(evalDir)) {\n return null;\n }\n\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n // Recursively list files\n const files: string[] = [];\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relativePath);\n } else {\n files.push(relativePath);\n }\n }\n }\n walk(evalDir, \"\");\n\n // Read file contents for key files\n const fileContents: Record<string, string> = {};\n const keyFiles = [\"PROMPT.md\", \"EVAL.ts\", \"EVAL.tsx\", \"package.json\"];\n for (const file of keyFiles) {\n const filePath = join(evalDir, file);\n if (existsSync(filePath)) {\n try {\n fileContents[file] = readFileSync(filePath, \"utf-8\");\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return { name, prompt, files, fileContents };\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-xs/relaxed\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-4 group-data-[size=sm]/card:px-3\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ShowMore = registerClientReference(\n function() { throw new Error(\"Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ShowMore.tsx\",\n \"ShowMore\",\n);\n","import Link from \"next/link\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { ShowMore } from \"@/components/ShowMore\";\n\ninterface EvalInfo {\n name: string;\n prompt: string;\n files: string[];\n}\n\ninterface EvalsPageProps {\n evals: EvalInfo[];\n total: number;\n showAll: boolean;\n}\n\nexport function EvalsPage({ evals, total, showAll }: EvalsPageProps) {\n return (\n <div className=\"space-y-6\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Evals</h1>\n <p className=\"text-muted-foreground mt-1\">\n Browse all eval fixtures in your project.\n </p>\n </div>\n\n {evals.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center\">\n <p className=\"text-muted-foreground text-lg\">No evals found</p>\n <p className=\"text-muted-foreground text-sm mt-2\">\n Create evals in your{\" \"}\n <code className=\"text-foreground bg-muted px-1.5 py-0.5 rounded text-xs\">\n evals/\n </code>{\" \"}\n directory.\n </p>\n </CardContent>\n </Card>\n ) : (\n <ShowMore total={total} showAllHref={showAll ? undefined : \"/evals?all\"} className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {evals.map((evalInfo) => (\n <Link key={evalInfo.name} href={`/evals/${encodeURIComponent(evalInfo.name)}`} className=\"block cursor-pointer\">\n <Card className=\"transition-colors hover:bg-muted\">\n <CardHeader>\n <CardTitle className=\"text-base\">{evalInfo.name}</CardTitle>\n </CardHeader>\n <CardContent>\n {evalInfo.prompt && (\n <p className=\"text-sm text-muted-foreground line-clamp-3 mb-3\">\n {evalInfo.prompt.slice(0, 200)}\n {evalInfo.prompt.length > 200 ? \"...\" : \"\"}\n </p>\n )}\n <div className=\"flex flex-wrap gap-1\">\n {evalInfo.files.slice(0, 5).map((file) => (\n <Badge\n key={file}\n variant=\"secondary\"\n className=\"text-xs font-mono\"\n >\n {file}\n </Badge>\n ))}\n {evalInfo.files.length > 5 && (\n <Badge variant=\"outline\" className=\"text-xs\">\n +{evalInfo.files.length - 5} more\n </Badge>\n )}\n </div>\n </CardContent>\n </Card>\n </Link>\n ))}\n </ShowMore>\n )}\n </div>\n );\n}\n","import { EvalsPage } from \"@/components/EvalsPage\";\nimport { listEvals } from \"@/lib/data\";\n\nexport const dynamic = \"force-dynamic\";\n\nconst LIMIT = 21; // 7 rows of 3\n\nexport default async function EvalsRoute({\n searchParams,\n}: {\n searchParams: Promise<{ all?: string }>;\n}) {\n const { all } = await searchParams;\n const showAll = all !== undefined;\n const { items: evals, total } = listEvals(showAll ? undefined : LIMIT);\n\n return <EvalsPage evals={evals} total={total} showAll={showAll} />;\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/playground/lib/data.ts","../../../../../../packages/playground/components/ui/card.tsx","../../../../../../packages/playground/components/ShowMore.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/playground/components/EvalsPage.tsx","../../../../../../packages/playground/app/evals/page.tsx"],"sourcesContent":["/**\n * Server-side data access for the playground.\n * Reads JSON files from the results/ and evals/ directories.\n * Directory paths are provided via RESULTS_DIR and EVALS_DIR env vars.\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"fs\";\nimport { join, resolve } from \"path\";\n\nfunction getResultsDir(): string {\n return resolve(process.env.RESULTS_DIR || \"./results\");\n}\n\nfunction getEvalsDir(): string {\n return resolve(process.env.EVALS_DIR || \"./evals\");\n}\n\n/** Check if a directory name looks like an ISO timestamp (used as run ID) */\nfunction isTimestamp(name: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}T/.test(name);\n}\n\n/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */\nexport function listExperiments(limit?: number) {\n const resultsDir = getResultsDir();\n\n if (!existsSync(resultsDir)) {\n return { items: [], total: 0 };\n }\n\n // Discover experiments by walking the directory tree until we find\n // timestamp directories. The path from resultsDir to the parent of the\n // first timestamp is the experiment name (e.g. \"my-config/openai/gpt-5.2-codex\").\n const entries: string[] = [];\n\n function walk(dir: string, prefix: string) {\n const children = readdirSync(dir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name);\n\n // If any child looks like a timestamp, this directory is an experiment\n if (children.some(isTimestamp)) {\n entries.push(prefix);\n return;\n }\n\n // Otherwise keep recursing\n for (const child of children) {\n walk(join(dir, child), prefix ? `${prefix}/${child}` : child);\n }\n }\n\n walk(resultsDir, \"\");\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const expDir = join(resultsDir, name);\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && isTimestamp(e.name))\n .map((e) => e.name)\n .sort()\n .reverse();\n\n let latestPassRate: number | undefined;\n let latestTotalRuns = 0;\n let latestPassedRuns = 0;\n\n if (timestamps.length > 0) {\n const latestDir = join(expDir, timestamps[0]);\n const evalDirs = readdirSync(latestDir, { withFileTypes: true }).filter(\n (e) => e.isDirectory()\n );\n\n for (const evalDir of evalDirs) {\n const summaryPath = join(latestDir, evalDir.name, \"summary.json\");\n if (existsSync(summaryPath)) {\n try {\n const summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n latestTotalRuns += summary.totalRuns ?? 0;\n latestPassedRuns += summary.passedRuns ?? 0;\n } catch {\n // Skip invalid summary files\n }\n }\n }\n\n if (latestTotalRuns > 0) {\n latestPassRate = (latestPassedRuns / latestTotalRuns) * 100;\n }\n }\n\n return {\n name,\n timestamps,\n latestTimestamp: timestamps[0] ?? null,\n latestPassRate,\n latestTotalRuns,\n latestPassedRuns,\n };\n });\n\n return { items, total };\n}\n\n/** Get timestamps for a specific experiment */\nexport function getExperiment(name: string) {\n const expDir = join(getResultsDir(), name);\n\n if (!existsSync(expDir)) {\n return null;\n }\n\n const timestamps = readdirSync(expDir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n .reverse();\n\n return { name, timestamps, latestTimestamp: timestamps[0] ?? null };\n}\n\n/** Get full experiment detail for a specific timestamp */\nexport function getExperimentDetail(name: string, timestamp: string) {\n const runDir = join(getResultsDir(), name, timestamp);\n\n if (!existsSync(runDir)) {\n return null;\n }\n\n // Recursively discover all eval result directories (directories with summary.json)\n const evalDirs: string[] = [];\n function walk(dir: string, basePath: string = \"\") {\n const dirEntries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of dirEntries) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\") || entry.name.startsWith(\"run-\")) {\n continue;\n }\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const entryPath = join(dir, entry.name);\n const summaryPath = join(entryPath, \"summary.json\");\n\n // Check if this is an eval result directory (has summary.json)\n if (existsSync(summaryPath)) {\n evalDirs.push(relativePath);\n } else {\n // Not an eval result, recurse into it\n walk(entryPath, relativePath);\n }\n }\n }\n\n walk(runDir);\n evalDirs.sort();\n\n const evals = evalDirs.map((evalName) => {\n const evalDir = join(runDir, evalName);\n const summaryPath = join(evalDir, \"summary.json\");\n\n let summary = {\n totalRuns: 0,\n passedRuns: 0,\n passRate: \"0%\",\n meanDuration: 0,\n };\n if (existsSync(summaryPath)) {\n try {\n summary = JSON.parse(readFileSync(summaryPath, \"utf-8\"));\n } catch {\n // Use defaults\n }\n }\n\n // List run directories\n const runDirs = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isDirectory() && e.name.startsWith(\"run-\"))\n .map((e) => e.name)\n .sort();\n\n // Read each run's result.json\n const runs = runDirs.map((runDirName) => {\n const resultPath = join(evalDir, runDirName, \"result.json\");\n let result = null;\n if (existsSync(resultPath)) {\n try {\n result = JSON.parse(readFileSync(resultPath, \"utf-8\"));\n } catch {\n // Skip\n }\n }\n return { name: runDirName, result };\n });\n\n return {\n name: evalName,\n totalRuns: summary.totalRuns,\n passedRuns: summary.passedRuns,\n passRate:\n typeof summary.passRate === \"string\"\n ? parseFloat(summary.passRate)\n : summary.passRate,\n meanDuration: summary.meanDuration,\n runs,\n };\n });\n\n return { name, timestamp, evals };\n}\n\n/** Get result for a specific run */\nexport function getRunResult(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const resultPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"result.json\"\n );\n\n if (!existsSync(resultPath)) {\n return null;\n }\n\n try {\n return { result: JSON.parse(readFileSync(resultPath, \"utf-8\")) };\n } catch {\n return null;\n }\n}\n\n/** Get parsed transcript for a specific run */\nexport function getTranscript(\n experiment: string,\n timestamp: string,\n evalName: string,\n run: string\n) {\n const transcriptPath = join(\n getResultsDir(),\n experiment,\n timestamp,\n evalName,\n run,\n \"transcript.json\"\n );\n\n if (!existsSync(transcriptPath)) {\n return null;\n }\n\n try {\n return JSON.parse(readFileSync(transcriptPath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\n/** List evals from the evals directory. Pass limit to cap per-item reads. */\nexport function listEvals(limit?: number) {\n const evalsDir = getEvalsDir();\n\n if (!existsSync(evalsDir)) {\n return { items: [], total: 0 };\n }\n\n // Recursively discover all evals (directories with PROMPT.md)\n const entries: string[] = [];\n function walk(dir: string, basePath: string = \"\") {\n const dirEntries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of dirEntries) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\")) {\n continue;\n }\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const entryPath = join(dir, entry.name);\n const promptPath = join(entryPath, \"PROMPT.md\");\n\n // Check if this is an eval directory (has PROMPT.md)\n if (existsSync(promptPath)) {\n entries.push(relativePath);\n } else {\n // Not an eval, recurse into it\n walk(entryPath, relativePath);\n }\n }\n }\n\n walk(evalsDir);\n entries.sort();\n\n const total = entries.length;\n const toProcess = limit ? entries.slice(0, limit) : entries;\n\n const items = toProcess.map((name) => {\n const evalDir = join(evalsDir, name);\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n const files = readdirSync(evalDir, { withFileTypes: true })\n .filter((e) => e.isFile())\n .map((e) => e.name);\n\n return { name, prompt, files };\n });\n\n return { items, total };\n}\n\n/** Get detail for a specific eval */\nexport function getEvalDetail(name: string) {\n const evalDir = join(getEvalsDir(), name);\n\n if (!existsSync(evalDir)) {\n return null;\n }\n\n const promptPath = join(evalDir, \"PROMPT.md\");\n let prompt = \"\";\n if (existsSync(promptPath)) {\n prompt = readFileSync(promptPath, \"utf-8\");\n }\n\n // Recursively list files\n const files: string[] = [];\n function walk(dir: string, prefix: string) {\n const entries = readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n walk(join(dir, entry.name), relativePath);\n } else {\n files.push(relativePath);\n }\n }\n }\n walk(evalDir, \"\");\n\n // Read file contents for key files\n const fileContents: Record<string, string> = {};\n const keyFiles = [\"PROMPT.md\", \"EVAL.ts\", \"EVAL.tsx\", \"package.json\"];\n for (const file of keyFiles) {\n const filePath = join(evalDir, file);\n if (existsSync(filePath)) {\n try {\n fileContents[file] = readFileSync(filePath, \"utf-8\");\n } catch {\n // Skip unreadable files\n }\n }\n }\n\n return { name, prompt, files, fileContents };\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-sm font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-xs/relaxed\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-4 group-data-[size=sm]/card:px-3\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ShowMore = registerClientReference(\n function() { throw new Error(\"Attempted to call ShowMore() from the server but ShowMore is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/playground/components/ShowMore.tsx\",\n \"ShowMore\",\n);\n","import Link from \"next/link\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { ShowMore } from \"@/components/ShowMore\";\n\ninterface EvalInfo {\n name: string;\n prompt: string;\n files: string[];\n}\n\ninterface EvalsPageProps {\n evals: EvalInfo[];\n total: number;\n showAll: boolean;\n}\n\nexport function EvalsPage({ evals, total, showAll }: EvalsPageProps) {\n return (\n <div className=\"space-y-6\">\n <div>\n <h1 className=\"text-2xl font-bold tracking-tight\">Evals</h1>\n <p className=\"text-muted-foreground mt-1\">\n Browse all eval fixtures in your project.\n </p>\n </div>\n\n {evals.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center\">\n <p className=\"text-muted-foreground text-lg\">No evals found</p>\n <p className=\"text-muted-foreground text-sm mt-2\">\n Create evals in your{\" \"}\n <code className=\"text-foreground bg-muted px-1.5 py-0.5 rounded text-xs\">\n evals/\n </code>{\" \"}\n directory.\n </p>\n </CardContent>\n </Card>\n ) : (\n <ShowMore total={total} showAllHref={showAll ? undefined : \"/evals?all\"} className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {evals.map((evalInfo) => (\n <Link key={evalInfo.name} href={`/evals/${encodeURIComponent(evalInfo.name)}`} className=\"block cursor-pointer\">\n <Card className=\"transition-colors hover:bg-muted\">\n <CardHeader>\n <CardTitle className=\"text-base\">{evalInfo.name}</CardTitle>\n </CardHeader>\n <CardContent>\n {evalInfo.prompt && (\n <p className=\"text-sm text-muted-foreground line-clamp-3 mb-3\">\n {evalInfo.prompt.slice(0, 200)}\n {evalInfo.prompt.length > 200 ? \"...\" : \"\"}\n </p>\n )}\n <div className=\"flex flex-wrap gap-1\">\n {evalInfo.files.slice(0, 5).map((file) => (\n <Badge\n key={file}\n variant=\"secondary\"\n className=\"text-xs font-mono\"\n >\n {file}\n </Badge>\n ))}\n {evalInfo.files.length > 5 && (\n <Badge variant=\"outline\" className=\"text-xs\">\n +{evalInfo.files.length - 5} more\n </Badge>\n )}\n </div>\n </CardContent>\n </Card>\n </Link>\n ))}\n </ShowMore>\n )}\n </div>\n );\n}\n","import { EvalsPage } from \"@/components/EvalsPage\";\nimport { listEvals } from \"@/lib/data\";\n\nexport const dynamic = \"force-dynamic\";\n\nconst LIMIT = 21; // 7 rows of 3\n\nexport default async function EvalsRoute({\n searchParams,\n}: {\n searchParams: Promise<{ all?: string }>;\n}) {\n const { all } = await searchParams;\n const showAll = all !== undefined;\n const { items: evals, total } = listEvals(showAll ? undefined : LIMIT);\n\n return <EvalsPage evals={evals} total={total} showAll={showAll} />;\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--18FWD5uOgTIXkpCwU5Mf_--><html lang="en" class="dark figtree_e520db2c-module__K_nIxW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/b7a73603aa202938.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/47fcac10c45fd42a.js"/><script src="/_next/static/chunks/806bdb8e4a6a9b95.js" async=""></script><script src="/_next/static/chunks/db1f4d63ff1d1c41.js" async=""></script><script src="/_next/static/chunks/f2f58a7e93290fbb.js" async=""></script><script src="/_next/static/chunks/turbopack-a58403ee054004b8.js" async=""></script><script src="/_next/static/chunks/7c92e96509cd355e.js" async=""></script><script src="/_next/static/chunks/d2be314c3ece3fbe.js" async=""></script><title>404: This page could not be found.</title><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>Agent Eval Playground</title><meta name="description" content="Browse experiment results, inspect agent transcripts, and compare runs"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-background"><header class="sticky top-0 z-50 bg-background"><div class="flex h-14 items-center justify-between px-4 gap-6"><div class="flex items-center gap-2"><a title="Made with love by Vercel" href="https://vercel.com"><svg data-testid="geist-icon" height="18" stroke-linejoin="round" viewBox="0 0 16 16" width="18" style="color:currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 1L16 15H0L8 1Z" fill="currentColor"></path></svg></a><span class="text-(--ds-gray-500)"><svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" style="color:currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.01526 15.3939L4.3107 14.7046L10.3107 0.704556L10.6061 0.0151978L11.9849 0.606077L11.6894 1.29544L5.68942 15.2954L5.39398 15.9848L4.01526 15.3939Z" fill="currentColor"></path></svg></span><a href="/"><span class="font-medium tracking-tight text-lg">agent-eval</span></a></div><nav class="flex items-baseline gap-4"><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/experiments">Experiments</a><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/compare">Compare</a><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/evals">Evals</a></nav></div></header><main class="mx-auto max-w-5xl px-6 py-8 text-sm"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><script src="/_next/static/chunks/47fcac10c45fd42a.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[22016,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"\"]\n3:I[39756,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n4:I[37457,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n9:I[68027,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n:HL[\"/_next/static/chunks/b7a73603aa202938.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"18FWD5uOgTIXkpCwU5Mf_\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/b7a73603aa202938.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/7c92e96509cd355e.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/d2be314c3ece3fbe.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark figtree_e520db2c-module__K_nIxW__variable\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-background\",\"children\":[[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-50 bg-background\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-14 items-center justify-between px-4 gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"$L2\",null,{\"href\":\"https://vercel.com\",\"title\":\"Made with love by Vercel\",\"children\":[\"$\",\"svg\",null,{\"data-testid\":\"geist-icon\",\"height\":\"18\",\"strokeLinejoin\":\"round\",\"viewBox\":\"0 0 16 16\",\"width\":\"18\",\"style\":{\"color\":\"currentcolor\"},\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M8 1L16 15H0L8 1Z\",\"fill\":\"currentColor\"}]}]}],[\"$\",\"span\",null,{\"className\":\"text-(--ds-gray-500)\",\"children\":[\"$\",\"svg\",null,{\"data-testid\":\"geist-icon\",\"height\":\"16\",\"strokeLinejoin\":\"round\",\"viewBox\":\"0 0 16 16\",\"width\":\"16\",\"style\":{\"color\":\"currentcolor\"},\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M4.01526 15.3939L4.3107 14.7046L10.3107 0.704556L10.6061 0.0151978L11.9849 0.606077L11.6894 1.29544L5.68942 15.2954L5.39398 15.9848L4.01526 15.3939Z\",\"fill\":\"currentColor\"}]}]}],[\"$\",\"$L2\",null,{\"href\":\"/\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-medium tracking-tight text-lg\",\"children\":\"agent-eval\"}]}]]}],[\"$\",\"nav\",null,{\"className\":\"flex items-baseline gap-4\",\"children\":[[\"$\",\"$L2\",null,{\"href\":\"/experiments\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Experiments\"}],[\"$\",\"$L2\",null,{\"href\":\"/compare\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Compare\"}],[\"$\",\"$L2\",null,{\"href\":\"/evals\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Evals\"}]]}]]}]}],[\"$\",\"main\",null,{\"className\":\"mx-auto max-w-5xl px-6 py-8 text-sm\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],\"$L5\",\"$L6\"]}]}]],null,\"$L7\"]}],{},null,false,false]},null,false,false]},null,false,false],\"$L8\",false]],\"m\":\"$undefined\",\"G\":[\"$9\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:I[97367,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[97367,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"ViewportBoundary\"]\nf:I[97367,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"MetadataBoundary\"]\n5:[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}]\n6:[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]\n7:[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]\n8:[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:null\n10:[[\"$\",\"title\",\"0\",{\"children\":\"Agent Eval Playground\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Browse experiment results, inspect agent transcripts, and compare runs\"}]]\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><!--e__lBXo_NK4NsMjf8KVfw--><html lang="en" class="dark figtree_e520db2c-module__K_nIxW__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/b7a73603aa202938.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/47fcac10c45fd42a.js"/><script src="/_next/static/chunks/806bdb8e4a6a9b95.js" async=""></script><script src="/_next/static/chunks/db1f4d63ff1d1c41.js" async=""></script><script src="/_next/static/chunks/f2f58a7e93290fbb.js" async=""></script><script src="/_next/static/chunks/turbopack-a58403ee054004b8.js" async=""></script><script src="/_next/static/chunks/7c92e96509cd355e.js" async=""></script><script src="/_next/static/chunks/d2be314c3ece3fbe.js" async=""></script><title>404: This page could not be found.</title><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>Agent Eval Playground</title><meta name="description" content="Browse experiment results, inspect agent transcripts, and compare runs"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-background"><header class="sticky top-0 z-50 bg-background"><div class="flex h-14 items-center justify-between px-4 gap-6"><div class="flex items-center gap-2"><a title="Made with love by Vercel" href="https://vercel.com"><svg data-testid="geist-icon" height="18" stroke-linejoin="round" viewBox="0 0 16 16" width="18" style="color:currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 1L16 15H0L8 1Z" fill="currentColor"></path></svg></a><span class="text-(--ds-gray-500)"><svg data-testid="geist-icon" height="16" stroke-linejoin="round" viewBox="0 0 16 16" width="16" style="color:currentcolor"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.01526 15.3939L4.3107 14.7046L10.3107 0.704556L10.6061 0.0151978L11.9849 0.606077L11.6894 1.29544L5.68942 15.2954L5.39398 15.9848L4.01526 15.3939Z" fill="currentColor"></path></svg></span><a href="/"><span class="font-medium tracking-tight text-lg">agent-eval</span></a></div><nav class="flex items-baseline gap-4"><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/experiments">Experiments</a><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/compare">Compare</a><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/evals">Evals</a></nav></div></header><main class="mx-auto max-w-5xl px-6 py-8 text-sm"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><script src="/_next/static/chunks/47fcac10c45fd42a.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[22016,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"\"]\n3:I[39756,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n4:I[37457,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n9:I[68027,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n:HL[\"/_next/static/chunks/b7a73603aa202938.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"e-_lBXo-NK4NsMjf8KVfw\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/b7a73603aa202938.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/7c92e96509cd355e.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/d2be314c3ece3fbe.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark figtree_e520db2c-module__K_nIxW__variable\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-background\",\"children\":[[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-50 bg-background\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-14 items-center justify-between px-4 gap-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"$L2\",null,{\"href\":\"https://vercel.com\",\"title\":\"Made with love by Vercel\",\"children\":[\"$\",\"svg\",null,{\"data-testid\":\"geist-icon\",\"height\":\"18\",\"strokeLinejoin\":\"round\",\"viewBox\":\"0 0 16 16\",\"width\":\"18\",\"style\":{\"color\":\"currentcolor\"},\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M8 1L16 15H0L8 1Z\",\"fill\":\"currentColor\"}]}]}],[\"$\",\"span\",null,{\"className\":\"text-(--ds-gray-500)\",\"children\":[\"$\",\"svg\",null,{\"data-testid\":\"geist-icon\",\"height\":\"16\",\"strokeLinejoin\":\"round\",\"viewBox\":\"0 0 16 16\",\"width\":\"16\",\"style\":{\"color\":\"currentcolor\"},\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M4.01526 15.3939L4.3107 14.7046L10.3107 0.704556L10.6061 0.0151978L11.9849 0.606077L11.6894 1.29544L5.68942 15.2954L5.39398 15.9848L4.01526 15.3939Z\",\"fill\":\"currentColor\"}]}]}],[\"$\",\"$L2\",null,{\"href\":\"/\",\"children\":[\"$\",\"span\",null,{\"className\":\"font-medium tracking-tight text-lg\",\"children\":\"agent-eval\"}]}]]}],[\"$\",\"nav\",null,{\"className\":\"flex items-baseline gap-4\",\"children\":[[\"$\",\"$L2\",null,{\"href\":\"/experiments\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Experiments\"}],[\"$\",\"$L2\",null,{\"href\":\"/compare\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Compare\"}],[\"$\",\"$L2\",null,{\"href\":\"/evals\",\"className\":\"text-sm text-muted-foreground hover:text-foreground transition-colors\",\"children\":\"Evals\"}]]}]]}]}],[\"$\",\"main\",null,{\"className\":\"mx-auto max-w-5xl px-6 py-8 text-sm\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],\"$L5\",\"$L6\"]}]}]],null,\"$L7\"]}],{},null,false,false]},null,false,false]},null,false,false],\"$L8\",false]],\"m\":\"$undefined\",\"G\":[\"$9\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:I[97367,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[97367,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"ViewportBoundary\"]\nf:I[97367,[\"/_next/static/chunks/7c92e96509cd355e.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"MetadataBoundary\"]\n5:[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}]\n6:[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]\n7:[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]\n8:[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:null\n10:[[\"$\",\"title\",\"0\",{\"children\":\"Agent Eval Playground\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Browse experiment results, inspect agent transcripts, and compare runs\"}]]\n"])</script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/47fcac10c45fd42a.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"ViewportBoundary\"]\n9:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"MetadataBoundary\"]\nb:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--e__lBXo_NK4NsMjf8KVfw--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/47fcac10c45fd42a.js"/><script src="/_next/static/chunks/806bdb8e4a6a9b95.js" async=""></script><script src="/_next/static/chunks/db1f4d63ff1d1c41.js" async=""></script><script src="/_next/static/chunks/f2f58a7e93290fbb.js" async=""></script><script src="/_next/static/chunks/turbopack-a58403ee054004b8.js" async=""></script><script src="/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/_next/static/chunks/d2be314c3ece3fbe.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/47fcac10c45fd42a.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"ViewportBoundary\"]\n9:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"MetadataBoundary\"]\nb:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"e-_lBXo-NK4NsMjf8KVfw\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ff1a16fafef87110.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/d2be314c3ece3fbe.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"STbJzKKHRT+F/gmtlFl2sXDqbwNAESyaoFiitgzE9yI=\"\n}"
|
package/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":254,"timestamp":78709035,"id":4,"parentId":1,"tags":{},"startTime":1770504242258,"traceId":"8bb15e81b7e43671"},{"name":"load-custom-routes","duration":429,"timestamp":78709423,"id":5,"parentId":1,"tags":{},"startTime":1770504242258,"traceId":"8bb15e81b7e43671"},{"name":"create-dist-dir","duration":13458,"timestamp":78709887,"id":6,"parentId":1,"tags":{},"startTime":1770504242259,"traceId":"8bb15e81b7e43671"},{"name":"clean","duration":327,"timestamp":78725822,"id":7,"parentId":1,"tags":{},"startTime":1770504242275,"traceId":"8bb15e81b7e43671"},{"name":"create-pages-mapping","duration":323,"timestamp":78763766,"id":8,"parentId":1,"tags":{},"startTime":1770504242313,"traceId":"8bb15e81b7e43671"},{"name":"collect-app-files","duration":2038,"timestamp":78764130,"id":9,"parentId":1,"tags":{},"startTime":1770504242313,"traceId":"8bb15e81b7e43671"},{"name":"create-app-mapping","duration":941,"timestamp":78766193,"id":10,"parentId":1,"tags":{},"startTime":1770504242315,"traceId":"8bb15e81b7e43671"},{"name":"create-app-layouts","duration":176,"timestamp":78767168,"id":11,"parentId":1,"tags":{},"startTime":1770504242316,"traceId":"8bb15e81b7e43671"},{"name":"collect-default-files","duration":898,"timestamp":78769529,"id":13,"parentId":1,"tags":{},"startTime":1770504242319,"traceId":"8bb15e81b7e43671"},{"name":"generate-route-types","duration":13090,"timestamp":78768995,"id":12,"parentId":1,"tags":{},"startTime":1770504242318,"traceId":"8bb15e81b7e43671"},{"name":"public-dir-conflict-check","duration":94,"timestamp":78782128,"id":14,"parentId":1,"tags":{},"startTime":1770504242331,"traceId":"8bb15e81b7e43671"},{"name":"generate-routes-manifest","duration":2578,"timestamp":78782307,"id":15,"parentId":1,"tags":{},"startTime":1770504242331,"traceId":"8bb15e81b7e43671"},{"name":"run-turbopack","duration":4850159,"timestamp":78788239,"id":17,"parentId":1,"tags":{},"startTime":1770504242337,"traceId":"8bb15e81b7e43671"},{"name":"run-typescript","duration":3603605,"timestamp":83653692,"id":19,"parentId":1,"tags":{},"startTime":1770504247203,"traceId":"8bb15e81b7e43671"},{"name":"generate-required-server-files","duration":778,"timestamp":87257645,"id":21,"parentId":1,"tags":{},"startTime":1770504250807,"traceId":"8bb15e81b7e43671"},{"name":"check-static-error-page","duration":3164,"timestamp":87300398,"id":23,"parentId":22,"tags":{},"startTime":1770504250849,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":235790,"timestamp":87305414,"id":34,"parentId":25,"tags":{},"startTime":1770504250854,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":238737,"timestamp":87302548,"id":25,"parentId":22,"tags":{"page":"/_global-error"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":314718,"timestamp":87305145,"id":33,"parentId":24,"tags":{},"startTime":1770504250854,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":318654,"timestamp":87301257,"id":24,"parentId":22,"tags":{"page":"/_not-found"},"startTime":1770504250850,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":313182,"timestamp":87323607,"id":37,"parentId":28,"tags":{},"startTime":1770504250873,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":333924,"timestamp":87302911,"id":28,"parentId":22,"tags":{"page":"/evals"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":314656,"timestamp":87323429,"id":35,"parentId":26,"tags":{},"startTime":1770504250872,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":335413,"timestamp":87302701,"id":26,"parentId":22,"tags":{"page":"/compare"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":315871,"timestamp":87323563,"id":36,"parentId":27,"tags":{},"startTime":1770504250873,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":336875,"timestamp":87302766,"id":27,"parentId":22,"tags":{"page":"/evals/[name]"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":321299,"timestamp":87323825,"id":40,"parentId":31,"tags":{},"startTime":1770504250873,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":341967,"timestamp":87303192,"id":31,"parentId":22,"tags":{"page":"/"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":322970,"timestamp":87323774,"id":39,"parentId":30,"tags":{},"startTime":1770504250873,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":343651,"timestamp":87303114,"id":30,"parentId":22,"tags":{"page":"/experiments"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":325647,"timestamp":87323652,"id":38,"parentId":29,"tags":{},"startTime":1770504250873,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":346581,"timestamp":87303026,"id":29,"parentId":22,"tags":{"page":"/experiments/[name]/[timestamp]"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"is-page-static","duration":326754,"timestamp":87323852,"id":41,"parentId":32,"tags":{},"startTime":1770504250873,"traceId":"8bb15e81b7e43671"},{"name":"check-page","duration":347357,"timestamp":87303270,"id":32,"parentId":22,"tags":{"page":"/transcript/[experiment]/[timestamp]/[evalName]/[run]"},"startTime":1770504250852,"traceId":"8bb15e81b7e43671"},{"name":"static-check","duration":350953,"timestamp":87299702,"id":22,"parentId":1,"tags":{},"startTime":1770504250849,"traceId":"8bb15e81b7e43671"},{"name":"write-routes-manifest","duration":2857,"timestamp":87651273,"id":43,"parentId":1,"tags":{},"startTime":1770504251200,"traceId":"8bb15e81b7e43671"},{"name":"load-dotenv","duration":27,"timestamp":87660772,"id":46,"parentId":45,"tags":{},"startTime":1770504251210,"traceId":"8bb15e81b7e43671"},{"name":"run-export-path-map","duration":281,"timestamp":87662712,"id":47,"parentId":45,"tags":{},"startTime":1770504251212,"traceId":"8bb15e81b7e43671"},{"name":"next-export","duration":83190,"timestamp":87659870,"id":45,"parentId":1,"tags":{},"startTime":1770504251209,"traceId":"8bb15e81b7e43671"},{"name":"move-exported-app-not-found-","duration":469,"timestamp":87744074,"id":48,"parentId":44,"tags":{},"startTime":1770504251293,"traceId":"8bb15e81b7e43671"},{"name":"move-exported-app-global-error-","duration":350,"timestamp":87744616,"id":49,"parentId":44,"tags":{},"startTime":1770504251294,"traceId":"8bb15e81b7e43671"},{"name":"static-generation","duration":90335,"timestamp":87655850,"id":44,"parentId":1,"tags":{},"startTime":1770504251205,"traceId":"8bb15e81b7e43671"},{"name":"write-routes-manifest","duration":240,"timestamp":87746352,"id":50,"parentId":1,"tags":{},"startTime":1770504251295,"traceId":"8bb15e81b7e43671"},{"name":"print-tree-view","duration":2071,"timestamp":87750045,"id":51,"parentId":1,"tags":{},"startTime":1770504251299,"traceId":"8bb15e81b7e43671"},{"name":"telemetry-flush","duration":495569,"timestamp":87752126,"id":52,"parentId":1,"tags":{},"startTime":1770504251301,"traceId":"8bb15e81b7e43671"},{"name":"next-build","duration":9791367,"timestamp":78456350,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1770504242005,"traceId":"8bb15e81b7e43671"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":4850159,"timestamp":78788239,"id":17,"parentId":1,"tags":{},"startTime":1770504242337,"traceId":"8bb15e81b7e43671"},{"name":"run-typescript","duration":3603605,"timestamp":83653692,"id":19,"parentId":1,"tags":{},"startTime":1770504247203,"traceId":"8bb15e81b7e43671"},{"name":"static-check","duration":350953,"timestamp":87299702,"id":22,"parentId":1,"tags":{},"startTime":1770504250849,"traceId":"8bb15e81b7e43671"},{"name":"static-generation","duration":90335,"timestamp":87655850,"id":44,"parentId":1,"tags":{},"startTime":1770504251205,"traceId":"8bb15e81b7e43671"},{"name":"telemetry-flush","duration":495569,"timestamp":87752126,"id":52,"parentId":1,"tags":{},"startTime":1770504251301,"traceId":"8bb15e81b7e43671"},{"name":"next-build","duration":9791367,"timestamp":78456350,"id":1,"tags":{"buildMode":"default","version":"16.1.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1770504242005,"traceId":"8bb15e81b7e43671"}]
|
package/lib/data.ts
CHANGED
|
@@ -15,6 +15,11 @@ function getEvalsDir(): string {
|
|
|
15
15
|
return resolve(process.env.EVALS_DIR || "./evals");
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/** Check if a directory name looks like an ISO timestamp (used as run ID) */
|
|
19
|
+
function isTimestamp(name: string): boolean {
|
|
20
|
+
return /^\d{4}-\d{2}-\d{2}T/.test(name);
|
|
21
|
+
}
|
|
22
|
+
|
|
18
23
|
/** List experiments from the results directory. Pass limit to cap expensive per-item reads. */
|
|
19
24
|
export function listExperiments(limit?: number) {
|
|
20
25
|
const resultsDir = getResultsDir();
|
|
@@ -23,9 +28,29 @@ export function listExperiments(limit?: number) {
|
|
|
23
28
|
return { items: [], total: 0 };
|
|
24
29
|
}
|
|
25
30
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
// Discover experiments by walking the directory tree until we find
|
|
32
|
+
// timestamp directories. The path from resultsDir to the parent of the
|
|
33
|
+
// first timestamp is the experiment name (e.g. "my-config/openai/gpt-5.2-codex").
|
|
34
|
+
const entries: string[] = [];
|
|
35
|
+
|
|
36
|
+
function walk(dir: string, prefix: string) {
|
|
37
|
+
const children = readdirSync(dir, { withFileTypes: true })
|
|
38
|
+
.filter((e) => e.isDirectory())
|
|
39
|
+
.map((e) => e.name);
|
|
40
|
+
|
|
41
|
+
// If any child looks like a timestamp, this directory is an experiment
|
|
42
|
+
if (children.some(isTimestamp)) {
|
|
43
|
+
entries.push(prefix);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Otherwise keep recursing
|
|
48
|
+
for (const child of children) {
|
|
49
|
+
walk(join(dir, child), prefix ? `${prefix}/${child}` : child);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
walk(resultsDir, "");
|
|
29
54
|
|
|
30
55
|
const total = entries.length;
|
|
31
56
|
const toProcess = limit ? entries.slice(0, limit) : entries;
|
|
@@ -33,7 +58,7 @@ export function listExperiments(limit?: number) {
|
|
|
33
58
|
const items = toProcess.map((name) => {
|
|
34
59
|
const expDir = join(resultsDir, name);
|
|
35
60
|
const timestamps = readdirSync(expDir, { withFileTypes: true })
|
|
36
|
-
.filter((e) => e.isDirectory())
|
|
61
|
+
.filter((e) => e.isDirectory() && isTimestamp(e.name))
|
|
37
62
|
.map((e) => e.name)
|
|
38
63
|
.sort()
|
|
39
64
|
.reverse();
|
|
@@ -104,9 +129,32 @@ export function getExperimentDetail(name: string, timestamp: string) {
|
|
|
104
129
|
return null;
|
|
105
130
|
}
|
|
106
131
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
132
|
+
// Recursively discover all eval result directories (directories with summary.json)
|
|
133
|
+
const evalDirs: string[] = [];
|
|
134
|
+
function walk(dir: string, basePath: string = "") {
|
|
135
|
+
const dirEntries = readdirSync(dir, { withFileTypes: true });
|
|
136
|
+
|
|
137
|
+
for (const entry of dirEntries) {
|
|
138
|
+
if (!entry.isDirectory() || entry.name.startsWith(".") || entry.name.startsWith("run-")) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;
|
|
143
|
+
const entryPath = join(dir, entry.name);
|
|
144
|
+
const summaryPath = join(entryPath, "summary.json");
|
|
145
|
+
|
|
146
|
+
// Check if this is an eval result directory (has summary.json)
|
|
147
|
+
if (existsSync(summaryPath)) {
|
|
148
|
+
evalDirs.push(relativePath);
|
|
149
|
+
} else {
|
|
150
|
+
// Not an eval result, recurse into it
|
|
151
|
+
walk(entryPath, relativePath);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
walk(runDir);
|
|
157
|
+
evalDirs.sort();
|
|
110
158
|
|
|
111
159
|
const evals = evalDirs.map((evalName) => {
|
|
112
160
|
const evalDir = join(runDir, evalName);
|
package/lib/types.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vercel/agent-eval-playground",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Web-based playground for browsing agent-eval experiment results",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"react": "^19.2.0",
|
|
28
28
|
"react-dom": "^19.2.0",
|
|
29
29
|
"tailwind-merge": "^2.6.0",
|
|
30
|
-
"tw-animate-css": "^1.4.0"
|
|
30
|
+
"tw-animate-css": "^1.4.0",
|
|
31
|
+
"typescript": "^5.6.0"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@tailwindcss/postcss": "^4.0.0",
|
|
@@ -35,8 +36,7 @@
|
|
|
35
36
|
"@types/react": "^19.0.0",
|
|
36
37
|
"@types/react-dom": "^19.0.0",
|
|
37
38
|
"postcss": "^8.4.49",
|
|
38
|
-
"tailwindcss": "^4.0.0"
|
|
39
|
-
"typescript": "^5.6.0"
|
|
39
|
+
"tailwindcss": "^4.0.0"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
".next",
|
|
File without changes
|
/package/.next/static/{18FWD5uOgTIXkpCwU5Mf_ → e-_lBXo-NK4NsMjf8KVfw}/_clientMiddlewareManifest.json
RENAMED
|
File without changes
|
|
File without changes
|