Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .zealt/config.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"title": "JJ Benchmark",
"description": "Performance results of AI coding models on Jujutsu tasks, measuring success rate and execution time with high precision.",
"github_repo": "https://github.com/TabbyML/jj-benchmark"
"github_repo": "https://github.com/TabbyML/jj-benchmark",
"pending_models": []
}
11,145 changes: 4,555 additions & 6,590 deletions .zealt/tasks.json

Large diffs are not rendered by default.

24 changes: 17 additions & 7 deletions site/app/(home)/components/leaderboard-table.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
"use client";

import { useState, useMemo } from "react";
import { useRouter } from "next/navigation";
import { useState, useMemo, useEffect } from "react";
import { useRouter, useSearchParams } from "next/navigation";
import { Search, Trophy, ListTree } from "lucide-react";
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
import Link from "next/link";
import zealtConfig from "@/zealt/config.json";

function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
Expand All @@ -14,6 +15,7 @@ function cn(...inputs: ClassValue[]) {
export interface LeaderboardEntry {
id: string;
model: string;
rawModel: string;
agent: string;
passedEvals: number;
successRate: number;
Expand Down Expand Up @@ -60,20 +62,28 @@ function ScoreCell({ value }: { value: number }) {

export default function LeaderboardTable({ data }: { data: LeaderboardEntry[] }) {
const router = useRouter();
const searchParams = useSearchParams();
const devMode = searchParams.get("dev") === "true";
const [searchQuery, setSearchQuery] = useState("");

const filteredData = useMemo(() => {
let processedData = data;

if (!devMode && zealtConfig.pending_models && zealtConfig.pending_models.length > 0) {
processedData = processedData.filter((item) =>
!(zealtConfig.pending_models as string[]).includes(item.rawModel)
);
}

if (searchQuery) {
const query = searchQuery.toLowerCase();
processedData = processedData.filter(item =>
processedData = processedData.filter(item =>
item.model.toLowerCase().includes(query)
);
}

return processedData;
}, [data, searchQuery]);
}, [data, searchQuery, devMode]);

return (
<>
Expand All @@ -84,14 +94,14 @@ export default function LeaderboardTable({ data }: { data: LeaderboardEntry[] })
</h2>

<div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-4 w-full md:w-auto">
<Link
href="./tasks"
<Link
href="./tasks"
className="flex items-center justify-center gap-2 px-4 py-2 border border-border bg-card/50 hover:bg-secondary/50 text-foreground rounded-lg text-sm font-medium transition-colors shadow-sm backdrop-blur-sm whitespace-nowrap"
>
<ListTree className="w-4 h-4" />
View Tasks
</Link>

<div className="relative w-full sm:w-auto">
<Search className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" />
<input
Expand Down
8 changes: 7 additions & 1 deletion site/app/(home)/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Suspense } from "react";
import { Github, Terminal, ClipboardList, ListTree } from "lucide-react";
import Link from "next/link";
import tasksData from "@/zealt/tasks.json";
Expand Down Expand Up @@ -36,6 +37,7 @@ export default function Home() {
totalLatency: number;
latencyCount: number;
model: string;
rawModel: string;
agent: string;
}>();

Expand All @@ -62,6 +64,7 @@ export default function Home() {
totalLatency: 0,
latencyCount: 0,
model: modelName,
rawModel: trial.model,
agent: agentName
});
}
Expand All @@ -88,6 +91,7 @@ export default function Home() {
return {
id: String(index + 1),
model: stats.model,
rawModel: stats.rawModel,
agent: stats.agent,
passedEvals: stats.passed,
successRate: successRate,
Expand Down Expand Up @@ -162,7 +166,9 @@ export default function Home() {
</div>
) : (
// Client Component for Interactive Table
<LeaderboardTable data={data} />
<Suspense fallback={<div className="text-center py-12">Loading leaderboard...</div>}>
<LeaderboardTable data={data} />
</Suspense>
)}
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ export function TrajectoryPage({
const [mounted, setMounted] = useState(false);
const [iframeLoading, setIframeLoading] = useState(true);

const experimentalArtifactsEnabled = searchParams.get("experimentalArtifacts") === "true";
const devModeEnabled = searchParams.get("dev") === "true";
const visibleTabsConfig = useMemo(
() =>
experimentalArtifactsEnabled
devModeEnabled
? tabsConfig
: tabsConfig.filter((t) => t.value !== "artifacts"),
[tabsConfig, experimentalArtifactsEnabled],
[tabsConfig, devModeEnabled],
);
const validTabs = visibleTabsConfig.map((t) => t.value);
const [activeTab, setActiveTab] = useState(() => {
Expand Down Expand Up @@ -309,7 +309,7 @@ export function TrajectoryPage({
)}
</TabsContent>

{experimentalArtifactsEnabled && artifactTree && artifactTree.length > 0 && (
{devModeEnabled && artifactTree && artifactTree.length > 0 && (
<TabsContent value="artifacts" className="min-h-0 flex-1 overflow-hidden" forceMount>
<ArtifactsPanel artifactTree={artifactTree} />
</TabsContent>
Expand Down
19 changes: 15 additions & 4 deletions site/app/tasks/components/tasks-page-client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export type CompactTrial = {
trial_name: string;
trajectory_id?: string;
model: string;
rawModel: string;
agent: string;
passed: boolean;
reward: number | null;
Expand Down Expand Up @@ -122,6 +123,7 @@ export function TasksPageClient({ tasksData }: TasksPageClientProps) {
const [selectedTask, setSelectedTask] = useState<string | null>(null);
const [isInstructionOpen, setIsInstructionOpen] = useState(false);
const isDesktop = useMediaQuery("(min-width: 1024px)");
const [devMode, setDevMode] = useState(false);

const hasActiveFilters =
selectedStatuses.length > 0 ||
Expand Down Expand Up @@ -182,6 +184,7 @@ export function TasksPageClient({ tasksData }: TasksPageClientProps) {
const initialAgents = (params.get("agent") || "").split(",").filter(Boolean);
const initialSort = params.get("sort") || "default";
const initialOrder = params.get("order") || "asc";
const initialDevMode = params.get("dev") === "true";

setQueryQ(initialQ);
setSearchQuery(initialQ);
Expand All @@ -190,6 +193,7 @@ export function TasksPageClient({ tasksData }: TasksPageClientProps) {
setSelectedAgents(initialAgents);
setQuerySort(initialSort);
setQueryOrder(initialOrder);
setDevMode(initialDevMode);
}, []);

useEffect(() => {
Expand All @@ -207,11 +211,18 @@ export function TasksPageClient({ tasksData }: TasksPageClientProps) {
const allTrialsFlat = useMemo(
() =>
tasksData.flatMap((task) =>
task.trials.map((trial) => ({
...trial,
})),
task.trials
.filter((trial) => {
if (!devMode && zealtConfig.pending_models && zealtConfig.pending_models.length > 0) {
return !(zealtConfig.pending_models as string[]).includes(trial.rawModel);
}
return true;
})
.map((trial) => ({
...trial,
}))
),
[tasksData],
[tasksData, devMode],
);

const allModels = useMemo(
Expand Down
6 changes: 5 additions & 1 deletion site/app/tasks/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Suspense } from "react";
import tasksDataRaw from "@/zealt/tasks.json";
import pendingTasksData from "@/zealt/pending-tasks.json";
import PendingReviewCard from "@/components/pending-review-card";
Expand Down Expand Up @@ -64,6 +65,7 @@ function toCompactTrial(taskName: string, trial: RawTaskTrial): CompactTrial | n
trial_name: trial.trial_name,
...(trial.trajectory_id ? { trajectory_id: trial.trajectory_id } : {}),
model,
rawModel: trial.model,
agent,
passed: Boolean(trial.passed),
reward: trial.reward ?? null,
Expand Down Expand Up @@ -131,7 +133,9 @@ export default function TasksPage() {
<PendingReviewCard pendingSampleCases={pendingSampleCases} />
</div>
) : (
<TasksPageClient tasksData={compactTasksData} />
<Suspense fallback={<div className="container mx-auto py-8 text-center">Loading tasks...</div>}>
<TasksPageClient tasksData={compactTasksData} />
</Suspense>
)}
</div>
);
Expand Down
Loading