<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ai on Build in Public</title><link>https://build.ralphmayr.com/tags/ai/</link><description>Recent content in Ai on Build in Public</description><generator>Hugo</generator><language>en-us</language><copyright>©️ Ralph Mayr 2026</copyright><lastBuildDate>Fri, 26 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://build.ralphmayr.com/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>The memory consumption patterns of LangChain are… disturbing</title><link>https://build.ralphmayr.com/posts/88-the-memory-consumption-patterns-of-langchain-are-disturbing/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/88-the-memory-consumption-patterns-of-langchain-are-disturbing/</guid><description>&lt;p&gt;As I said in
&lt;a href="../21-no-you-dont-have-to-learn-langchain/"&gt;No, you don&amp;rsquo;t have to learn LangChain&lt;/a&gt;, we shouldn&amp;rsquo;t get distracted by the artificial complexity introduced by our frameworks. LangChain is mostly a wrapper around the REST APIs of various LLM providers. Useful? Yes&amp;mdash;switching between models becomes easy.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s a mystery I can&amp;rsquo;t explain.&lt;/p&gt;
&lt;p&gt;When I added Gemini as a fallback to DeepSeek (see yesterday&amp;rsquo;s post about DeepSeek refusing to touch Chinese politics), I thought it would be straightforward:&lt;/p&gt;</description></item><item><title>DeepSeek really won’t touch anything related to Chinese politics</title><link>https://build.ralphmayr.com/posts/87-deepseek-really-wont-touch-anything-related-to-chinese-politics/</link><pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/87-deepseek-really-wont-touch-anything-related-to-chinese-politics/</guid><description>&lt;p&gt;For most use cases in poketto.me, I&amp;rsquo;m pretty happy with #DeepSeek: it&amp;rsquo;s cheap, reliable, and the output quality matches any other LLM I&amp;rsquo;ve tried.&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s one big caveat: anything related to Chinese politics can trigger an immediate refusal. Example: Right after the launch of poketto.me, a user tried saving an article about the September 3rd Beijing meeting between Xi Jinping, Vladimir Putin, Kim Jong Un, et al. (
&lt;a href="https://orf.at/stories/3404330/" target="_blank" rel="noopener noreferrer"&gt;https://orf.at/stories/3404330/&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>The Gemini API for Video Understanding is surprisingly good</title><link>https://build.ralphmayr.com/posts/83-the-gemini-api-for-video-understanding-is-surprisingly-good/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/83-the-gemini-api-for-video-understanding-is-surprisingly-good/</guid><description>&lt;p&gt;As I mentioned in
&lt;a href="../82-geminis-url-context-feature-is-90-hype-10-value/"&gt;Gemini&amp;rsquo;s URL Context feature is 90% hype, 10% value&lt;/a&gt;, I was pretty disappointed with Gemini&amp;rsquo;s &amp;ldquo;URL Context&amp;rdquo; feature. But &amp;ldquo;Video Understanding&amp;rdquo;? That one actually works like a charm.&lt;/p&gt;
&lt;p&gt;How it works:&lt;/p&gt;
&lt;p&gt;👉 Provide a YouTube video link&lt;br&gt;
👉 Ask Gemini questions about the video&lt;br&gt;
👉 Get a structured response back&lt;/p&gt;
&lt;p&gt;For poketto.me, this unlocks a really neat feature: users can save any YouTube video in the app and either watch it later &lt;em&gt;or&lt;/em&gt; read a textual description of the video.&lt;/p&gt;</description></item><item><title>Gemini’s “URL Context” feature is 90% hype, 10% value</title><link>https://build.ralphmayr.com/posts/82-geminis-url-context-feature-is-90-hype-10-value/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/82-geminis-url-context-feature-is-90-hype-10-value/</guid><description>&lt;p&gt;I&amp;rsquo;ll admit&amp;mdash;I was pretty excited when Google announced that the Gemini API would support a new &amp;ldquo;URL Context&amp;rdquo; tool. The idea: you could &amp;ldquo;ask&amp;rdquo; Gemini about the content of a specific web page, with Google handling all the heavy lifting.&lt;/p&gt;
&lt;p&gt;The
&lt;a href="https://www.youtube.com/watch?v=4-6WQl-Hls0" target="_blank" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; even shows a neat example: send Gemini two recipe URLs and prompt it to compare ingredients and cooking times. If it worked, this would&amp;rsquo;ve been a game-changer for poketto.me:&lt;/p&gt;</description></item><item><title>Multi-threaded TTS: A bad idea</title><link>https://build.ralphmayr.com/posts/57-multi-threaded-tts-a-bad-idea/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/57-multi-threaded-tts-a-bad-idea/</guid><description>&lt;p&gt;Running text-to-speech in the cloud is fun&amp;mdash;until it isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Early on, I didn&amp;rsquo;t think much about thread safety. During my own testing, rarely would more than one TTS task be running in parallel, so there were no big issues. But once more users started using the feature, strange bugs popped up:&lt;/p&gt;
&lt;p&gt;Errors like &amp;ldquo;Assertion srcIndex &amp;lt; srcSelectDimSize failed&amp;rdquo; started showing up in the logs&amp;mdash;and worse, once triggered, the entire Cloud Run instance would become unusable until a redeploy.&lt;/p&gt;</description></item><item><title>AI is not a value proposition</title><link>https://build.ralphmayr.com/posts/54-ai-is-not-a-value-proposition/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/54-ai-is-not-a-value-proposition/</guid><description>&lt;p&gt;I didn&amp;rsquo;t coin this phrase (sadly), but it keeps proving itself true&amp;mdash;especially now that I&amp;rsquo;m working on GTM details for some of the more advanced features in poketto.me.&lt;/p&gt;
&lt;p&gt;Most users don&amp;rsquo;t care how your app works. They care what it does for them&amp;mdash;and whether that&amp;rsquo;s worth paying for.&lt;/p&gt;
&lt;p&gt;Since LLMs became easy to embed, companies started slapping &amp;ldquo;powered by AI&amp;rdquo; stickers on everything as if that alone justified a price tag. But unless the user clearly feels the value, it doesn&amp;rsquo;t matter what's under the hood. Case in point: Garmin&amp;rsquo;s hilariously underwhelming $7/month &amp;ldquo;AI subscription&amp;rdquo;. The so-called &amp;ldquo;insights&amp;rdquo; offered
&lt;a href="https://www.techradar.com/health-fitness/smartwatches/garmins-new-subscription-ai-feature-is-hilariously-bad-so-far" target="_blank" rel="noopener noreferrer"&gt;nothing users couldn&amp;rsquo;t deduce themselves&lt;/a&gt;&amp;mdash;or the app couldn&amp;rsquo;t have generated with much simpler logic.&lt;/p&gt;</description></item><item><title>Prompt engineering: A task best left to the machines</title><link>https://build.ralphmayr.com/posts/50-prompt-engineering-a-task-best-left-to-the-machines/</link><pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/50-prompt-engineering-a-task-best-left-to-the-machines/</guid><description>&lt;p&gt;Under the hood, poketto.me makes heavy use of LLMs. The podcast feature is a great example: Users can turn any web content into a podcast, but often that content isn&amp;rsquo;t well-suited for listening. LLMs are great at optimizing this&amp;mdash;simplifying complex sentences, turning headlines into enumerations, describing images verbally, etc.&lt;/p&gt;
&lt;p&gt;But the challenge: How do you craft a single, generic prompt that works across all types of content and runs unsupervised via the API?&lt;/p&gt;</description></item><item><title>LLM-Based Translations: The Good, the Bad, and the Ugly</title><link>https://build.ralphmayr.com/posts/35-llm-based-translations-the-good-the-bad-and-the-ugly/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/35-llm-based-translations-the-good-the-bad-and-the-ugly/</guid><description>&lt;p&gt;Automatic content translation has been a key feature of poketto.me from day one. Why? Because I believe there&amp;rsquo;s immense value in making content accessible to non-native speakers.&lt;/p&gt;
&lt;p&gt;Personally, I&amp;rsquo;m deeply interested in developments in countries like India, Pakistan, and China &amp;mdash; but the best publications from those regions often don&amp;rsquo;t publish in English. Being able to read and compare both &lt;em&gt;Dawn News&lt;/em&gt; (Pakistan) and the &lt;em&gt;Hindustan Times&lt;/em&gt; (India) coverage of tensions between the two countries &amp;mdash; in English &amp;mdash; for example is fascinating.&lt;/p&gt;</description></item><item><title>No, AI will not take McKiney or BCG out of business any day soon</title><link>https://build.ralphmayr.com/posts/31-no-ai-will-not-take-mckiney-or-bcg-out-of-business-any-day-soon/</link><pubDate>Thu, 31 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/31-no-ai-will-not-take-mckiney-or-bcg-out-of-business-any-day-soon/</guid><description>&lt;p&gt;Despite what the &amp;ldquo;God of Prompt&amp;rdquo; (sic!) or any other self-proclaimed &amp;ldquo;AI expert&amp;rdquo; is trying to tell you, none of the current AI models will replace a multi-hundred-thousand-dollar product strategy project.&lt;/p&gt;
&lt;p&gt;First of all, the people making these claims are, most likely, just trying to sell you their overpriced list of &amp;ldquo;magic&amp;rdquo; prompts &amp;mdash; and hoping for endorsement from the big AI companies or a retweet from Elon Musk.&lt;/p&gt;
&lt;p&gt;But giving the AI tools the benefit of the doubt, I tried using Grok, ChatGPT, and Claude to iterate on a commercial strategy for poketto.me. The results were&amp;hellip; disappointing. Here are the main issues:&lt;/p&gt;</description></item><item><title>Good things come to those who wait ⏳</title><link>https://build.ralphmayr.com/posts/29-good-things-come-to-those-who-wait/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/29-good-things-come-to-those-who-wait/</guid><description>&lt;p&gt;Remember when I was complaining about
&lt;a href="../8-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-one/"&gt;how hard it is&lt;/a&gt; to run even basic ML workloads on GCP? Turns out, Google has listened 😊 (well, probably not to me personally, but in general).&lt;/p&gt;
&lt;p&gt;You can now request GPUs for Cloud Run instances in the UI as well as on the command line. That means all the hassle I went through deploying my text-to-speech service into a Docker environment running inside a preemptible VM with GPUs&amp;mdash;and then figuring out how to start, stop, and deploy the VM automatically&amp;mdash;was&amp;hellip; well, not exactly wasted, but at least: not necessary anymore.&lt;/p&gt;</description></item><item><title>For non-urgent LLM tasks, DeepSeek has offers great value for money</title><link>https://build.ralphmayr.com/posts/26-for-non-urgent-llm-tasks-deepseek-has-offers-great-value-for-money/</link><pubDate>Sat, 26 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/26-for-non-urgent-llm-tasks-deepseek-has-offers-great-value-for-money/</guid><description>&lt;p&gt;AI is not at the core of what poketto.me does, but it helps a lot: I&amp;rsquo;m using LLMs to translate saved content and to smooth out formatting issues (especially with PDF content). Any old LLM can do these things quite well, but when it comes to pricing, none beats &lt;strong&gt;DeepSeek&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When using their
&lt;a href="https://api-docs.deepseek.com/quick_start/pricing" target="_blank" rel="noopener noreferrer"&gt;API&lt;/a&gt;, processing a million input tokens can be as cheap as &lt;strong&gt;$0.035&lt;/strong&gt;, and a million output tokens will cost you at most &lt;strong&gt;$1.10&lt;/strong&gt;. To give you an example: A typical 1,500-word essay will come down to about 2,000 tokens (input and output combined).&lt;/p&gt;</description></item><item><title>Never trust ChatGPT</title><link>https://build.ralphmayr.com/posts/25-never-trust-chatgpt/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/25-never-trust-chatgpt/</guid><description>&lt;p&gt;I may sound like a broken record on this, but I&amp;rsquo;ve seen it over and over again while working with AI tools on poketto.me: Don&amp;rsquo;t trust the chatbots. Ever.&lt;/p&gt;
&lt;p&gt;ChatGPT in particular has two immense problems: sycophancy and accuracy.&lt;/p&gt;
&lt;p&gt;Regarding the former: It&amp;rsquo;s trying to please you&amp;mdash;the user&amp;mdash;to the point where it feels like every response is prefaced with a compliment that&amp;rsquo;s only designed to keep you engaged. Some examples?&lt;/p&gt;</description></item><item><title>No, you don’t have to learn LangChain</title><link>https://build.ralphmayr.com/posts/21-no-you-dont-have-to-learn-langchain/</link><pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/21-no-you-dont-have-to-learn-langchain/</guid><description>&lt;p&gt;...or LangGraph, or LlamaIndex, or RAG, or whatever new AI-hype framework is trending this week in order build an AI-powered app.&lt;/p&gt;
&lt;p&gt;More often than not, these frameworks are just &lt;em&gt;wrappers&lt;/em&gt; around basic functionality&amp;mdash;in this case, calling an API. And the layers of abstraction they introduce can make even simple things (&amp;ldquo;prompt an LLM&amp;rdquo;) feel unnecessarily complex.&lt;/p&gt;
&lt;p&gt;Take RAG, for example. All it really does is frontload your prompt with additional context. That&amp;rsquo;s it. In practice, it boils down to concatenating a few strings&amp;mdash;something you can do in five lines of code. But LangChain adds layer upon layer of custom methods, config objects, routing logic, etc., that often just get in the way.&lt;/p&gt;</description></item><item><title>Running text-to-speech in the #Cloud is harder than you would think (part three)</title><link>https://build.ralphmayr.com/posts/10-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-three/</link><pubDate>Thu, 10 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/10-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-three/</guid><description>&lt;p&gt;So, after finally setting up a dedicated virtual machine (VM) to run my text-to-speech workloads and wiring up all the build and deployment scripts, I got a bit excited. Could I reduce the TTS latency even further if the VM had GPU power?&lt;/p&gt;
&lt;p&gt;In theory: Yes. In practice: Google doesn't give you access to their GPUs straight away. There&amp;rsquo;s a special quota setting for VM instances with GPUs, and by default that&amp;rsquo;s set to zero. As a regular user, you cannot increase this without contacting Google Cloud Support.&lt;/p&gt;</description></item><item><title>Running text-to-speech in the #Cloud is harder than you would think (part two)</title><link>https://build.ralphmayr.com/posts/9-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-two/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/9-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-two/</guid><description>&lt;p&gt;Do you remember when I mentioned the difficulty of running 🐸 CoquiTTS in the cloud yesterday? My first experiment was to run it directly in my Cloud Run backend service. In theory, this could have worked, but you'll never guess why it failed in practice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;x86 CPUs&lt;/strong&gt;. Really. Like the ones we had in our computers in the 90s. How did I figure this out? After taking a horribly long time to start up, the TTS service failed with a message saying that it was running on an 'incompatible' CPU architecture. Specifically, 32-bit x86 CPUs.&lt;/p&gt;</description></item><item><title>Running text-to-speech in the #Cloud is harder than you would think (part one)</title><link>https://build.ralphmayr.com/posts/8-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-one/</link><pubDate>Tue, 08 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/8-running-text-to-speech-in-the-cloud-is-harder-than-you-would-think-part-one/</guid><description>&lt;p&gt;For the podcast automation feature that I&amp;rsquo;m planning for a future version of poketto.me, I&amp;rsquo;ve been experimenting with various text-to-speech solutions. The easiest and highest-quality approach would have been the ElevenLabs API. However, considering the &amp;ldquo;throwaway&amp;rdquo; nature of these audio files &amp;ndash; most of which would only be listened to once by one person &amp;ndash; and the cost structure that this would introduce, I desperately need a cheaper approach.&lt;/p&gt;
&lt;p&gt;The Python library 🐸 CoquiTTS is pretty awesome: There are many different models to choose from, ranging from 'super low latency' to 'high quality' (including voice cloning). Therefore, poketto.me users could choose from many different voices, and from a commercial perspective, I could set different price points for different levels of quality and latency. However, they all require significant computing power to function.&lt;/p&gt;</description></item><item><title>Refactoring “legacy” code? Let the AI handle it!</title><link>https://build.ralphmayr.com/posts/7-refactoring-legacy-code-let-the-ai-handle-it/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/7-refactoring-legacy-code-let-the-ai-handle-it/</guid><description>&lt;p&gt;For reasons outlined in yesterday's post, I had to switch poketto.me from #CloudSQL (MySQL) to a completely different database architecture: Firebase 🔥&lt;/p&gt;
&lt;p&gt;At that stage, the Python backend code base wasn&amp;rsquo;t huge, but it was already fairly substantial. It included CRUD operations for several entities, as well as some basic lookup logic. Rewriting the whole thing would have taken me at least half a day.&lt;/p&gt;
&lt;p&gt;Instead, I asked my good friend #Claude to take care of things. And, to my surprise, the result worked straight away! 🎁The &amp;ldquo;dorp in&amp;rdquo; replacement generated by the AI immediately passed my unit tests, and also the chatbot&amp;rsquo;s instructions for how to set up and configure #Firebase were actually useful.&lt;/p&gt;</description></item><item><title>There’s no “npx cap remove” 🤦‍♂️</title><link>https://build.ralphmayr.com/posts/5-theres-no-npx-cap-remove/</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate><guid>https://build.ralphmayr.com/posts/5-theres-no-npx-cap-remove/</guid><description>&lt;p&gt;#Capacitor comes with a user-friendly command line interface. To add a new mobile platform to your project, simply run &amp;ldquo;&lt;strong&gt;npx cap add [android | ios]&lt;/strong&gt;&amp;rdquo;. And to remove one? Exactly &amp;mdash; you guessed it: &lt;strong&gt;'npx cap remove&lt;/strong&gt;...' But: That command isn&amp;rsquo;t implemented &amp;ndash; for understandable reasons. The interesting thing is, though, that it's &amp;quot;plausible&amp;quot; that it would be there, right?. So it's not surprising that #Claude insists it exists.&lt;/p&gt;
&lt;p&gt;This once again highlights a major issue with LLMs that I just can&amp;rsquo;t shut up about: Just because what the chatbot says sounds 'plausible' doesn't mean it's correct. In the case of AI-assisted coding, that&amp;rsquo;s not such a big deal &amp;ndash; you, the developer, will eventually realise that the AI was wrong. But what about the many other use cases where we blindly trust the AI and put whatever it says into action? 🤔&lt;/p&gt;</description></item></channel></rss>