<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LLM on NoRaincheck</title><link>https://noraincheck.github.io/tags/llm/</link><description>Recent content in LLM on NoRaincheck</description><generator>Hugo</generator><language>en-US</language><copyright>NoRaincheck</copyright><lastBuildDate>Sat, 04 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://noraincheck.github.io/tags/llm/index.xml" rel="self" type="application/rss+xml"/><item><title>Vibe Benchmarks</title><link>https://noraincheck.github.io/posts/vibe-benchmarks/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/vibe-benchmarks/</guid><description>&lt;h2 id="vibe-benchmarks"&gt;Vibe Benchmarks&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;July 2026&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;A quick round of informal benchmarking across a few local coding models.&#10;Nothing rigorous — just a few problems run through each model and seeing&#10;how they handled it. The goal was to get a sense of the trade-offs between&#10;quality, speed, and practical usability.&lt;/p&gt;&#10;&lt;h3 id="the-models"&gt;The models&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Qwen Coder Next&lt;/strong&gt; — the best quality by a fair margin. It understood&#10;the problem, produced clean code, and generally got it right on the first&#10;try. The problem is that it&amp;rsquo;s too large and too slow. The latency was&#10;noticeable, and the larger context windows it supports actually work&#10;against it — with more context comes more tokens to process, and the&#10;slowdown compounds.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Qwen 35B MoE&lt;/strong&gt; — the best on balance. It matched Qwen Coder Next on&#10;most problems, was noticeably faster, and didn&amp;rsquo;t suffer from the same&#10;context-window bloat. For practical daily use, this is the sweet spot.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Cohere North Mini&lt;/strong&gt; — extremely fast. Almost instant responses. But&#10;it failed to solve several problems that Qwen 35B solved after one or&#10;two turns. North Mini kept going in circles — same wrong approach,&#10;repeated, unable to course-correct. Speed is great when it works, but&#10;not much use if it can&amp;rsquo;t actually solve the problem.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Qwen 27B&lt;/strong&gt; — too slow for my taste. I&amp;rsquo;d need to try it again under&#10;different conditions before forming a firm opinion. It had decent&#10;quality but the latency was a real drag.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Gemma MoE&lt;/strong&gt; — okay. Nothing wrong with it, but Qwen models were&#10;consistently higher quality. Gemma felt like it was trying its best&#10;but falling short on the harder problems.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="tldr"&gt;TL;DR&lt;/h3&gt;&#10;&lt;p&gt;Qwen Coder Next is the best. Qwen 35B MoE is the best on balance. Cohere&#10;North Mini is extremely fast but unreliable on actual problem-solving.&#10;Gemma MoE is fine but Qwen wins on quality. Qwen 27B needs another shot.&lt;/p&gt;</description></item><item><title>On Syntax-Guided Program Reduction</title><link>https://noraincheck.github.io/posts/syntax-reduction-and-mimo/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/syntax-reduction-and-mimo/</guid><description>&lt;p&gt;Program reduction is an interesting problem: given an objective (e.g., a unit test), can we automatically create the minimal viable program by deleting unnecessary code?&lt;/p&gt;&#10;&lt;p&gt;This repo (&lt;a href="https://github.com/NoRaincheck/nappe"&gt;nappe&lt;/a&gt;) and &lt;a href="https://pypi.org/project/nappe/"&gt;PyPI package&lt;/a&gt; is an implementation of an existing approach with extensions to solve this. As this problem is NP-hard, it&amp;rsquo;s not surprising that it is a tad &amp;rsquo;expensive&amp;rsquo; to do this well. However, it is interesting as it tackles things like removing dead code which perhaps tools like &lt;code&gt;ruff&lt;/code&gt; don&amp;rsquo;t succeed with.&lt;/p&gt;</description></item><item><title>Ralph Loop and Frequent Intentional Context Compaction</title><link>https://noraincheck.github.io/posts/ralph-loop-and-frequent-intentional-context-compaction/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/ralph-loop-and-frequent-intentional-context-compaction/</guid><description>&lt;h2 id="ralph-loop-and-frequent-intentional-context-compaction"&gt;Ralph Loop and Frequent Intentional Context Compaction&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;February 2026&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;There&amp;rsquo;s been a few things I&amp;rsquo;ve been playing around and thinking about,&#10;specifically around how one might &amp;lsquo;implement&amp;rsquo; the ideas.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Beads&lt;/li&gt;&#10;&lt;li&gt;Ralph Wiggum Loop&lt;/li&gt;&#10;&lt;li&gt;Context Compaction and Management&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;To that end, I have a single&#10;&lt;a href="https://github.com/NoRaincheck/basic-ralph/blob/main/basic_ralph.py"&gt;Python script example&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;This aims to address a few items:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Manage cross tasks through the use of &amp;rsquo;tickets&amp;rsquo; (similar to beads), but in a&#10;more prescriptive way, where the tickets are created and actively closed&#10;outside of the agent loop (n.b. the agent can also create tickets, this way is&#10;more intentional which I&amp;rsquo;ve found works better for a &amp;lsquo;human&amp;rsquo; reviewer, cause&#10;then the determinism guarentees that the ticket is seen and reviewable.&lt;/li&gt;&#10;&lt;li&gt;The Ralph Wiggum loop manages the completion by assessing the ticket queue and&#10;seeing whether or not it is complete or not&lt;/li&gt;&#10;&lt;li&gt;As part of injecting context to the Ralph Wiggum loop (since context is not&#10;preserved), we make use of Context Compaction workflow which is the &amp;lsquo;Research,&#10;Plan, Implement&amp;rsquo; steps, whereby explicit guidance for researching, then&#10;planning is made to populate the context before finally implementing&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;In general this loop works well, particularly for more complex tasks. The Ralph&#10;loop guarentees that it will at least see the task to completion.&lt;/p&gt;</description></item><item><title>Thinking Local LLMs and AI</title><link>https://noraincheck.github.io/posts/thinking-local-llms-and-ai/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/thinking-local-llms-and-ai/</guid><description>&lt;h2 id="thinking-local-llms-and-ai"&gt;Thinking Local LLMs and AI&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;December 2025&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Running models locally is nothing new. Infact I&amp;rsquo;ve always had a particular&#10;affinity to &lt;code&gt;llama.cpp&lt;/code&gt;. Recently, there is the newly introduced local text to&#10;image (z-image-turbo) generation model that can &amp;lsquo;comfortable&amp;rsquo; be run locally&#10;(albeit perhaps a bit slow without a dedicated GPU).&lt;/p&gt;&#10;&lt;p&gt;Usage would look something like (using &lt;code&gt;justfile&lt;/code&gt; to template it) using&#10;&lt;code&gt;stable-diffusion.cpp&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;no-cd&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;sd_generate:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;PROMPT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;gum input --placeholder &lt;span class="s2"&gt;&amp;#34;prompt for image generation&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;gum input --placeholder &lt;span class="s2"&gt;&amp;#34;output png file&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;DYLD_LIBRARY_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/dyld/library &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; sd --difffusion-model z_image_turbo-Q4_0.gguf &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; --vae /path/diffusion_pytorch_model.safetensors &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; --llm Qwen3-4B-Instruct-2507-Q6_K.gguf &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; --cfg-scale 1.0 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; --offload-to-cpu &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; --diffusion-fa &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; -H &lt;span class="m"&gt;512&lt;/span&gt; -W &lt;span class="m"&gt;512&lt;/span&gt; --steps &lt;span class="m"&gt;9&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$PROMPT&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; -o &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$OUTPUT&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On M1 Macbook Pro with offload cpu enabled it will take roughly 2 minutes per a&#10;step, whereas not offloading will improve performance at the cost of memory&#10;consumption (n.b. you should have &lt;code&gt;--offload-to-cpu&lt;/code&gt; turned on if you are using&#10;a low memory variant).&lt;/p&gt;</description></item><item><title>Examining Pokemon AI as Inspiration for Scoring Systems</title><link>https://noraincheck.github.io/posts/examining-pokemon-ai-as-inspiration-for-scoring-systems/</link><pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/examining-pokemon-ai-as-inspiration-for-scoring-systems/</guid><description>&lt;h2 id="examining-pokemon-ai-as-inspiration-for-scoring-systems"&gt;Examining Pokemon AI as Inspiration for Scoring Systems&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;November 2025&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;With LLMs all the rage, there is a desire for it to make more informed&#10;decisions. Perhaps there are multiple (good) choices one can make &amp;ndash; how would&#10;we induce an LLM to select a &amp;lsquo;good&amp;rsquo; choice?&lt;/p&gt;&#10;&lt;p&gt;One way to do this is using LLM as a judge. This boils down to a score card&#10;style system. The loop looks like this:&lt;/p&gt;</description></item><item><title>Using Outlines for LLM Constrained Generation</title><link>https://noraincheck.github.io/posts/using-outlines-for-llm-constrained-generation/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/using-outlines-for-llm-constrained-generation/</guid><description>&lt;h2 id="using-outlines-for-llm-constrained-generation"&gt;Using Outlines for LLM Constrained Generation&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;October 2025&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Constrained generation is something that has interested me recently. Mostly as&#10;an extension of structured generation. For example in the newest &lt;code&gt;gpt-5&lt;/code&gt; models&#10;you can now have Regex as a constrained output. Now&#10;&lt;a href="https://github.com/dottxt-ai/outlines"&gt;outlines&lt;/a&gt; is not particularly new,&#10;though what is interesting to me is the design of their APIs.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Chat Templates&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Are created via:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Fill in nested templates&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chat_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;system_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;What is machine learning?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Constrained outputs&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>What if I tried self-hosting LLM Code Tooling?</title><link>https://noraincheck.github.io/posts/what-if-i-tried-self-hosting-llm-code-tooling/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/what-if-i-tried-self-hosting-llm-code-tooling/</guid><description>&lt;h2 id="what-if-i-tried-self-hosting-llm-code-tooling"&gt;What if I tried self-hosting LLM Code Tooling?&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;July 2025&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Currently Code AI tooling is going through a weird cycle. We have the Windsurf x&#10;OpenAI deal falling through, Cursor with some interesting (bad) pricing changes,&#10;Claude Code being a loss leader &amp;ndash; which leads me to think, so what would&#10;self-hosting this on a laptop look like?&lt;/p&gt;&#10;&lt;p&gt;Firstly, there are a lot of options which exist already, however the reality is&#10;that my using of AI auto-complete and agentic mode is fairly limited. With that&#10;in mind, I think my current setup is rooted mainly in the &lt;code&gt;llama.cpp&lt;/code&gt; world of&#10;things.&lt;/p&gt;</description></item><item><title>LLMs - in Review (2024)</title><link>https://noraincheck.github.io/posts/llms-in-review-2024/</link><pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate><guid>https://noraincheck.github.io/posts/llms-in-review-2024/</guid><description>&lt;h2 id="llms---in-review-2024"&gt;LLMs - in Review (2024)&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;December 2024&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;2024 was the first year where I took LLMs seriously. I successfully hosted a&#10;Llama 70b parameter model in production which was used as with&#10;&lt;a href="https://www.continue.dev/"&gt;continue.dev&lt;/a&gt; for a self-hosted co-pilot&#10;replacement, along with a code autocomplete like&#10;&lt;a href="https://qwenlm.github.io/blog/qwen2.5-coder-family/"&gt;Qwen Coder&lt;/a&gt; or&#10;&lt;a href="https://deepseekcoder.github.io/"&gt;Deepseek&lt;/a&gt;, these were fine replacements and&#10;surprisingly robust.&#10;&lt;a href="https://huggingface.co/docs/text-generation-inference/index"&gt;Huggingface&amp;rsquo;s TGI&lt;/a&gt;&#10;along with &lt;a href="https://github.com/triton-inference-server/server"&gt;Triton Server&lt;/a&gt;&#10;were the main heroes for this project, (Triton was used to serve &lt;code&gt;onnx&lt;/code&gt; models&#10;for embeddings) though I&amp;rsquo;ve yet to find a &amp;ldquo;good&amp;rdquo; embedding model. At this stage&#10;in time, most of the vector database solutions &amp;ldquo;feel&amp;rdquo; the same and can all&#10;seemingly be trivially hosted via Kubernetes.&lt;/p&gt;</description></item></channel></rss>