
It's been about 10 months (!) since the last article. Most of that time went into my work at Dropsolid as an AI Product Architect. I've participated in the design, building, and maintaining the AI infrastructure: inference, models, guardrails, tracing, vector stores, and their integrations with Drupal. Quite a few moving parts - plus, some participation in the Drupal AI community, which was a fun process but definitely took some time โณ.
Meanwhile, we secured โฌ2.5 million in financing at Dropsolid AI. There was a lot happening on that side, and moving NicheBench forward alongside it was harder than I expected ๐ข.
The hardware was another limit. Progress with one GPU was difficult, and even after adding a second one, running a model through the new benchmark could turn into days of trial and error - i.e. I'd start a run midnight and would wake-up to a failed attempt ๐ฅ. And, keeping up with the AI news takes a ton of time as well: new models, new harnesses, and experiments to understand what they could actually do. Useful work, but it competed with both NicheBench and writing about it.
So, this is where things stand. The goal is still to experiment with fine-tuned models for Drupal coding. NicheBench now has a runtime mode, QuietBee has more hardware, and I have some results to share - along with a few runs that went nowhere.
Dropsolid AI became the first sponsor of our Drupal-focused AI experiments and this series of articles. They chipped in toward QuietBee's second GPU, which let me run better models and test them on NicheBench's runtime tasks. That was a practical help with the experiments - thank you, Dropsolid!
By the way, if you or your company would like to help fund this work, there are sponsorship opportunities too. The goal is to work toward fine-tuned Drupal coding models (initially) and document what works along the way - including what doesn't. I can't promise a finished model, but that's the direction I'm working toward โญ.
Reach out to me via consultation page or via my LinkedIn.
I've been calling this NicheBench v2, though the actual package version is 0.2.x (idk when I'll be ready to call it >=1.0), the runtime-capable release. The earlier quiz and code-generation evaluations are still there. The new part is testing what an agent actually builds inside a realistic running Drupal environment. The harness is in the NicheBench repository.
A model can answer Drupal questions or generate a convincing implementation without delivering a working feature. I wanted to test that next step: give it a project and a task, let it work through OpenCode, then check what it actually did.
I created a dummy project: NicheJobs - a simple jobs based website, similar to LinkedIn. Then, I created 5 separate tasks (each task has its own branch) - each task is both specific and vague - something a real client would ask ๐
To answer the question "can a model work as a coding agent inside a known harness?" - we use our NicheJobs project, we create a full working environment around it (DDEV), and then we let the LLM work through OpenCode (the coding harness). Our 5 task branches provide pinned starting states; NicheBench puts the selected task into its own workspace, makes sure it's reset to the beginning (clean workspace), no extra files, no artifacts and kicks off the process by providing the Task to the LLM (in the Opencode). We wait for a few minutes (or hours, OR DAYS) and the model does its magic: it can run commands, query the database, run tests, etc - this gives the model a huge freedom & flexibility (but in the cage, just to be safe).
Once the job's ready, the LLM will raise a flag ๐ฉ.
When the flag's raised, NicheBench collects everything into an artifact: code changes, traces, logs, etc. And finally, we run deterministic checks, and sends the artifacts to a separate AI judge (an LLM itself, with hints about what's supposed to look "right").
Here's an overview of how the pieces come together and talk to each-other - a high level architectural overview of sorts:
I've grouped OpenCode and DDEV together in the diagram because they work on the same task - the DDEV containers actually run alongside the cage, not inside it. Each task gets its own workspace and Drupal setup โ we clean up afterwards and start fresh for the next one.
๐ ๏ธ Here's what I gave the agent to build:
These are feature-sized tasks, not one-function exercises. Runtime evaluations ran sequentially on this host. I also tried to force the agents to touch some API layers that were recently introduced (so it plays on either their knowledge, or their ability to discover it from the Drupal's Core itself).
For this task pack, the runtime hybrid score is 50% deterministic checks and 50% judge score. Deterministic checks test defined outcomes; the judge reviews the implementation and its artifacts. The separate acceptance gate fails if a critical check fails, even when the score is high.
The score combines deterministic checks and the judgeโs assessment - useful for comparing what the models built, but not proof that every feature works. If a run stops before scoring, I leave it unscored, rather than calling it a zero.
These results answer the runtime question better than a quiz or code-generation score can. They are still a snapshot of particular models and runs, not a current leaderboard.
|
Model |
Runtime mean |
Quiz |
One-shot coding |
Coverage |
Qualification |
|---|---|---|---|---|---|
|
MiniMax M3 |
85.94% |
Not reported |
Not reported |
1 ร 5 |
Provisional; harness defects affect original scores |
|
GPT-5.6-Terra |
76.85% |
95.17% |
96.33% |
1 trial across tasks 001-005 |
Scored reference; single trial |
|
MiniMax M2.7 |
69.60% |
77.24% |
66.06% |
2 trials ร 5 tasks |
Main cohort |
|
Qwen3.6-35B-A3B |
58.80% |
80.34% |
62.63% |
2 ร 5 |
Main cohort |
|
Agents-A1 |
57.51% |
81.38% |
35.25% |
2 ร 5 |
Main cohort |
|
Ornith-35B |
57.39% |
83.10% |
49.50% |
2 ร 5 |
One unscored attempt was counted as zero in the aggregate |
|
Qwen3.6-27B NVFP4/MTP |
52.79% |
88.62% |
62.75% |
2 ร 5 |
Main cohort |
|
Qwen3.5-9B |
35.49% |
85.86% |
25.52% |
2 trials ร 5 tasks |
Overall aggregate retained; runtime SD unavailable |
|
Gemma-4-26B IQ4NL KV16/16 |
29.44% |
88.97% |
57.04% |
2 trials ร 5 tasks |
Overall aggregate retained; runtime SD unavailable |
|
Laguna-S-2.1 |
Unscored |
87.59% |
53.29% |
No completed evaluation |
No runtime mean |
|
Qwen3.8-27B, local |
Unscored |
88.97% |
83.92% |
No completed evaluation |
Diagnostic attempts did not produce a completed evaluation |
In the table above - you can see the hybrid (final) score of the models when it comes to run-time tasks (I also included old "quiz" and "code-generation" score alongside to compare the models). I was NOT very consistent in my runs, some models had 2 runs (and an average between those), some took too long so I settled just on a single run.
Here's a view of the results graphically, sorted by runtime score, highest first. Laguna and local Qwen3.8 have no scored runtime result โ I've left them out of the graphs.
The score blends deterministic checks and judge assessment - call it hybrid or final score. Here's a break-down PER TASK. Each model performs differently on different tasks - some tasks can touch certain APIs that the model might not be aware of.
Quick heads-up before comparing the bars ๐
I mainly focused on the Qwen models, and the 'custom' fine-tuned flavors of the Qwen like: Ornith or Agents-A1 - that's because I actually eye those models for further fine-tuning myself.
The runtime speed is also an interesting story - but at times also misleading. Some models believed they were done - stopped early and got an average or bad score, others tried hard to polish their work, built a test-suite, etc and in result took way more hours per 1 task.
Here's what I learned from these experiments:
BTW, the previous NicheBench vs Drupal 10-11 article covered the quiz and one-shot code-generation results. In NicheBench + New models, I was already looking at tool use, long contexts, and multi-turn behavior before Drupal knowledge. This round puts that agentic part to the test - an OpenCode agent that can inspect and edit a project, run commands, and check its work in DDEV.
The model, harness, provider, and budget all play a part here ๐คทโโ๏ธ.
The original QuietBee build article was published almost a year ago. Back then, I had the Threadripper base with 96 GB of DDR4, and buying three RTX 5060 Ti cards was still the plan. Now two RTX 5060 Ti 16 GB cards are running, I've bought the third, and RAM is up to 128 GB of DDR4.
Yes, 128 GB of DDR4 in this RAM-apocalypse. TrendForce has been reporting reduced DDR4 allocations as suppliers prioritize HBM and server memory. Building a budget lab hasn't got easier.
| ย |
Running Now |
Once The Third Card Arrives |
|---|---|---|
|
AI GPUs |
2 ร RTX 5060 Ti 16 GB |
3 ร RTX 5060 Ti 16 GB |
|
Total Physical VRAM |
32 GB across two cards |
48 GB across three cards |
|
System RAM |
128 GB DDR4 |
128 GB DDR4 |
The first 5060 Ti cost me around โฌ440, second ~โฌ580. The third cost โฌ750, and that was the cheapest I could find. World went crazy ๐คฏ.
I also came across Kai's updated local-AI hardware comparison. Almost a year after my build article, he landed on 2 x 5060 Ti @ 16GB cards too. Nice to see someone else arrive at the same choice - though his comparison also makes the point that the software and how you split a model matter a lot.
More GPUs don't automatically become one big pool of memory. What we can run or fine-tune still depends on the model and how the software uses the cards. Having that said, I still have room for 4th GPU (my PCIe lanes allow it) - so, looking forward for anyone who wants to help out!
The actual next step is data collection and synthetic data generation. There is quite a lot of complexity in that process, so I want to start with some basics, fine-tune a model, and check whether we can make meaningful progress on NicheBench.
I don't need to build the entire data pipeline before testing that idea. For this first experiment, start with a small, checked set of useful examples, run a fine-tuning experiment, and compare the model against its original baseline under the same evaluation conditions. Then use what we learn to decide what data to collect or generate next.
The evaluation tasks also need to stay out of the training set. Teaching a model the benchmark answers and then reporting a higher score wouldn't tell us much about whether it got better at Drupal.
That's the next experiment. Can a focused training set make a model better at this niche, and does that improvement show up beyond the quiz? I don't know yet. But we now have a way to measure more than whether it can explain a Drupal API.
If you work on Drupal AI, I'd be interested in what kinds of coding tasks you'd want to see tested - leave a comment ๐.
Now that you reached the end ๐ - another thank-you to Dropsolid, the first sponsor of this Drupal-focused series. Their support helped get QuietBee's second GPU into the rig.





