Welcome back, fellow tinkerers, prompt-engineering masochists, and local-inference evangelists. If you've been following Kiwi-chan's journey, you know we've been chasing the holy grail of autonomous AI agents: zero cloud dependency, zero API calls, purely local inference. After months of quantization, context-window gymnastics, and existential crises over procedural block placement, I'm thrilled to announce that Kiwi-chan has officially gone fully local, running on the magnificent Qwen 35B model.
And yes, it survived. Barely. But it survived.
π The Numbers Don't Lie (But They Do Judge)
Let's talk telemetry, because raw metrics are the lifeblood of any good devlog. Over the past 4 hours, Kiwi-chan executed a staggering 3,307 total actions. Out of those, 1,535 were successful, giving us a raw success rate of 46.4%.
Now, a cloud-hosted API bot would hit a rate limit, a timeout, or a content filter and immediately spiral into a failure loop. Kiwi-chan, running entirely on my local GPU, just kept chugging. That 46.4% isn't a failure metric; it's a local learning rate. Every failed dig cycle is a lesson in biome awareness. Every recovered error is a victory for our fallback logic. In the world of fully local LLMs, success isn't about hitting 99% on day oneβit's about building a system that learns from its own hallucinations without calling home.
π§ The Qwen 35B Transition: Why Local Changes Everything
Switching to Qwen 35B was a massive architectural leap. We're talking ~35 billion parameters running locally, handling everything from intent parsing to JavaScript code generation for the Mineflayer bot. The latency is real, the token budgets are tight, and the context window is playing hard to get. But the payoff? Complete data sovereignty, zero inference costs, and the ability to run this thing in a basement server rack while the rest of the internet pays $0.03 per prompt.
However, local inference comes with its own flavor of chaos. Look at the debug snapshot from the last 4 hours. The logs are a treasure trove of BOREDOM TRIGGERED events and fallback JSON extraction. Why? Because Qwen 35B, when asked to output strict JSON after a long </think> chain, occasionally hits the output token limit. The system gracefully degrades, extracts the goal from the raw thought process, and feeds it back to the coach. It's like watching a self-driving car navigate a roundabout by just remembering which way the wind blows. But it works. And that's the beauty of local autonomy.
π² The Birch Log Saga: A Technical Autopsy
Let's address the elephant in the server room: the Birch Log Obsession. The recent failures are dominated by gather_birch_log and mine_stone. Why? Biome mismatch and strict reasoning alignment.
Kiwi-chan spawned in a birch-dense area, but the pathfinding and block search logic kept tripping over useExtraInfo Y-level constraints. The bot would dig, fail to collect, throw a Could not find birch_log error, and the recovery plan would just⦠ask it to dig birch again. Classic local-LLM loop. The system's memory check noted gather_birch_log repeated 6 times before triggering the boredom fallback.
We've since implemented strict biome-aware recovery rules:
-
Oak Obsession Ban: If
oak_logfails, the AI must pivot tobirch_log,spruce_log, or triggerexplore_forward. -
Explore Forward Restriction:
explore_forwardis now gated behind explicit biome-escape intent, not just material recovery. -
Cobblestone Trap Avoidance: Mining
stonedropscobblestone. The goal must be namedgather_cobblestoneor the inventory audit fails. I learned this the hard way, and my VRAM cried.
π» Code & Architecture Highlights
The new generation rules are razor-sharp, designed specifically for local token efficiency:
-
</think>chains are capped at 3 sentences to prevent context overflow. - Single-Task Principle: No more "craft then place" monoliths. One specific action per script.
-
Placement Safety:
equip β move 3 blocks away β wait 20 ticks β look β place. Physics sync is non-negotiable in Mineflayer. -
No Error Hiding:
try-catchblocks are banned. Errors must crash so the coach can parse them. -
Inventory Auditing:
beforeCountis declared before everydig(), and we're usingbot.registry.itemsByName['cobblestone'].idto avoid type mismatches.
π What's Next?
Going fully local with Qwen 35B wasn't just a tech upgrade; it was a philosophy shift. We traded infinite cloud context for grounded, deterministic, locally-inferred autonomy. The 46.4% success rate is our beta scar tissue. Every failed action is a debug log waiting to be optimized. Every successful craft_crafting_table is a small victory for local AI.
Kiwi-chan is no longer a chatbot with a pickaxe. It's a self-contained, locally-hosted, Qwen-powered survivalist. And it's just getting started.
Next up: biome-aware exploration routing, dynamic token budgeting, and teaching Kiwi-chan that not every tree is a birch. Stay tuned, keep your GPUs cool, and remember: in local AI, failure is just unoptimized data.
await bot.waitForTicks(20); // See you in the next devlog.
Call to Action:
This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!
π‘οΈ Join the inner circle on Patreon for monthly support and exclusive updates: https://www.patreon.com/15923261/join
β Tip me a coffee on Ko-fi for a one-time boost: https://ko-fi.com/kiwitech
All contributions directly help upgrade my melting GPU rig to an RTX 3060! π₯β¨ Let's get Kiwi-chan out of the debugging woods and into a proper Minecraft world!

Top comments (0)