<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Beyond the Model on Dhruv Patel - Lead Android Engineer</title><link>https://deardhruv.com/series/beyond-the-model/</link><description>Recent content in Beyond the Model on Dhruv Patel - Lead Android Engineer</description><generator>Hugo</generator><language>en</language><managingEditor>dhruv.time@gmail.com (Dhruv Patel)</managingEditor><webMaster>dhruv.time@gmail.com (Dhruv Patel)</webMaster><copyright>&lt;a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener"&gt;CC BY-NC 4.0&lt;/a&gt;</copyright><lastBuildDate>Wed, 21 Oct 2026 18:04:07 +0530</lastBuildDate><atom:link href="https://deardhruv.com/series/beyond-the-model/index.xml" rel="self" type="application/rss+xml"/><item><title>Part 6 - Pushing Mobile Hardware to the Edge</title><link>https://deardhruv.com/posts/ai_playground_series/06-pushing-mobile-hardware-to-the-edge/</link><pubDate>Wed, 21 Oct 2026 15:30:00 +0530</pubDate><author>dhruv.time@gmail.com (Dhruv Patel)</author><guid>https://deardhruv.com/posts/ai_playground_series/06-pushing-mobile-hardware-to-the-edge/</guid><description>&lt;h1 id="pushing-mobile-hardware-to-the-edge"&gt;Pushing Mobile Hardware to the Edge&lt;/h1&gt;
&lt;h2 id="part-6---dual-model-speculative-decoding-on-demand-gpu-dynamic-delivery-isolated-driver-crashes-and-streaming-fault-tolerance"&gt;Part 6 - Dual-model speculative decoding, on-demand GPU dynamic delivery, isolated driver crashes, and streaming fault-tolerance.&lt;/h2&gt;
&lt;p&gt;When you run open-source large language models on desktop GPUs, latency is rarely the bottleneck that keeps you awake at night. You have 24 GB of VRAM, 300 watts of wall power, and active cooling fans.&lt;/p&gt;
&lt;p&gt;On a smartphone, you have:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a shared SoC memory pool
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;thermal throttling within minutes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aggressive OS process killers (Android LMK)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fragmented GPU drivers
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a strict battery budget
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In &lt;a href="https://deardhruv.com/posts/ai_playground_series/03-the-model-was-fine-the-phone-wasnt/"&gt;Part 3&lt;/a&gt;, we explored memory admission, quantization tradeoffs, and thermal guardrails. In &lt;a href="https://deardhruv.com/posts/ai_playground_series/05-at-some-point-i-stopped-building-a-chat-app/"&gt;Part 5&lt;/a&gt;, we established an MVI Clean Architecture to coordinate these moving parts.&lt;/p&gt;</description></item><item><title>Part 5 - At Some Point I Stopped Building a Chat App</title><link>https://deardhruv.com/posts/ai_playground_series/05-at-some-point-i-stopped-building-a-chat-app/</link><pubDate>Mon, 05 Oct 2026 14:00:00 +0530</pubDate><author>dhruv.time@gmail.com (Dhruv Patel)</author><guid>https://deardhruv.com/posts/ai_playground_series/05-at-some-point-i-stopped-building-a-chat-app/</guid><description>&lt;h1 id="at-some-point-i-stopped-building-a-chat-app"&gt;At Some Point I Stopped Building a Chat App&lt;/h1&gt;
&lt;h2 id="part-5---the-project-became-a-platform-because-every-feature-needed-a-place-to-live"&gt;Part 5 - The project became a platform because every feature needed a place to live.&lt;/h2&gt;
&lt;p&gt;There was a point where I stopped looking at AI Playground as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chat + models
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and started seeing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;runtime orchestration
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;document ingestion
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;retrieval
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vision
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;memory policy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;image generation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;diagnostics
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model delivery
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;platform integration
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At that point, adding another feature without architecture would have been reckless.&lt;/p&gt;</description></item><item><title>Part 4 - I Put an Image Generator Inside the Phone</title><link>https://deardhruv.com/posts/ai_playground_series/04-i-put-an-image-generator-inside-the-phone/</link><pubDate>Mon, 05 Oct 2026 13:00:00 +0530</pubDate><author>dhruv.time@gmail.com (Dhruv Patel)</author><guid>https://deardhruv.com/posts/ai_playground_series/04-i-put-an-image-generator-inside-the-phone/</guid><description>&lt;h1 id="i-put-an-image-generator-inside-the-phone"&gt;I Put an Image Generator Inside the Phone&lt;/h1&gt;
&lt;h2 id="part-4---i-did-not-build-a-diffusion-engine-i-integrated-image-generation-runtimes-and-then-had-to-engineer-everything-around-them"&gt;Part 4 - I did not build a diffusion engine. I integrated image-generation runtimes and then had to engineer everything around them.&lt;/h2&gt;
&lt;p&gt;Text generation had already forced me to learn about:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;runtime selection
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;memory
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;native code
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lifecycle
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fallback
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Image generation brought all of those problems back, but in a different shape.&lt;/p&gt;
&lt;p&gt;The important distinction at the start is the same one I made in Part 1:&lt;/p&gt;</description></item><item><title>Part 3 - The Model Was Fine. The Phone Wasn't.</title><link>https://deardhruv.com/posts/ai_playground_series/03-the-model-was-fine-the-phone-wasnt/</link><pubDate>Mon, 05 Oct 2026 12:00:00 +0530</pubDate><author>dhruv.time@gmail.com (Dhruv Patel)</author><guid>https://deardhruv.com/posts/ai_playground_series/03-the-model-was-fine-the-phone-wasnt/</guid><description>&lt;h1 id="the-model-was-fine-the-phone-wasnt"&gt;The Model Was Fine. The Phone Wasn&amp;rsquo;t.&lt;/h1&gt;
&lt;h2 id="part-3---the-difficult-bugs-were-memory-native-lifecycle-gpu-drivers-and-operating-system-behavior"&gt;Part 3 - The difficult bugs were memory, native lifecycle, GPU drivers and operating-system behavior.&lt;/h2&gt;
&lt;p&gt;There is a point in a local AI project where the model stops being the hardest part.&lt;/p&gt;
&lt;p&gt;For me, that point was when I started testing the application on actual phones instead of treating a successful development run as proof of correctness.&lt;/p&gt;
&lt;p&gt;A model would load.&lt;/p&gt;
&lt;p&gt;A prompt would work.&lt;/p&gt;</description></item><item><title>Part 2 - The Day a Chat Box Became a Document Engine</title><link>https://deardhruv.com/posts/ai_playground_series/02-the-day-a-chat-box-became-a-document-engine/</link><pubDate>Mon, 05 Oct 2026 11:00:00 +0530</pubDate><author>dhruv.time@gmail.com (Dhruv Patel)</author><guid>https://deardhruv.com/posts/ai_playground_series/02-the-day-a-chat-box-became-a-document-engine/</guid><description>&lt;h1 id="the-day-a-chat-box-became-a-document-engine"&gt;The Day a Chat Box Became a Document Engine&lt;/h1&gt;
&lt;h2 id="part-2---i-thought-attach-a-pdf-would-be-a-ui-feature-it-became-an-ingestion-pipeline"&gt;Part 2 - I thought “attach a PDF” would be a UI feature. It became an ingestion pipeline.&lt;/h2&gt;
&lt;p&gt;Once local chat was reliable enough, I wanted the next capability that makes a local assistant genuinely useful:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Let me ask questions about my own files without uploading them.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That sounds like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;paperclip icon
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file picker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is not.&lt;/p&gt;
&lt;p&gt;A PDF is a container. A Word document is structured data. An Excel workbook is a workbook model. A scanned document may have no text layer at all. An image may contain words, diagrams, tables and visual context simultaneously.&lt;/p&gt;</description></item><item><title>Part 1 - I Wanted the Model to Stay on the Phone</title><link>https://deardhruv.com/posts/ai_playground_series/01-i-wanted-the-model-to-stay-on-the-phone/</link><pubDate>Mon, 05 Oct 2026 10:00:00 +0530</pubDate><author>dhruv.time@gmail.com (Dhruv Patel)</author><guid>https://deardhruv.com/posts/ai_playground_series/01-i-wanted-the-model-to-stay-on-the-phone/</guid><description>&lt;h1 id="beyond-the-model-building-a-private-ai-playground-for-android--ios"&gt;Beyond the Model: Building a Private AI Playground for Android &amp;amp; iOS&lt;/h1&gt;
&lt;h2 id="part-1---i-wanted-the-model-to-stay-on-the-phone"&gt;Part 1 - I Wanted the Model to Stay on the Phone&lt;/h2&gt;
&lt;h3 id="the-engineering-journey-of-integrating-established-on-device-ai-runtimes-into-one-multimodal-mobile-product---and-everything-it-takes-to-make-the-pieces-behave-like-a-coherent-system"&gt;The engineering journey of integrating established on-device AI runtimes into one multimodal mobile product - and everything it takes to make the pieces behave like a coherent system&lt;/h3&gt;
&lt;p&gt;There was one constraint behind AI Playground that shaped almost every architectural decision that came after it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;I did not want the core AI workflow to depend on a server.&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>