<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://blog.davidhahn.co</loc>
    <lastmod>2026-08-23T22:26:53.806Z</lastmod>
    <changefreq>always</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/cost-latency-tracking-what-the-token-counts-were-telling-me-all-along</loc>
    <lastmod>2026-06-19T00:40:56.527Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/error-handling-in-llm-systems-three-categories-one-decision-tree</loc>
    <lastmod>2026-06-17T20:47:12.237Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/topic-suggestion-designing-a-function-that-knows-what-to-recommend-without-magic-numbers</loc>
    <lastmod>2026-06-17T01:23:49.857Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/streaming-structured-output-incremental-json-rendering-without-a-parser</loc>
    <lastmod>2026-06-15T22:50:11.533Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/evals-why-a-bad-eval-is-worse-than-no-eval</loc>
    <lastmod>2026-06-12T21:29:36.286Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/adding-spaced-repetition-to-an-llm-study-system-sm-2-schema-design-and-a-scoring-problem-worth-solving</loc>
    <lastmod>2026-06-11T23:22:08.003Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/tool-use-rag-when-retrieval-becomes-a-decision</loc>
    <lastmod>2026-06-10T20:46:28.630Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/python-for-javascript-engineers-a-practical-mental-model</loc>
    <lastmod>2026-06-08T23:22:42.806Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/prompt-engineering-lessons-from-building-a-problem-generator</loc>
    <lastmod>2026-06-06T01:38:58.657Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/structured-output-when-to-use-prompting-vs-forced-tool-use</loc>
    <lastmod>2026-06-06T01:34:17.439Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/the-llm-as-judge-problem-making-automated-evaluation-reliable</loc>
    <lastmod>2026-06-04T21:51:25.366Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/designing-an-llm-system-that-actually-solves-a-real-problem</loc>
    <lastmod>2026-06-04T20:33:38.867Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/building-rag-from-scratch-embeddings-pgvector-and-a-bug-worth-knowing</loc>
    <lastmod>2026-06-04T20:27:52.860Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/tool-use-how-the-model-calls-your-code-and-what-it-never-sees</loc>
    <lastmod>2026-06-03T00:51:10.774Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/why-streaming-changes-how-you-build-llm-powered-interfaces</loc>
    <lastmod>2026-06-03T00:46:31.013Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/series/anthropic-api</loc>
    <lastmod>2026-08-23T22:26:53.806Z</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/series/study-buddy</loc>
    <lastmod>2026-08-23T22:26:53.806Z</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/series/python-for-js</loc>
    <lastmod>2026-08-23T22:26:53.806Z</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/archive</loc>
    <lastmod>2026-08-23T22:26:53.806Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://blog.davidhahn.co/recommendations</loc>
    <lastmod>2026-08-23T22:26:53.806Z</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.4</priority>
  </url>
</urlset>