<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AI Systems Portfolio on Curtis Nix</title>
    <link>https://curtis.engineer/ai-portfolio/</link>
    <description>Recent content in AI Systems Portfolio on Curtis Nix</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Thu, 09 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://curtis.engineer/ai-portfolio/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>Building an eval framework after my benchmark flipped</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-eval-framework/</link>
      <pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-eval-framework/</guid>
      <description>My June inference bench said llama.cpp was faster than oMLX for specific models. Three weeks later a rerun said oMLX was faster by 46 percent. After investigating in circles, I ditched my own benchmarking scripts. I set up a self-hosted LangFuse instance on my home Kubernetes cluster, centered my benchmarking process around this, and ran the previous bench through it as a sanity check.</description>
    </item>
    
    <item>
      <title>llama.cpp vs oMLX on M1</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-m1-4bit-inference-shootout/</link>
      <pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-m1-4bit-inference-shootout/</guid>
      <description>Two 4-bit inference benches on a 32 GB M1. A 5-arm speculative-decoding comparison on Qwen3-8B (plain decode won every matchup) and a 2-arm oMLX vs llama.cpp sweep across four daily-driver models (oMLX faster on three, wash on one).</description>
    </item>
    
    <item>
      <title>MLX vs llama.cpp on K8s triage (bench v2)</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-llm-backend-eval-bench-v2/</link>
      <pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-llm-backend-eval-bench-v2/</guid>
      <description>Follow-up eval comparing llama.cpp and MLX on a focused K8s troubleshooting workload. 13 model+backend combinations, 20 triage scenarios, LLM-as-judge scoring. Stay on llama.cpp confirmed; granite-4.1-8b-tuned emerged as the best speed-at-quality default.</description>
    </item>
    
    <item>
      <title>Frontier vs local LLMs on structured HTML</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-bench-v3-hyperframes/</link>
      <pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-bench-v3-hyperframes/</guid>
      <description>22-prompt structured-generation benchmark across 17 frontier and 5 local LLMs on HyperFrames HTML composition. Deterministic grading via lint and render. kimi-k2.5 scores a perfect 22/22 at 36.0s median; best local gemma3-12b at 14/22. The real frontier advantage is consistency in the tail, not raw accuracy on routine work.</description>
    </item>
    
    <item>
      <title>ASR engines on Apple Silicon</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-apple-silicon-asr-shootout/</link>
      <pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-apple-silicon-asr-shootout/</guid>
      <description>Four-engine reproducible benchmark of whisperx, parakeet-mlx, mlx-whisper, and whisper.cpp on Apple Silicon. 8 cohorts across 16 LibriSpeech clips, scored on WER and real-time factor. parakeet-mlx tdt-1.1b wins on the speed-at-quality frontier; mlx-whisper large-v3 disqualified itself on a hallucination loop.</description>
    </item>
    
    <item>
      <title>Zero-shot voice cloning on Apple Silicon</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-f5-tts-voice-cloning/</link>
      <pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-f5-tts-voice-cloning/</guid>
      <description>Replaced a planned Piper fine-tune with zero-shot F5-TTS-MLX for video narration on Apple Silicon. A 12.24-second reference clip and a tuned ODE solver produce usable voice clones at ~19x real-time, setting the pipeline&amp;rsquo;s latency floor and shaping worker-daemon concurrency.</description>
    </item>
    
    <item>
      <title>Where a video pipeline spends its time</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-windmill-pipeline-bench-v5/</link>
      <pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-windmill-pipeline-bench-v5/</guid>
      <description>End-to-end timing benchmark of the 6-step Windmill video-creation pipeline on Apple Silicon. 16 clips x 3 reps, 48 runs, RTF 1.0 versus RTF 0.055 for parakeet-mlx in isolation; the ~18x production tax is ffmpeg pre/post-processing, not Windmill scheduling.</description>
    </item>
    
    <item>
      <title>OTA firmware over ESP-NOW</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-espnow-ota/</link>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-espnow-ota/</guid>
      <description>A custom four-message OTA protocol for pushing firmware between ESP32s over ESP-NOW (no WiFi, no BLE). Protocol and partition layout proven end-to-end on small payloads; the full 742 KB push reaches 97% before crashing on memory pressure.</description>
    </item>
    
    <item>
      <title>Two-board ESP32 lab reachable by chat</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-espnow-foundations/</link>
      <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-espnow-foundations/</guid>
      <description>Bootstrap of a permanent two-board ESP32 lab with an always-on agent reachable via chat. Validated end-to-end with 1 Hz ESP-NOW pingpong (100/100 frames) and RSSI-based distance estimation.</description>
    </item>
    
    <item>
      <title>MLX vs llama.cpp on M1 Pro (bench v1)</title>
      <link>https://curtis.engineer/ai-portfolio/case-study-llm-backend-eval/</link>
      <pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/case-study-llm-backend-eval/</guid>
      <description>Side-by-side evaluation of llama.cpp and MLX (via oMLX) for self-hosted inference on a single M1 Pro. Custom blind-scoring harness, 6 matched model pairs, 780 measurement rows. Zero migration recommended, and a silent audio bug surfaced in the MLX path.</description>
    </item>
    
    <item>
      <title>Autonomous Infrastructure Anomaly Detector (AIOps)</title>
      <link>https://curtis.engineer/ai-portfolio/_ideas/aiops-anomaly-detector/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/_ideas/aiops-anomaly-detector/</guid>
      <description>&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; A predictive operations model that ingests live or historical server/cluster metrics to classify system health, proactively warning of node failures or memory leaks before orchestration panics.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Bridges AI/ML coursework with existing infra skills (Talos, Debian, K8s). The dataset and problem are straightforward enough for a WGU project but real enough to be useful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Approach:&lt;/strong&gt; Python + Scikit-Learn classification pipeline. Historical metrics → binary classifier (normal vs. anomalous). Hyperparameter tuning, ensemble methods, regularization.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Local LLM Performance &amp; Throughput Predictor</title>
      <link>https://curtis.engineer/ai-portfolio/_ideas/llm-throughput-predictor/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/_ideas/llm-throughput-predictor/</guid>
      <description>&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; A regression model trained on self-benchmarked hardware data that predicts tokens/second or VRAM consumption from inference parameters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Uniquely positioned. Already run local LLMs (Ollama, MLX) and have the hardware to generate real training data. The dataset is self-created, which strengthens the D683 proposal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Approach:&lt;/strong&gt; Python + Scikit-Learn regression. Scripted benchmarking loop across quantization levels, model sizes, context windows, and prompt lengths. Output: continuous TPS or TTFT prediction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Smart Greenhouse &amp; Hydroponic Climate Optimizer</title>
      <link>https://curtis.engineer/ai-portfolio/_ideas/greenhouse-optimizer/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://curtis.engineer/ai-portfolio/_ideas/greenhouse-optimizer/</guid>
      <description>&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt; An agricultural optimization model that parses environmental and nutritional vectors to predict crop growth health or determine optimal feeding schedules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt; Intersects with the aquaponics interest already on the radar (housekeeping tracker: &amp;ldquo;strongest energy thread is electronics + plants/aquaponics&amp;rdquo;). Turns a genuine hobby into coursework.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Approach:&lt;/strong&gt; Python + Scikit-Learn. Tabular CSV data with environmental sensor readings. Either regression (predict growth rate) or classification (stress status).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Format: Tabular &lt;code&gt;.csv&lt;/code&gt; with cultivation metrics&lt;/li&gt;
&lt;li&gt;Features: Ambient temp, relative humidity, photoperiod hours, water EC/nutrient level, pH&lt;/li&gt;
&lt;li&gt;Target: Continuous (biomass/growth rate mm) or categorical (stress T/F)&lt;/li&gt;
&lt;li&gt;Cleanliness: Avoid raw images, tabular only. UCI Crop Recommendation dataset works out of the box.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Fit:&lt;/strong&gt; D683 (custom dataset). UCI dataset is pre-cleaned, well-documented, and instantly approvable.&lt;/p&gt;</description>
    </item>
    
    
  </channel>
</rss>
