Skip to content

Commit 11ec190

Browse files
feat(paper): add new categories and models
1 parent d574ec9 commit 11ec190

173 files changed

Lines changed: 1441 additions & 96 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

paper/benchmark-methodology-whitepaper.tex

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ \section{React Native methodology}
7272
\midrule
7373
Animation & 14 & React Native animation behavior, including \texttt{Animated} and \texttt{react-native-reanimated}. \\
7474
Asynchronous state & 14 & Async state/data-flow tasks with \texttt{TanStack Query}, \texttt{Zustand}, and \texttt{Jotai}. \\
75+
Lists & 18 & List rendering, item interactions, virtualization patterns, and sectioned data presentation. \\
7576
Navigation & 15 & Screen transitions, stack/modal flows, route params, and navigation state handling. \\
77+
React Native APIs & 9 & Core platform API usage such as layout, keyboard, accessibility, and device integration primitives. \\
7678
\bottomrule
7779
\end{tabularx}
7880
\caption{Benchmark categories, number of evals per category, and short scope descriptions.}
@@ -94,14 +96,22 @@ \subsection{Version and configuration of benchmarked models}
9496
\hline
9597
claude-opus-4.6 & Solver \\
9698
\hline
99+
claude-opus-4.7 & Solver \\
100+
\hline
97101
claude-sonnet-4.6 & Solver, Judge \\
98102
\hline
103+
composer-2 & Solver \\
104+
\hline
105+
composer-2-fast & Solver \\
106+
\hline
99107
deepseek-r1-distill-qwen-32b & Solver \\
100108
\hline
101109
deepseek-v3.2 & Solver \\
102110
\hline
103111
gemini-3.1-pro-preview & Solver \\
104112
\hline
113+
gemma-4-31B-it & Solver \\
114+
\hline
105115
glm-5 & Solver \\
106116
\hline
107117
gpt-5.3-codex & Solver \\
@@ -116,6 +126,8 @@ \subsection{Version and configuration of benchmarked models}
116126
\hline
117127
kimi-k2.5 & Solver \\
118128
\hline
129+
minimax-m2.7 & Solver \\
130+
\hline
119131
qwen2.5-coder-32b-instruct & Solver \\
120132
\bottomrule
121133
\end{tabular}
@@ -502,7 +514,7 @@ \section{Repeat Orchestration Script}
502514
503515
\section{Results}
504516
505-
\Cref{fig:model-comparison} summarizes both overall and category-level performance across eight primitive models. In overall weighted average score, \texttt{claude-opus-4.6} leads (84.3\%), followed by \texttt{claude-sonnet-4.6} (77.9\%) and \texttt{glm-5} (74.2\%), while \texttt{deepseek-r1-distill-qwen-32b} scores lowest (26.1\%). The category breakdown shows non-uniform behavior: navigation is generally the strongest category for most models, whereas animation and async-state are more discriminative and better separate mid-tier models. For each model, detailed analysis is provided in appendix section A. The \cref{tab:tokens-by-model} summarizes token usage for each of the models.
517+
\Cref{fig:model-comparison} summarizes both overall and category-level performance across the evaluated solver models. In overall weighted average score, \texttt{composer-2} leads (96.1\%), followed by \texttt{composer-2-fast} (94.9\%) and \texttt{gpt-5.4} (85.3\%), while \texttt{deepseek-r1-distill-qwen-32b} scores lowest (44.4\%). The category breakdown remains non-uniform: navigation and React Native API tasks are generally the strongest categories across the model set, whereas animation remains the most discriminative category and lists provide additional separation among mid-tier models. For each model, detailed analysis is provided in appendix section A. The \cref{tab:tokens-by-model} summarizes token usage for each of the models.
506518
507519
\begin{figure}[htbp]
508520
\centering
@@ -518,19 +530,24 @@ \section{Results}
518530
\toprule
519531
\textbf{Rank} & \textbf{Model} & \textbf{Weighted average score} & \textbf{Runs} \\
520532
\midrule
521-
1 & claude-opus-4.6 & 0.844 (84.4\%) & 10 \\
522-
2 & gpt-5.4 & 0.826 (82.6\%) & 10 \\
523-
3 & gpt-5.3-codex & 0.809 (80.9\%) & 10 \\
524-
4 & gemini-3.1-pro-preview & 0.789 (78.9\%) & 10 \\
525-
5 & claude-sonnet-4.6 & 0.779 (77.9\%) & 10 \\
526-
6 & kimi-k2.5 & 0.749 (74.9\%) & 10 \\
527-
7 & glm-5 & 0.742 (74.2\%) & 10 \\
528-
8 & grok-4 & 0.701 (70.1\%) & 10 \\
529-
9 & deepseek-v3.2 & 0.690 (69.0\%) & 10 \\
530-
10 & gpt-oss-120b & 0.664 (66.4\%) & 10 \\
531-
11 & gpt-oss-20b & 0.643 (64.3\%) & 10 \\
532-
12 & qwen2.5-coder-32b-instruct & 0.427 (42.7\%) & 10 \\
533-
13 & deepseek-r1-distill-qwen-32b & 0.318 (31.8\%) & 10 \\
533+
1 & composer-2 & 0.961 (96.1\%) & 10 \\
534+
2 & composer-2-fast & 0.949 (94.9\%) & 10 \\
535+
3 & gpt-5.4 & 0.853 (85.3\%) & 10 \\
536+
4 & claude-opus-4.6 & 0.841 (84.1\%) & 10 \\
537+
5 & gpt-5.3-codex & 0.831 (83.1\%) & 10 \\
538+
6 & claude-opus-4.7 & 0.828 (82.8\%) & 10 \\
539+
7 & claude-sonnet-4.6 & 0.806 (80.6\%) & 10 \\
540+
8 & gemini-3.1-pro-preview & 0.789 (78.9\%) & 10 \\
541+
9 & kimi-k2.5 & 0.772 (77.2\%) & 10 \\
542+
10 & gemma-4-31B-it & 0.752 (75.2\%) & 10 \\
543+
11 & glm-5 & 0.748 (74.8\%) & 10 \\
544+
12 & grok-4 & 0.726 (72.6\%) & 10 \\
545+
13 & gpt-oss-120b & 0.716 (71.6\%) & 10 \\
546+
14 & deepseek-v3.2 & 0.715 (71.5\%) & 10 \\
547+
15 & minimax-m2.7 & 0.714 (71.4\%) & 10 \\
548+
16 & gpt-oss-20b & 0.710 (71.0\%) & 10 \\
549+
17 & qwen2.5-coder-32b-instruct & 0.512 (51.2\%) & 10 \\
550+
18 & deepseek-r1-distill-qwen-32b & 0.444 (44.4\%) & 10 \\
534551
\bottomrule
535552
\end{tabular}
536553
\caption{Overall model comparison from packed result archives.}
@@ -573,11 +590,11 @@ \section{Conflict of Interest}
573590
The authors are affiliated with Callstack. The experiments used commercially available infrastructure acquired and operated independently; no direct sponsorship, funding, or editorial influence was provided for this work.
574591
575592
\section{Conclusion}
576-
We evaluated \textbf{13} solver models on the React Native eval suite (\textbf{43} evals in total), with \textbf{10 repeated runs per model} under the same pipeline and scoring rules. Across completed runs, the highest mean \texttt{weightedAverageScore} was \textbf{0.844} (\textbf{84.4\%}, model: \texttt{claude-opus-4.6}); the median across models was \textbf{0.722} (\textbf{72.2\%}). Category-level analysis (\cref{fig:model-comparison}) shows strongest performance on \textbf{navigation} and weakest performance on \textbf{animation}, with \textbf{async state} in between and strongly differentiating mid-tier models. Recurring failures were concentrated in behavior-heavy requirements, especially animation dynamics and async-state consistency/invalidation logic.
593+
We evaluated \textbf{18} solver models on the React Native eval suite (\textbf{66} evals in total), with \textbf{10 repeated runs per model} under the same pipeline and scoring rules. Across completed runs, the highest mean \texttt{weightedAverageScore} was \textbf{0.961} (\textbf{96.1\%}, model: \texttt{composer-2}); the median across models was \textbf{0.761} (\textbf{76.1\%}). Category-level analysis (\cref{fig:model-comparison}) shows strongest performance on \textbf{navigation} and \textbf{react native apis}, while \textbf{animation} remains the weakest and most discriminative category; \textbf{lists} and \textbf{async state} provide additional separation among otherwise closely clustered models. Recurring failures were concentrated in behavior-heavy requirements, especially animation dynamics and async-state consistency/invalidation logic.
577594
578595
Two practical implications follow. First, React Native development difficulty is not uniform: models that are competitive on navigation and structural code generation can still be unreliable on behavior-heavy work, where correctness depends on timing, gesture/animation dynamics, and state invalidation semantics. For practitioners, this suggests applying the most scrutiny (and the most automated protection via tests and runtime validation) to animation and async-state code paths, even when a model performs strongly overall. Second, requirement-level evaluation yields actionable signals: per-requirement verdict traces support targeted prompt iteration, scaffolding improvements, and dataset evolution without collapsing all behavior into a single task-level pass/fail.
579596
580-
From an operational standpoint, token usage varied substantially across models (\cref{tab:tokens-by-model}), ranging from \textbf{90,425} mean tokens per run (\texttt{gpt-5.4}) to \textbf{821,708} (\texttt{grok-4}). This highlights a cost/latency frontier that is not directly implied by score alone, and reinforces that model selection for production assistance should consider both category-specific performance and consumption characteristics.
597+
From an operational standpoint, token usage varied substantially across models (\cref{tab:tokens-by-model}). Among models with available token aggregates, mean usage ranged from \textbf{254,437} tokens per run (\texttt{deepseek-r1-distill-qwen-32b}) to \textbf{5,590,132} (\texttt{deepseek-v3.2}), with additional high-consumption behavior visible for \texttt{kimi-k2.5} at \textbf{2,500,716}. The token totals for \texttt{composer-2} and \texttt{composer-2-fast} could not be determined precisely from the captured runs, so efficiency comparisons for those two models should be interpreted with caution. Overall, this highlights a cost/latency frontier that is not directly implied by score alone, and reinforces that model selection for production assistance should consider both category-specific performance and consumption characteristics.
581598
582599
Overall, these results indicate that React Native Evals separates model capability in a reproducible and auditable way while preserving requirement-level interpretability (via explicit per-requirement weights and per-eval verdict artifacts). They also highlight a need to extend the current evaluation set beyond the existing categories to more of the day-to-day React Native surface area, such as handling network requests (including error handling, retries, caching, and cancellation), building custom native integrations, repairing or extending faulty code in partially-correct codebases, keeping pace with the latest versions and breaking changes of common third-party libraries, and more. Future work should also explore judge-robust scoring (e.g., multi-judge consensus and calibrated partial credit) to reduce dependence on any single evaluator while maintaining transparency.
583600

paper/export/appendix.tex

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,32 @@ \subsection{claude-opus-4.6}
2828
\end{figure}
2929

3030

31+
\clearpage
32+
33+
\subsection{claude-opus-4.7}
34+
35+
% Table: summary
36+
\input{export/tables/claude-opus-4.7_summary}
37+
38+
% Table: category_summary
39+
\input{export/tables/claude-opus-4.7_category_summary}
40+
41+
% Table: per_eval
42+
\input{export/tables/claude-opus-4.7_per_eval}
43+
44+
\begin{figure}[htbp]
45+
\centering
46+
\includegraphics[width=\textwidth]{export/figures/claude-opus-4.7_benchmark_plot.png}
47+
\caption{Benchmark Plot for claude-opus-4.7.}
48+
\end{figure}
49+
50+
\begin{figure}[htbp]
51+
\centering
52+
\includegraphics[width=\textwidth]{export/figures/claude-opus-4.7_sankey_per_run.png}
53+
\caption{Sankey per run for claude-opus-4.7 showing the distribution of evals with respect to categories and results}
54+
\end{figure}
55+
56+
3157
\clearpage
3258

3359
\subsection{claude-sonnet-4.6}
@@ -54,6 +80,58 @@ \subsection{claude-sonnet-4.6}
5480
\end{figure}
5581

5682

83+
\clearpage
84+
85+
\subsection{composer-2}
86+
87+
% Table: summary
88+
\input{export/tables/composer-2_summary}
89+
90+
% Table: category_summary
91+
\input{export/tables/composer-2_category_summary}
92+
93+
% Table: per_eval
94+
\input{export/tables/composer-2_per_eval}
95+
96+
\begin{figure}[htbp]
97+
\centering
98+
\includegraphics[width=\textwidth]{export/figures/composer-2_benchmark_plot.png}
99+
\caption{Benchmark Plot for composer-2.}
100+
\end{figure}
101+
102+
\begin{figure}[htbp]
103+
\centering
104+
\includegraphics[width=\textwidth]{export/figures/composer-2_sankey_per_run.png}
105+
\caption{Sankey per run for composer-2 showing the distribution of evals with respect to categories and results}
106+
\end{figure}
107+
108+
109+
\clearpage
110+
111+
\subsection{composer-2-fast}
112+
113+
% Table: summary
114+
\input{export/tables/composer-2-fast_summary}
115+
116+
% Table: category_summary
117+
\input{export/tables/composer-2-fast_category_summary}
118+
119+
% Table: per_eval
120+
\input{export/tables/composer-2-fast_per_eval}
121+
122+
\begin{figure}[htbp]
123+
\centering
124+
\includegraphics[width=\textwidth]{export/figures/composer-2-fast_benchmark_plot.png}
125+
\caption{Benchmark Plot for composer-2-fast.}
126+
\end{figure}
127+
128+
\begin{figure}[htbp]
129+
\centering
130+
\includegraphics[width=\textwidth]{export/figures/composer-2-fast_sankey_per_run.png}
131+
\caption{Sankey per run for composer-2-fast showing the distribution of evals with respect to categories and results}
132+
\end{figure}
133+
134+
57135
\clearpage
58136

59137
\subsection{deepseek-r1-distill-qwen-32b}
@@ -132,6 +210,32 @@ \subsection{gemini-3.1-pro-preview}
132210
\end{figure}
133211

134212

213+
\clearpage
214+
215+
\subsection{gemma-4-31B-it}
216+
217+
% Table: summary
218+
\input{export/tables/gemma-4-31B-it_summary}
219+
220+
% Table: category_summary
221+
\input{export/tables/gemma-4-31B-it_category_summary}
222+
223+
% Table: per_eval
224+
\input{export/tables/gemma-4-31B-it_per_eval}
225+
226+
\begin{figure}[htbp]
227+
\centering
228+
\includegraphics[width=\textwidth]{export/figures/gemma-4-31B-it_benchmark_plot.png}
229+
\caption{Benchmark Plot for gemma-4-31B-it.}
230+
\end{figure}
231+
232+
\begin{figure}[htbp]
233+
\centering
234+
\includegraphics[width=\textwidth]{export/figures/gemma-4-31B-it_sankey_per_run.png}
235+
\caption{Sankey per run for gemma-4-31B-it showing the distribution of evals with respect to categories and results}
236+
\end{figure}
237+
238+
135239
\clearpage
136240

137241
\subsection{glm-5}
@@ -314,6 +418,32 @@ \subsection{kimi-k2.5}
314418
\end{figure}
315419

316420

421+
\clearpage
422+
423+
\subsection{minimax-m2.7}
424+
425+
% Table: summary
426+
\input{export/tables/minimax-m2.7_summary}
427+
428+
% Table: category_summary
429+
\input{export/tables/minimax-m2.7_category_summary}
430+
431+
% Table: per_eval
432+
\input{export/tables/minimax-m2.7_per_eval}
433+
434+
\begin{figure}[htbp]
435+
\centering
436+
\includegraphics[width=\textwidth]{export/figures/minimax-m2.7_benchmark_plot.png}
437+
\caption{Benchmark Plot for minimax-m2.7.}
438+
\end{figure}
439+
440+
\begin{figure}[htbp]
441+
\centering
442+
\includegraphics[width=\textwidth]{export/figures/minimax-m2.7_sankey_per_run.png}
443+
\caption{Sankey per run for minimax-m2.7 showing the distribution of evals with respect to categories and results}
444+
\end{figure}
445+
446+
317447
\clearpage
318448

319449
\subsection{qwen2.5-coder-32b-instruct}

paper/export/comparison_plot.png

23.4 KB
104 KB
28 KB
74.2 KB
159 KB
68.7 KB
80.5 KB
409 KB

0 commit comments

Comments
 (0)