<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Maz Development Directory - ai</title><link href="https://mazyod.com/" rel="alternate"/><link href="https://mazyod.com/feeds/ai.atom.xml" rel="self"/><id>https://mazyod.com/</id><updated>2026-08-03T23:40:20+03:00</updated><entry><title>Grand Theft Bandwidth</title><link href="https://mazyod.com/blog/2026/08/03/grand-theft-bandwidth/" rel="alternate"/><published>2026-08-03T23:40:20+03:00</published><updated>2026-08-03T23:40:20+03:00</updated><author><name>Mazyad Alabduljaleel</name></author><id>tag:mazyod.com,2026-08-03:/blog/2026/08/03/grand-theft-bandwidth/</id><summary type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;One day, building security called my office because the cameras were not
streaming properly.&lt;/p&gt;
&lt;p&gt;Naturally, this was my fault.&lt;/p&gt;
&lt;p&gt;I was not touching the cameras. I was not touching the network switches. I was
not even doing anything that sounded security-camera-adjacent. I was, in my
mind, doing very responsible …&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;One day, building security called my office because the cameras were not
streaming properly.&lt;/p&gt;
&lt;p&gt;Naturally, this was my fault.&lt;/p&gt;
&lt;p&gt;I was not touching the cameras. I was not touching the network switches. I was
not even doing anything that sounded security-camera-adjacent. I was, in my
mind, doing very responsible AI infrastructure work: downloading local LLMs so
we could test them internally without shipping sensitive data to the other side
of the planet.&lt;/p&gt;
&lt;p&gt;Apparently, the models had other plans.&lt;/p&gt;
&lt;p&gt;The download was aggressive enough that the building network started gasping for
air. Camera feeds suffered. People called. I moved the download elsewhere, and
then &lt;em&gt;that&lt;/em&gt; site called too.&lt;/p&gt;
&lt;p&gt;This was not even the worst part.&lt;/p&gt;
&lt;p&gt;Back in 2023, when ChatGPT and GPT-3.5 had just kicked the door open, we were
trying to figure out whether local LLMs could be useful in a real organization
in Kuwait. Not a toy notebook. Not a screenshot for LinkedIn. Something we could
actually use at work.&lt;/p&gt;
&lt;p&gt;Boy, was I optimistic.&lt;/p&gt;
&lt;h2&gt;The Llama Before Time&lt;/h2&gt;
&lt;p&gt;The first serious local LLM wave for us was around Llama. Meta released the
original LLaMA in February 2023, and Llama 2 followed in July 2023. For the
first time, the idea of running a useful-ish model locally did not sound like a
research fantasy wearing a trench coat.&lt;/p&gt;
&lt;p&gt;So we did what any sensible team would do.&lt;/p&gt;
&lt;p&gt;We downloaded the thing, fought the thing, and asked the thing HR questions.&lt;/p&gt;
&lt;p&gt;I vaguely remember using &lt;code&gt;llama.cpp&lt;/code&gt; or something close to it at the time. The
details are fuzzy, because the entire era was fuzzy. Half the work was not
&amp;ldquo;building an AI product&amp;rdquo; as much as figuring out which exact incantation made
the model stop speaking nonsense.&lt;/p&gt;
&lt;p&gt;Chat templates were a major part of that pain.&lt;/p&gt;
&lt;p&gt;Nowadays, you can often point a library at a model and it mostly knows how the
conversation should be formatted. Back then, it felt like preparing a royal
banquet for a very picky dragon. System message here. User message there. BOS
token? EOS token? Assistant prefix? One missing newline and suddenly the model
acts like it had a rough childhood.&lt;/p&gt;
&lt;p&gt;We eventually got a demo running on an A100.&lt;/p&gt;
&lt;p&gt;An HR bot.&lt;/p&gt;
&lt;p&gt;It answered a simple HR FAQ question in over a minute.&lt;/p&gt;
&lt;p&gt;BAM. The future.&lt;/p&gt;
&lt;p&gt;The funny thing is that this was still a win. It proved something important: we
could run these models locally, on our infrastructure, against our internal use
cases. It was unusable, sure, but it was unusable in a promising direction.&lt;/p&gt;
&lt;p&gt;That is how they get you.&lt;/p&gt;
&lt;h2&gt;Pull Request to Reality&lt;/h2&gt;
&lt;p&gt;Enter Ollama!&lt;/p&gt;
&lt;p&gt;Ollama changed the vibe completely. Instead of manually dragging model artifacts
through a swamp, we could do the magic thing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ollama&lt;span class="w"&gt; &lt;/span&gt;pull&lt;span class="w"&gt; &lt;/span&gt;llama3
ollama&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;llama3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Was it always that exact model? No. Please do not send me email. The point is
that models became installable things.&lt;/p&gt;
&lt;p&gt;That was huge.&lt;/p&gt;
&lt;p&gt;For a while, Ollama was the best thing that happened to local LLM exploration.
It was simple, friendly, written in Go, and had the exact user experience we
needed at that stage. Pull a model. Run a model. Try another model. Repeat until
your GPU starts judging you.&lt;/p&gt;
&lt;p&gt;Throughout 2024, this setup carried us pretty far. We kept an eye on the Ollama
model library like raccoons outside a bakery. New model? Pull it. Existing model
updated? Pull it again. Qwen, Llama, Gemma, whatever looked promising that week.&lt;/p&gt;
&lt;p&gt;At the same time, we were building prompts like tiny legal contracts.&lt;/p&gt;
&lt;p&gt;Chain of thought. Tree of thought. Few-shot examples. Carefully worded system
prompts. Model-specific tweaks. The whole spellbook.&lt;/p&gt;
&lt;p&gt;I know what you&amp;rsquo;re thinking right about now:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wasn&amp;rsquo;t this all a bit silly?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fair enough.&lt;/p&gt;
&lt;p&gt;But it worked just often enough to be dangerous.&lt;/p&gt;
&lt;h2&gt;Context Clueless&lt;/h2&gt;
&lt;p&gt;The worst failure mode was not bad output.&lt;/p&gt;
&lt;p&gt;Bad output is fine. Bad output is loud. You can look at it, insult it, change
the prompt, and try again.&lt;/p&gt;
&lt;p&gt;The worst failure mode was silent context loss.&lt;/p&gt;
&lt;p&gt;At the time, Ollama&amp;rsquo;s effective context window was easy to misunderstand. The
defaults also changed over time, and depending on the model, API, environment,
and settings, you could be dealing with a smaller context than the model card
made you believe. Public issues and docs around &lt;code&gt;num_ctx&lt;/code&gt; tell the same general
story: if you did not set and verify the context length properly, you could get
surprised.&lt;/p&gt;
&lt;p&gt;We got surprised.&lt;/p&gt;
&lt;p&gt;Our prompt and pipeline team would update prompts, test flows, add retrieval
context, add instructions, add examples, and then stare at the model behaving
weirdly. The assumption was that the model saw the whole prompt.&lt;/p&gt;
&lt;p&gt;It did not.&lt;/p&gt;
&lt;p&gt;Parts of the prompt were effectively falling out of the useful context. The
window moved. The model lost focus. No dramatic crash. No helpful exception. No
angry red stack trace yelling, &amp;ldquo;DEAR HUMAN, YOUR PROMPT HAS LEFT THE BUILDING.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Just worse answers.&lt;/p&gt;
&lt;p&gt;This is the kind of bug that makes you question your own competence. Are the
examples bad? Is the system prompt contradictory? Is the model weak? Is the RAG
chunking wrong? Is Tuesday cursed?&lt;/p&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;p&gt;But also, the model was not seeing what we thought it was seeing.&lt;/p&gt;
&lt;p&gt;Overkill? No. Under-visibility.&lt;/p&gt;
&lt;h2&gt;Grand Theft Bandwidth&lt;/h2&gt;
&lt;p&gt;Then came the network incident.&lt;/p&gt;
&lt;p&gt;Ollama downloads were somehow aggressive enough in our environment to cause real
pain for everyone else sharing the pipe. I had downloaded giant Docker images
before. I had pulled plenty from Hugging Face. Tens of gigabytes were not new to
me.&lt;/p&gt;
&lt;p&gt;This felt different.&lt;/p&gt;
&lt;p&gt;Security called because the cameras were affected. I moved the download to
another site. That site complained too.&lt;/p&gt;
&lt;p&gt;There is a special kind of professional embarrassment in explaining that the
building cameras are having a bad day because you wanted to test a new language
model.&lt;/p&gt;
&lt;p&gt;Not my proudest incident report.&lt;/p&gt;
&lt;h2&gt;Dify Hard&lt;/h2&gt;
&lt;p&gt;Around the same time, we were also experimenting with Dify by LangGenius.&lt;/p&gt;
&lt;p&gt;Dify was beautiful.&lt;/p&gt;
&lt;p&gt;You could build RAG workflows with a node-based editor. Throw documents in. Let
it chunk them. Add hybrid search. Wire prompts. Build workflows. Get a chat UI
out of the box. For a team trying to move quickly, this was intoxicating.&lt;/p&gt;
&lt;p&gt;The hard parts looked solved.&lt;/p&gt;
&lt;p&gt;They were not solved. They had been moved behind glass.&lt;/p&gt;
&lt;p&gt;As our expectations became more production-shaped, Dify started to hurt. It was
a large system to deploy in a security-sensitive environment. It crashed in odd
ways. It lacked some of the visibility we needed. Prompt changes and workflow
changes were not as easy to track, review, diff, and reason about as regular
code.&lt;/p&gt;
&lt;p&gt;The graph was nice until we needed &lt;code&gt;git blame&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That was the recurring lesson. Friendly tools were excellent for finding the
shape of the problem. They were less excellent when the problem needed audit
trails, controlled releases, typed interfaces, repeatable tests, and boring
engineering discipline.&lt;/p&gt;
&lt;p&gt;Meh.&lt;/p&gt;
&lt;p&gt;I like boring engineering discipline.&lt;/p&gt;
&lt;p&gt;I just prefer discovering that before the demo.&lt;/p&gt;
&lt;h2&gt;The Easy Road Ends&lt;/h2&gt;
&lt;p&gt;By late 2024 and into 2025, the models were getting good enough that production
stopped sounding ridiculous. Gemma 3 brought strong vision-language support.
Qwen3 made reasoning-style workflows feel much more practical.&lt;/p&gt;
&lt;p&gt;The ceiling had moved.&lt;/p&gt;
&lt;p&gt;That changed the question. We were no longer asking, &amp;ldquo;Can we run a local LLM?&amp;rdquo;
We were asking, &amp;ldquo;Can we run this reliably enough that people should depend on
it?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Different question. Different tools.&lt;/p&gt;
&lt;p&gt;So we made the call to move away from the friendly exploration stack. Ollama had
gotten us far, but we needed a serving layer we could inspect and tune more
directly. Dify had gotten us far, but we needed workflows that lived in code,
with proper review, versioning, tests, and programmatic control.&lt;/p&gt;
&lt;p&gt;That led us toward vLLM for serving and Pydantic AI for code-first agent
workflows.&lt;/p&gt;
&lt;p&gt;Not because that sounded fun.&lt;/p&gt;
&lt;p&gt;It absolutely did not.&lt;/p&gt;
&lt;p&gt;But production has a way of making &amp;ldquo;easy&amp;rdquo; look expensive.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Local LLMs became real for us in stages. First they ran. Then they became easy
to pull. Then they became easy to wire together. Then the abstractions leaked
all over the floor.&lt;/p&gt;
&lt;p&gt;I do not regret the Ollama and Dify era. Quite the opposite. Those tools were
excellent ladders.&lt;/p&gt;
&lt;p&gt;We just tried to live on the ladder.&lt;/p&gt;
&lt;p&gt;The lesson was not that friendly tools are bad. The lesson was that friendly
tools help you discover the shape of the problem. Production needs tools that
let you see the teeth.&lt;/p&gt;</content><category term="ai"/></entry></feed>