<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Data & AI Engineering @ Ponder]]></title><description><![CDATA[Writings on AI Engineering & Data Engineering, from the team at ponder.co]]></description><link>https://newsletter.ponder.co</link><image><url>https://substackcdn.com/image/fetch/$s_!wPlP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f7fc69-a9cf-4ae0-ab40-7cc3ca379010_213x213.png</url><title>Data &amp; AI Engineering @ Ponder</title><link>https://newsletter.ponder.co</link></image><generator>Substack</generator><lastBuildDate>Fri, 19 Jun 2026 18:39:54 GMT</lastBuildDate><atom:link href="https://newsletter.ponder.co/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ponder - Data & AI]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[contact@ponder.co]]></webMaster><itunes:owner><itunes:email><![CDATA[contact@ponder.co]]></itunes:email><itunes:name><![CDATA[Edan Maor]]></itunes:name></itunes:owner><itunes:author><![CDATA[Edan Maor]]></itunes:author><googleplay:owner><![CDATA[contact@ponder.co]]></googleplay:owner><googleplay:email><![CDATA[contact@ponder.co]]></googleplay:email><googleplay:author><![CDATA[Edan Maor]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Coder + Airflow: Managing Local Development Like a Pro]]></title><description><![CDATA[How to Give Every Developer an Isolated, Reproducible Airflow Environment That Spins Up in Minutes]]></description><link>https://newsletter.ponder.co/p/coder-airflow-managing-local-development</link><guid isPermaLink="false">https://newsletter.ponder.co/p/coder-airflow-managing-local-development</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Wed, 10 Jun 2026 13:55:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!y_cH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y_cH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y_cH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 424w, https://substackcdn.com/image/fetch/$s_!y_cH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 848w, https://substackcdn.com/image/fetch/$s_!y_cH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!y_cH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y_cH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png" width="518" height="343.6730769230769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:966,&quot;width&quot;:1456,&quot;resizeWidth&quot;:518,&quot;bytes&quot;:2542169,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/201455620?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y_cH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 424w, https://substackcdn.com/image/fetch/$s_!y_cH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 848w, https://substackcdn.com/image/fetch/$s_!y_cH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 1272w, https://substackcdn.com/image/fetch/$s_!y_cH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d8602a4-98d4-43b8-a9b5-c3c02e6c4e96_2058x1366.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>If you&#8217;ve ever onboarded a new data engineer onto an Airflow project, you know the drill. Half a day disappears into Python version mismatches, missing system dependencies, conflicting virtual environments, and the classic &#8220;it works on my machine&#8221; shrug. Local Airflow development is painful &#8212; and it doesn&#8217;t have to be.</p><p>This post walks through how we use<a href="https://coder.com"> Coder</a> to give every developer a fully isolated, reproducible Airflow environment that spins up in minutes. We&#8217;ll use the<a href="https://github.com/ponderedw/airflow-mcp-plugins"> airflow-mcp-plugins</a> repo as our example &#8212; a project that adds a conversational AI interface directly into the Airflow UI &#8211; <a href="https://newsletter.ponder.co/p/airflow-chat-conversational-ai-built">https://newsletter.ponder.co/p/airflow-chat-conversational-ai-built</a> .</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h3>The Problem with Local Airflow</h3><p>Just yesterday I ran into someone who told me they&#8217;d been a Dagster advocate for years &#8212; not because of the technology itself, but because local development just <em>felt</em> easier there. Airflow had a reputation for being painful to run locally, and that reputation stuck even as Airflow improved significantly over time. I love Airflow, and it bothered me that something as fixable as local dev experience was pushing people toward other tools. This post is partly my answer to that.</p><p>Running Airflow locally sounds simple until it isn&#8217;t. The typical setup involves Docker Compose with multiple services &#8212; webserver, scheduler, worker, Redis, Postgres &#8212; all needing to talk to each other, share volumes, and pick up your DAG files. On top of that:</p><ul><li><p>Everyone needs the same Python version and the same packages</p></li><li><p>Port conflicts are common if you&#8217;re running multiple projects</p></li><li><p>When you stop and restart, state can get corrupted</p></li><li><p>New team members spend hours just getting to a working baseline</p></li></ul><p>The usual answer is &#8220;just use Docker Compose directly.&#8221; But that still leaves every developer managing their own environment, their own .env files, their own credentials, and their own debugging when something breaks.</p><p>And then there&#8217;s the invisible problem: standardization drift. If you figure out a better way to set up the local environment &#8212; a smarter Docker Compose config, a new environment variable that everyone needs, a helper script that saves thirty minutes &#8212; how do you roll that out? You send an email. Which probably won&#8217;t be read. Or will be read, bookmarked, and forgotten. Six months later you discover half the team is still running the old setup because there was never a centralized, enforced way to define what &#8220;local development&#8221; actually means.</p><p>This challenge becomes even more apparent when supporting a broader internal development team. At Uncommon Schools, we work with engineers and developers across the data stack &#8212; from Airflow pipelines to dbt transformations and analytics tooling &#8212; with different roles, workflows, and levels of infrastructure familiarity. Before introducing Coder-driven workspaces, keeping everyone&#8217;s local setup aligned with the latest infrastructure changes was a recurring challenge.</p><p>The goal was to move away from onboarding docs, Slack messages, and tribal knowledge toward a development environment that is itself the source of truth: a reproducible workspace definition that every developer can spin up and keep in sync.</p><p>It gets worse when your stack grows beyond a simple Docker Compose. What if some components need to run directly on the laptop &#8212; a local Python process, a dbt command, a custom script that talks to both your local Airflow and a cloud service? Now you&#8217;re coordinating Docker networks, local processes, environment variables, and credentials across multiple tools, and the &#8220;just run this command&#8221; onboarding doc is already three pages long and six months out of date.</p><div><hr></div><h3><strong>The Solution: Coder</strong></h3><p><a href="https://coder.com">Coder</a> is an open-source platform for self-hosted remote development environments. Think of it as a control plane for developer workspaces &#8212; similar in spirit to Dev Containers, but more flexible. Where Dev Containers are tied to a specific editor and a specific container, Coder lets you define full environments that can run not just containers but also VMs or even bare-metal OS instances. You get a browser-based IDE, a terminal, and proxied access to any app running inside the workspace, all through a single URL.</p><p>You define a workspace as code using Terraform, and Coder provisions it on demand &#8212; locally or in the cloud. The key insight is that a &#8220;workspace&#8221; is just a compute resource (a Docker container, a VM, a Kubernetes pod) with a Coder agent running inside it. The agent connects back to the Coder server, which proxies your IDE, your apps, and your terminal outward. Every developer gets their own isolated environment, defined by the same Terraform template, with their own credentials injected at workspace creation time.</p><p>Coder supports<a href="https://coder.com/docs/admin/templates"> a wide range of workspace types</a> &#8212; AWS EC2 instances, Google Cloud VMs, Kubernetes pods, and more. For this tutorial we&#8217;ll use Docker, which is the simplest setup for local development and needs nothing beyond Docker Desktop on your Mac.</p><p>For Airflow development this is a perfect fit. Each workspace gets its own Docker daemon (Docker-in-Docker), its own Postgres, its own Redis, and its own Airflow stack &#8212; all isolated inside a single container that Coder manages. Want to change the default environment for the whole team? Update the Terraform template. Everyone&#8217;s next workspace picks it up automatically &#8212; no email required.</p><div><hr></div><h3><strong>Running Coder Locally on Mac</strong></h3><p>First, install Coder:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;df7b2c12-4293-42c6-88bb-e174dd4f5311&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">curl -L https://coder.com/install.sh | sh</code></pre></div><p>Then start the server. You need to pass both an access URL and a wildcard access URL &#8212; the wildcard is what allows Coder to proxy your Airflow UI through a subdomain:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;95b074e2-f120-45d5-a54c-8e054c5435e1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">coder server --access-url http://localhost:3000 --wildcard-access-url &#8220;*.localhost:3000&#8221;</code></pre></div><p>If you&#8217;re using our repository, we&#8217;ve wrapped this in a <strong>just</strong> command:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;30a440a7-0394-47ce-be46-81c00b8ad64d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">just start_coder</code></pre></div><p>Once it starts, open <strong>http://localhost:3000</strong> in your browser. You&#8217;ll be prompted to create an admin account on the first run.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rcu2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rcu2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 424w, https://substackcdn.com/image/fetch/$s_!Rcu2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 848w, https://substackcdn.com/image/fetch/$s_!Rcu2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!Rcu2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rcu2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png" width="366" height="570.8175182481751" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1282,&quot;width&quot;:822,&quot;resizeWidth&quot;:366,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rcu2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 424w, https://substackcdn.com/image/fetch/$s_!Rcu2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 848w, https://substackcdn.com/image/fetch/$s_!Rcu2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!Rcu2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed18cfc-4016-499b-bc09-b4e3cbd5fb12_822x1282.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3><strong>Creating Your First Workspace</strong></h3><p>After logging in:</p><p>Go to <strong>Templates</strong> and create a new template &#8212; paste in the coder_template.tf from the repository, then click on <strong>Build </strong>and <strong>Publish</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RB7-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RB7-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 424w, https://substackcdn.com/image/fetch/$s_!RB7-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 848w, https://substackcdn.com/image/fetch/$s_!RB7-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 1272w, https://substackcdn.com/image/fetch/$s_!RB7-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RB7-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png" width="1456" height="294" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:294,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RB7-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 424w, https://substackcdn.com/image/fetch/$s_!RB7-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 848w, https://substackcdn.com/image/fetch/$s_!RB7-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 1272w, https://substackcdn.com/image/fetch/$s_!RB7-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46d307c9-b972-47fa-8067-2d736fe0a768_2048x414.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x7NZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x7NZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 424w, https://substackcdn.com/image/fetch/$s_!x7NZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 848w, https://substackcdn.com/image/fetch/$s_!x7NZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 1272w, https://substackcdn.com/image/fetch/$s_!x7NZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x7NZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png" width="736" height="604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:736,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x7NZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 424w, https://substackcdn.com/image/fetch/$s_!x7NZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 848w, https://substackcdn.com/image/fetch/$s_!x7NZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 1272w, https://substackcdn.com/image/fetch/$s_!x7NZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff41756e3-4761-4bc8-88e0-391ded560f8f_736x604.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p_uN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p_uN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 424w, https://substackcdn.com/image/fetch/$s_!p_uN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 848w, https://substackcdn.com/image/fetch/$s_!p_uN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 1272w, https://substackcdn.com/image/fetch/$s_!p_uN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p_uN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png" width="1456" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p_uN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 424w, https://substackcdn.com/image/fetch/$s_!p_uN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 848w, https://substackcdn.com/image/fetch/$s_!p_uN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 1272w, https://substackcdn.com/image/fetch/$s_!p_uN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3e65d7-38b6-4315-a244-a36ae296a7ac_2048x1192.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J-1d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J-1d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 424w, https://substackcdn.com/image/fetch/$s_!J-1d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 848w, https://substackcdn.com/image/fetch/$s_!J-1d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 1272w, https://substackcdn.com/image/fetch/$s_!J-1d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J-1d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png" width="1456" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J-1d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 424w, https://substackcdn.com/image/fetch/$s_!J-1d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 848w, https://substackcdn.com/image/fetch/$s_!J-1d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 1272w, https://substackcdn.com/image/fetch/$s_!J-1d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4c60152-7919-4fad-b430-6b1dbc41b0ef_2048x845.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Click <strong>Create Workspace</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j2nn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j2nn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 424w, https://substackcdn.com/image/fetch/$s_!j2nn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 848w, https://substackcdn.com/image/fetch/$s_!j2nn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 1272w, https://substackcdn.com/image/fetch/$s_!j2nn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j2nn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png" width="1456" height="375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:375,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j2nn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 424w, https://substackcdn.com/image/fetch/$s_!j2nn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 848w, https://substackcdn.com/image/fetch/$s_!j2nn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 1272w, https://substackcdn.com/image/fetch/$s_!j2nn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9081b6a3-65b9-4a2a-8c48-ceaa788b72b3_2048x528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Fill in the parameters &#8212; your Git name, your Anthropic/OpenAI/AWS API key depending on which LLM backend you want to use</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Vs-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Vs-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 424w, https://substackcdn.com/image/fetch/$s_!2Vs-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 848w, https://substackcdn.com/image/fetch/$s_!2Vs-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!2Vs-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Vs-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png" width="1456" height="1162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1162,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2Vs-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 424w, https://substackcdn.com/image/fetch/$s_!2Vs-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 848w, https://substackcdn.com/image/fetch/$s_!2Vs-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!2Vs-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5c01f7-1d61-45f6-9f22-8fd379883eb9_1524x1216.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hit <strong>Create</strong> and watch the build logs</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ada1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ada1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 424w, https://substackcdn.com/image/fetch/$s_!ada1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 848w, https://substackcdn.com/image/fetch/$s_!ada1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!ada1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ada1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png" width="1456" height="901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:901,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ada1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 424w, https://substackcdn.com/image/fetch/$s_!ada1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 848w, https://substackcdn.com/image/fetch/$s_!ada1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!ada1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95509dcd-b90e-4380-98f2-e3d4baf84e4f_1966x1216.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The first time takes a few minutes because Docker images need to be pulled. On subsequent starts it&#8217;s fast &#8212; the Docker image cache is persisted in a named volume so nothing gets re-downloaded.</p><p>Once the workspace is running you&#8217;ll see two buttons: <strong>code-server</strong> (VS Code in the browser) and <strong>Airflow</strong>. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kr_4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kr_4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 424w, https://substackcdn.com/image/fetch/$s_!kr_4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 848w, https://substackcdn.com/image/fetch/$s_!kr_4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!kr_4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kr_4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png" width="1456" height="833" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:833,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kr_4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 424w, https://substackcdn.com/image/fetch/$s_!kr_4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 848w, https://substackcdn.com/image/fetch/$s_!kr_4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!kr_4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe17be3e4-52fa-43f8-9d82-f5a53f01c549_2048x1172.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br><br>Click Airflow and you&#8217;ll land directly on the Airflow UI at <strong>http://airflow--yourusername--coder.localhost:3000/</strong>. Log in with <strong>airflow</strong> / <strong>airflow</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2iLs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2iLs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 424w, https://substackcdn.com/image/fetch/$s_!2iLs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 848w, https://substackcdn.com/image/fetch/$s_!2iLs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!2iLs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2iLs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png" width="1456" height="833" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:833,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2iLs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 424w, https://substackcdn.com/image/fetch/$s_!2iLs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 848w, https://substackcdn.com/image/fetch/$s_!2iLs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!2iLs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9adf380-8c35-4932-9c8e-493a60a7f9bb_2048x1172.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ff56!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ff56!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 424w, https://substackcdn.com/image/fetch/$s_!ff56!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 848w, https://substackcdn.com/image/fetch/$s_!ff56!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!ff56!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ff56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png" width="1456" height="833" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:833,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ff56!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 424w, https://substackcdn.com/image/fetch/$s_!ff56!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 848w, https://substackcdn.com/image/fetch/$s_!ff56!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 1272w, https://substackcdn.com/image/fetch/$s_!ff56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe89d1ffc-70c3-4d58-88c4-305cb4ca5f12_2048x1172.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3><strong>How Terraform Works in Coder</strong></h3><p>Every Coder workspace is defined by a Terraform template. When you create a workspace, Coder runs terraform apply with your parameters, which provisions the Docker container, volumes, and agent. When you stop the workspace, it runs terraform destroy on the container (but keeps the volumes). When you restart, it re-applies &#8212; same volumes, same data, new container.</p><p>The template we use here does a few things:</p><ul><li><p>Declares <strong>input parameters</strong> (coder_parameter) that become form fields in the UI &#8212; your API keys, your Git name, your LLM model choice</p></li><li><p>Creates <strong>Docker volumes</strong> for /home/coder (your code and env files) and /var/lib/docker (the inner Docker image cache)</p></li><li><p>Spins up a <strong>privileged workspace container</strong> with its own Docker daemon inside (DinD)</p></li><li><p>Runs a <strong>startup script</strong> that installs Docker Engine, clones the repo, writes airflow-plugin.env from your parameters, and launches just airflow</p></li><li><p>Registers a <strong>coder_app</strong> that tells Coder where to proxy the Airflow UI</p></li></ul><p>For private repositories, you add a gitlab_token or github_token parameter and embed it in the clone URL:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;7987bc5f-6a9d-4245-933f-565a21767a78&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git clone &#8220;https://oauth2:${TOKEN}@gitlab.com/yourorg/yourrepo.git&#8221;</code></pre></div><p>The token gets injected at workspace creation time and never lives anywhere outside the container.</p><h3>Walking Through the Template</h3><p>Let&#8217;s look at what the template actually does, piece by piece.</p><p><strong>Parameters</strong> are declared at the top as coder_parameter blocks. Each one becomes a form field when a developer creates a workspace. Here we collect the Git name, the LLM model ID, and whichever API keys are needed depending on whether you&#8217;re using Anthropic, OpenAI, or Amazon Bedrock. Parameters can have defaults, descriptions, and validation &#8212; they&#8217;re the clean interface between &#8220;what Coder knows&#8221; and &#8220;what the developer provides.&#8221;</p><p><strong>Volumes</strong> come next. We create two named Docker volumes per workspace. home_volume mounts at /home/coder and holds everything the developer touches &#8212; the cloned repo, the generated .env file, any local changes. docker_data_volume mounts at /var/lib/docker inside the workspace container, which is where the inner Docker daemon stores its image cache, container state, and named volumes (including Postgres data). Both volumes survive workspace stops and restarts, so your data is never lost between sessions.</p><p><strong>The workspace container</strong> is a codercom/enterprise-base:ubuntu image running with privileged = true. The privileged flag is what makes Docker-in-Docker possible &#8212; it allows the container to run its own kernel namespaces and mount its own filesystems. The entrypoint creates the repo directory, fixes ownership, and then hands off to the Coder agent init script. Notice the replace() call that rewrites localhost to host.docker.internal &#8212; this ensures the agent can phone home to the Coder server running on your Mac, not try to reach itself.</p><p><strong>The startup script</strong> runs once the agent is up. It installs Docker Engine from the official Docker apt repository (not the system package, which is often outdated), adds the coder user to the docker group, starts the daemon, clones the repo, and then writes airflow-plugin.env by copying the test env file and injecting each parameter value using a delete-then-append pattern:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;7556e620-7153-4537-8a19-eb22a71ffe76&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">sed -i &#8216;/^ANTHROPIC_API_KEY=/d&#8217; airflow-plugin.env
echo &#8220;ANTHROPIC_API_KEY=${data.coder_parameter.anthropic_api_key.value}&#8221; &gt;&gt; airflow-plugin.env</code></pre></div><p>This is more reliable than sed replace because it works regardless of whether the key already exists or is blank in the source file. We also add a blank line after the copy step &#8212; without it, if the source file has no trailing newline, your first appended key gets concatenated onto the last existing line.</p><p>Finally, the script runs exec sg docker &#8220;cd $HOME/$REPO_DIR &amp;&amp; just airflow&#8221;. The sg docker part activates the docker group membership immediately without needing a new login session &#8212; a common gotcha with Docker-in-Docker setups where usermod -aG docker doesn&#8217;t take effect until the next login.</p><p><strong>The coder_app resource</strong> registers the Airflow UI with Coder. With subdomain = true, Coder proxies it through http://airflow--yourusername--coder.localhost:3000/ &#8212; the wildcard DNS entry you configured when starting the server. The URL points to localhost:8088 because the repo&#8217;s docker-compose maps the webserver&#8217;s internal port 8080 to 8088 on the workspace container&#8217;s network.</p><p>One thing worth noting: this setup runs the full Docker daemon inside every workspace container, and each workspace pulls and caches its own images. For a small team of engineers it&#8217;s perfectly fine. For a setup with hundreds of developers, you&#8217;d want to think about shared image registries, resource limits, and a proper Coder deployment on a server rather than everyone&#8217;s laptop. We&#8217;ll cover exactly that in a future post &#8212; different workspace architectures, how to right-size environments for different roles, and how to deploy Coder in production so your whole team can use it without running anything locally at all.</p><div><hr></div><h3><strong>Workspace Architecture</strong></h3><p>Here&#8217;s what&#8217;s actually running when your workspace is up:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;daaf540b-e3e6-4614-b359-0d900393297e&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Mac (host)
&#9492;&#9472;&#9472; Docker Desktop
    &#9492;&#9472;&#9472; coder-yourusername-myworkspace (workspace container, privileged)
        &#9492;&#9472;&#9472; Inner Docker daemon (/var/lib/docker on persistent volume)
            &#9500;&#9472;&#9472; airflow-webserver  &#8594; exposed on workspace's localhost:8088
            &#9500;&#9472;&#9472; airflow-scheduler
            &#9500;&#9472;&#9472; airflow-worker
            &#9500;&#9472;&#9472; postgres           &#8594; state persists across restarts
            &#9492;&#9472;&#9472; redis:7</code></pre></div><p>The workspace container runs with privileged = true, which lets it run its own Docker daemon. All the Airflow containers are siblings inside that inner daemon &#8212; they share a bridge network and can reach each other by service name. From the outside, Coder&#8217;s agent proxies localhost:8088 on the workspace container through the wildcard subdomain to your browser.</p><p>Because /var/lib/docker is a named Docker volume, the inner daemon&#8217;s image cache survives workspace restarts. The first cold start pulls ~1GB of Airflow images. Every restart after that is fast.</p><p>Because /home/coder is also a named volume, your cloned repo, your airflow-plugin.env, and any local changes persist between restarts too.</p><div><hr></div><h3><strong>What&#8217;s Coming Next</strong></h3><p>This is the first post in a series on managing data engineering development environments with Coder. Coming up:</p><ul><li><p><strong>dbt workspaces</strong> &#8212; same pattern, different stack, with dbt docs served as a Coder app</p></li><li><p><strong>AI-assisted development with LiteLLM</strong> &#8212; routing Claude Code through a self-hosted LiteLLM proxy so your API keys stay centralized and usage is tracked per developer</p></li><li><p><strong>Multiple workspace types</strong> &#8212; how to run lightweight workspaces for analysts alongside heavy workspaces for engineers, all from the same Coder deployment</p></li><li><p><strong>Production deployment</strong> &#8212; moving from coder server on your laptop to a proper deployment behind a reverse proxy, with wildcard DNS, persistent Postgres, and workspace autostop policies to keep costs down</p></li></ul><p>The full template is in the repository. If you run into issues, the most common ones are covered in the troubleshooting section of the README.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The End-to-End Semantic Layer]]></title><description><![CDATA[From dbt to Cube, and Back to dbt]]></description><link>https://newsletter.ponder.co/p/the-end-to-end-semantic-layer</link><guid isPermaLink="false">https://newsletter.ponder.co/p/the-end-to-end-semantic-layer</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Wed, 27 May 2026 12:03:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BcOb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BcOb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BcOb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!BcOb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!BcOb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!BcOb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BcOb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1268048,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/199450577?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BcOb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!BcOb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!BcOb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!BcOb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e16a4f1-84e3-4486-bc50-397d9407ee20_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Rebuilding the same semantic layer over and over across different BI tools has always felt unnecessarily painful. Most dashboards still reach directly into databases, each with their own idea of what a &#8220;metric&#8221; is, so you end up maintaining the same logic in three or four places.</p><p>Late last year, out of frustration, we built<a href="https://www.google.com/search?q=%5Bhttps://github.com/ponderedw/dbt-to-cube%5D(https://github.com/ponderedw/dbt-to-cube)"> dbt-to-cube</a> to see whether dbt, Cube.js, and Superset could be wired together into a single automated flow. It worked: define metrics once in dbt, let a small tool translate them to Cube.js, and push them into your BI tool of choice&#8212;giving you a unified semantic layer across Superset, Tableau, or PowerBI without manual duplication.</p><p>But as we started relying heavily on this code-first workflow at Ponder Labs, a glaring logical gap emerged.</p><p>It&#8217;s great that downstream BI tools can query these unified metrics. But what about using those metrics <em>inside dbt itself</em>? If I wanted to build an aggregated reporting mart or feed a downstream process within my dbt pipeline, I still had to manually rewrite the SUM() or AVG() aggregations in my SQL, breaking the &#8220;define it once&#8221; rule. I wanted the metrics defined for Cube to be queryable natively in my dbt DAG.</p><p>That&#8217;s exactly why I built the next piece of the puzzle:<a href="https://www.google.com/search?q=%5Bhttps://github.com/ponderedw/dbt_simple_metrics%5D(https://github.com/ponderedw/dbt_simple_metrics)"> dbt_simple_metrics</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><strong>The Solution: Metrics as Code Inside dbt</strong></h3><p>dbt_simple_metrics is a lightweight dbt package that lets you generate aggregated SQL from metric definitions sitting directly inside your model YAML files. Instead of navigating a heavy, standalone semantic layer setup, your columns and metrics live together, and you reuse them across your marts with a single macro call.</p><p>In our simplified format, we keep things incredibly close to the data. You define the dimensions under columns, and your measures under config.meta.metrics. It looks like this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;3113ff39-d250-4d57-b250-a51e56499921&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">version: 2
models:
  - name: course_performance_summary
    columns:
      - name: course_name
      - name: academic_year
      - name: total_enrollments
    config:
      meta:
        metrics:
          total_course_enrollments:
            type: sum
            label: &#8220;Total Course Enrollments&#8221;
            sql: ${total_enrollments}</code></pre></div><p>Now, instead of manually writing aggregations in your downstream models, you simply call the macro. The package validates the dimensions and metrics at compile time and generates the proper GROUP BY SQL:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;9e19827d-4c76-4625-ae4e-13c7bccc4237&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{{ config(materialized=&#8217;table&#8217;) }}
{{ dbt_simple_metrics.metrics(
    &#8216;course_performance_summary&#8217;,
    [&#8217;course_name&#8217;, &#8216;academic_year&#8217;],
    [&#8217;total_course_enrollments&#8217;]
) }}</code></pre></div><p>If you misspell a dimension or an unknown metric is requested, you get a clear compile-time error rather than a runtime failure.</p><h3><strong>The Elephant in the Room: MetricFlow</strong></h3><p>If you are immersed in the dbt ecosystem, you are likely wondering: <em>Doesn&#8217;t dbt already have a Semantic Layer with MetricFlow?</em></p><p>It does. In fact, if you look at the semantic_models.yml file in the dbt_simple_metrics repository, you&#8217;ll see we actually included the MetricFlow definitions. We added them specifically so you can still see your metrics natively in dbt docs and the dbt Cloud catalog.</p><p>However, that file is an example of the <em>legacy</em> MetricFlow format. And honestly, it highlights exactly why we built our package. The old spec forces you to define a top-level semantic_models block entirely separate from your actual data models, with verbose, disconnected metrics configurations that look like this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;d3dde70f-b863-41ec-bbfc-ddaf3b587263&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"># The Legacy MetricFlow Format
metrics:
  - name: total_semester_headcount
    type: simple
    type_params:
      measure: total_unique_students
  - name: deans_list_rate
    type: ratio
    type_params:
      numerator: total_deans_list
      denominator: total_semester_headcount</code></pre></div><p>It works for populating a catalog, but it feels detached from the code-first, model-centric workflow developers actually want.</p><h3><strong>Ahead of the Curve: Preparing for MetricFlow v2.0</strong></h3><p>Here is the good news: dbt Labs recognizes this friction.</p><p>With the upcoming release of dbt 1.12, they are stabilizing<a href="https://docs.getdbt.com/docs/build/latest-metrics-spec?version=2.0"> MetricFlow spec version 2.0</a>. If you look at the differences, dbt is completely overhauling their approach to look... exactly like what we are already doing. They are abandoning the disconnected top-level wrappers and moving to embed semantic annotations (like semantic_model and simple metrics) directly under the models: block.</p><p>By adopting dbt_simple_metrics today, you aren&#8217;t fighting against the dbt ecosystem; you are skating to where the puck is going. You get the clean, embedded syntax that dbt is moving toward, with the immediate benefit of native dbt querying and automated syncing to Cube.js today.</p><p>And naturally, once dbt 1.12 becomes stable, we will be updating the package to ensure full, seamless compatibility with the final v2.0 spec.</p><h3><strong>Quickstart &amp; Installation</strong></h3><p>To start using it in your dbt project and close the loop on your semantic layer, add the git repository and the specific revision to your packages.yml:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;265151b7-bf20-43af-93e5-a6cf3056abeb&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">packages:
  - git: &#8220;https://github.com/ponderedw/dbt_simple_metrics.git&#8221;
    revision: v1.0.3</code></pre></div><p>Run dbt deps, and you&#8217;re ready to start calling the macro in your marts.</p><p>At Ponder Labs, we are constantly pushing the boundaries of what code-first orchestration can do, and eliminating redundant metric definitions has been a massive win for our data engineering workflows.</p><p>Give the package a try, and let me know what you think on GitHub&#8212;PRs, feedback, and feature requests are always welcome!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Hive Data Ingestion, Simplified]]></title><description><![CDATA[From raw S3 files to analytics-ready tables with Trino, dbt, and AWS Glue Catalog]]></description><link>https://newsletter.ponder.co/p/hive-data-ingestion-simplified</link><guid isPermaLink="false">https://newsletter.ponder.co/p/hive-data-ingestion-simplified</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Tue, 12 May 2026 12:32:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TtFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TtFp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TtFp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!TtFp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!TtFp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!TtFp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TtFp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png" width="408" height="272.0934065934066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:408,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!TtFp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!TtFp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!TtFp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!TtFp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428cac19-5666-4863-a040-162957ec2d5f_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>Introduction</strong></h1><p>Data ingestion is rarely glamorous &#8212; but getting it right is everything. In a<a href="https://newsletter.ponder.co/p/trino-dbt-simplifying-elt-with-pure"> previous post</a>, we explored batch data ingestion using Trino and dbt with a relational database as the source. But real-world data pipelines are messier: files land in S3 buckets from various sources, in various formats, and you need a reliable, manageable way to bring them into your Data Lake.</p><p>The natural question is: why not just create an external schema and table directly? You absolutely can &#8212; and in many cases, you should. But there are scenarios where that approach introduces more friction than it solves:</p><ul><li><p>Managing permissions between database users, IAM roles, and S3 buckets can become a tangled, error-prone mess</p></li><li><p>Each warehouse (Redshift, BigQuery, Snowflake) handles external tables differently, making your pipeline harder to standardize</p></li><li><p>Ingestion logic scattered across SQL scripts and cloud consoles is difficult to version, test, and maintain</p></li><li><p>Onboarding new data sources requires touching infrastructure, not just code</p></li></ul><p>We&#8217;re also familiar with the<a href="https://github.com/dbt-labs/dbt-external-tables"> dbt-redshift external tables package</a>, and while it&#8217;s a clever solution, it introduces a fundamental design concern: <strong>dbt shouldn&#8217;t be responsible for managing sources.</strong> Sources are meant to be stable, pre-existing references that dbt reads from &#8212; not objects that dbt creates or controls. When dbt starts owning source definitions, the line between infrastructure and transformation blurs, making pipelines harder to reason about, debug, and hand off to other teams. Models should run and transform; sources should simply exist.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1><strong>Why Hive?</strong></h1><p>Apache Hive has been around since 2008, originally developed at Facebook to bring SQL-like querying to Hadoop&#8217;s distributed file system. At its core, Hive introduced a revolutionary idea: separate the <strong>metadata</strong> (where the data lives, how it&#8217;s structured, what format it&#8217;s in) from the <strong>data itself</strong>. This metadata layer &#8212; the Hive Metastore &#8212; became the backbone of the Hadoop ecosystem and eventually the de facto standard for Data Lake table management, adopted by virtually every major distributed query engine, including Spark, Presto, and later Trino.</p><p>Over time, more modern table formats emerged to address Hive&#8217;s limitations. <strong>Apache Iceberg</strong>, for example, was designed to handle the pain points that Hive struggled with at scale: full ACID transactions, reliable schema evolution, time travel, and efficient handling of billions of files. Iceberg is undeniably powerful &#8212; and if you&#8217;re building a large-scale, write-heavy lakehouse with complex update and delete patterns, it&#8217;s likely the better choice.</p><p>But here&#8217;s the thing: <strong>Hive&#8217;s simplicity is a feature, not a bug.</strong> Iceberg&#8217;s richness comes with real operational overhead &#8212; more configuration, more moving parts, and a steeper learning curve. When your goal is straightforward S3 file ingestion without complex upserts or time travel requirements, Iceberg can feel like bringing a sledgehammer to crack a nut. Hive&#8217;s loss in the feature war is our gain in the simplicity game.</p><p>This is where Hive shines. By leveraging Hive Metastore alongside AWS Glue Catalog as the metadata layer, we can define, manage, and transform S3 data in a consistent, code-first way &#8212; entirely within dbt. No console gymnastics, no permission rabbit holes. Sources remain untouched and independently managed, while dbt focuses on what it does best: running transformations.</p><p>That said, Hive isn&#8217;t a silver bullet:</p><ul><li><p>It adds an extra layer to your stack, which means more components to monitor and maintain</p></li><li><p>Query performance on very large, unpartitioned datasets can lag behind native warehouse solutions</p></li><li><p>It works best when you&#8217;re already operating within the AWS ecosystem &#8212; outside of it, the setup overhead may not be worth it</p></li><li><p>Schema evolution (adding/changing columns) requires careful handling to avoid breaking downstream models</p></li></ul><p>If you&#8217;re already working in AWS and want to manage your ingestion logic cleanly in dbt, Hive is a natural, battle-tested fit. Let&#8217;s walk through how we set it all up.</p><h1><strong>Hive-Trino Setup</strong></h1><p>With the &#8220;why&#8221; out of the way, let&#8217;s get our hands dirty. The setup boils down to two things: telling Trino how to talk to Hive via AWS Glue, and giving the right IAM permissions to make it all work.</p><p><strong>1. Adding the Hive Catalog to Trino</strong></p><p>Trino uses catalog configuration files to connect to different data sources. To wire up Hive with AWS Glue as the metastore, add the following catalog:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;b6744bac-767b-41ff-929c-20c86bc45fe1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">s3_source_files_hive: |
    connector.name=hive
    hive.metastore=glue
    hive.metastore.glue.aws-access-key=${aws_access_key_hive}
    hive.metastore.glue.aws-secret-key=${aws_secret_key_hive}
    hive.metastore.glue.region=us-east-1
    fs.native-s3.enabled=true
    s3.aws-access-key=${aws_access_key_hive}
    s3.aws-secret-key=${aws_secret_key_hive}
    s3.region=us-east-1
    s3.path-style-access=true</code></pre></div><p>    A few things worth noting here:</p><ul><li><p>hive.metastore=glue is the key line &#8212; it tells Trino to use AWS Glue Catalog instead of a self-hosted Hive Metastore, which saves you from spinning up and maintaining yet another service</p></li><li><p>fs.native-s3.enabled=true enables Trino&#8217;s native S3 filesystem, which is more performant and reliable than the legacy Hadoop-based S3 driver</p></li><li><p>Credentials are injected via environment variables, keeping secrets out of your config files &#8212; make sure these are properly set in your Trino deployment</p></li></ul><p><strong>2. IAM Policy</strong></p><p>The catalog configuration alone isn&#8217;t enough &#8212; the IAM user referenced by those credentials needs the right permissions to both read/write from S3 and interact with the Glue Catalog. Attach the following policy:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;f9485ee5-b649-49db-b697-6e86ab874efe&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{
    &#8220;Version&#8221;: &#8220;2012-10-17&#8221;,
    &#8220;Statement&#8221;: [
        {
            &#8220;Sid&#8221;: &#8220;S3DataReadWrite&#8221;,
            &#8220;Effect&#8221;: &#8220;Allow&#8221;,
            &#8220;Action&#8221;: [
                &#8220;s3:GetBucketLocation&#8221;,
                &#8220;s3:ListBucket&#8221;,
                &#8220;s3:GetObject&#8221;,
                &#8220;s3:PutObject&#8221;,
                &#8220;s3:DeleteObject&#8221;
            ],
            &#8220;Resource&#8221;: [
                &#8220;arn:aws:s3:::source-files-hive&#8221;,
                &#8220;arn:aws:s3:::source-files-hive/*&#8221;
            ]
        },
        {
            &#8220;Sid&#8221;: &#8220;GlueMetadataReadWrite&#8221;,
            &#8220;Effect&#8221;: &#8220;Allow&#8221;,
            &#8220;Action&#8221;: [
                &#8220;glue:GetDatabase&#8221;,
                &#8220;glue:GetDatabases&#8221;,
                &#8220;glue:CreateDatabase&#8221;,
                &#8220;glue:GetTable&#8221;,
                &#8220;glue:GetTables&#8221;,
                &#8220;glue:CreateTable&#8221;,
                &#8220;glue:UpdateTable&#8221;,
                &#8220;glue:DeleteTable&#8221;,
                &#8220;glue:GetPartition&#8221;,
                &#8220;glue:GetPartitions&#8221;,
                &#8220;glue:CreatePartition&#8221;,
                &#8220;glue:BatchCreatePartition&#8221;,
                &#8220;glue:DeletePartition&#8221;,
                &#8220;glue:BatchDeletePartition&#8221;
            ],
            &#8220;Resource&#8221;: [
                &#8220;arn:aws:glue:us-east-1:&lt;account_id&gt;:catalog&#8221;,
                &#8220;arn:aws:glue:us-east-1:&lt;account_id&gt;:database/s3_source_files_hive&#8221;,
                &#8220;arn:aws:glue:us-east-1:&lt;account_id&gt;:table/s3_source_files_hive/*&#8221;
            ]
        }
    ]
}</code></pre></div><p>    The policy is split into two clear responsibilities:</p><ul><li><p><strong>S3DataReadWrite</strong> &#8212; grants access to the source-files-hive bucket, which is where your raw source files will be initially dropped. Trino needs read access to query them and write access to manage any intermediate outputs</p></li><li><p><strong>GlueMetadataReadWrite</strong> &#8212; grants Trino the ability to interact with Glue Catalog: reading and creating databases, managing tables, and handling partitions. Notice the resources are intentionally scoped to the s3_source_files_hive database only &#8212; following the principle of least privilege, we don&#8217;t hand out catalog-wide permissions</p></li></ul><blockquote><p>&#128161; <strong>Tip:</strong> Replace &lt;account_id&gt; with your actual AWS account ID before applying the policy. If you&#8217;re managing this via Terraform or CloudFormation, this is a good candidate for a variable substitution.</p></blockquote><p>With the catalog registered and IAM permissions in place, Trino can now discover and query any Hive tables registered in your Glue Catalog. Next, let&#8217;s look at how dbt fits into the picture.</p><h1><strong>dbt Integration</strong></h1><p>Now that Trino can talk to Glue and read from S3, we need to bridge the last gap: making dbt aware of our Hive tables and using them as sources for transformations. The elegant part of this approach is that we don&#8217;t register tables manually &#8212; we create them <strong>dynamically</strong> using a dbt macro, triggered as a pre_hook before the model runs.</p><p><strong>1. The Macro</strong></p><p>Add the following macro to your dbt Trino project:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;24559205-2b56-453f-8d11-10b2effc9372&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{% macro create_external_hive_table(model_name, schema_definition, s3_location) %}
    {% set target_relation = &#8220;s3_source_files_hive.s3_source_files_hive.&#8221; ~ model_name %}
    {% set sql %}
        DROP TABLE IF EXISTS {{ target_relation }};
        CREATE TABLE {{ target_relation }} (
            {{ schema_definition }}
        )
        WITH (
            external_location = &#8216;{{ s3_location }}&#8217;,
            format = &#8216;CSV&#8217;,
            skip_header_line_count = 1
        )
    {% endset %}
    {% if execute %}
        {% do run_query(sql) %}
        {{ log(&#8221;Created Hive Table: &#8220; ~ target_relation, info=True) }}
    {% endif %}
    {{ return(&#8221;SELECT 1&#8221;) }}
{% endmacro %}</code></pre></div><p>    Let&#8217;s break down what&#8217;s happening here:</p><ul><li><p><strong>target_relation</strong> &#8212; builds the fully qualified table name in the format catalog.database.table, pointing directly at our s3_source_files_hive catalog and database</p></li><li><p><strong>DROP TABLE IF EXISTS</strong> &#8212; ensures idempotency. Every time the model runs, the Hive table is recreated fresh. This is intentional: if the S3 files or schema change, the table definition stays in sync</p></li><li><p><strong>CREATE TABLE ... WITH (...)</strong> &#8212; this is a Hive external table definition. The key properties are:</p><ul><li><p>external_location &#8212; the S3 path where the raw files live. Hive doesn&#8217;t move or copy the data, it simply points to it</p></li><li><p>format = &#8216;CSV&#8217; &#8212; tells Hive how to parse the files. This can be swapped for ORC, PARQUET, JSON, etc. depending on your source files</p></li><li><p>skip_header_line_count = 1 &#8212; skips the first row of the CSV, assuming it contains column headers</p></li></ul></li><li><p><strong>{% if execute %}</strong> &#8212; a dbt guard that prevents the macro from running during the parsing/compilation phase, only firing during actual execution</p></li><li><p><strong>run_query(sql)</strong> &#8212; executes the DDL statement against Trino</p></li><li><p><strong>return(&#8221;SELECT 1&#8221;)</strong> &#8212; macros used in pre_hook must return a valid SQL string. Returning SELECT 1 is a clean no-op that satisfies this requirement without side effects</p></li></ul><p><strong>2. The Model</strong></p><p>With the macro in place, here&#8217;s how a dbt model using it looks:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;8c0e6beb-d67f-4f05-bf74-f76c82e192d2&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{%- set hive_table = &#8220;table_name&#8221; -%}
{{
    config(
        alias=hive_table,
        pre_hook=create_external_hive_table(
            model_name=hive_table,
            schema_definition=&#8221;
                column1 VARCHAR,
                column2 VARCHAR,
                column3 VARCHAR,
                column4 VARCHAR&#8221;,
            s3_location=&#8221;s3://source-files-hive/table_folder/&#8221;
        )
    )
}}
select
    *,
    current_date as ingested_at
from
    s3_source_files_hive.s3_source_files_hive.{{ hive_table }}</code></pre></div><p>Here&#8217;s the flow this model follows when dbt runs it:</p><ol><li><p><strong>pre_hook fires</strong> &#8212; before anything else, create_external_hive_table is called, dropping and recreating the Hive external table in Glue Catalog, pointed at the S3 location</p></li><li><p><strong>The model runs</strong> &#8212; dbt executes the SELECT statement, reading directly from the freshly registered Hive table, which transparently reads the CSV files from S3</p></li><li><p><strong>current_date as ingested_at</strong> &#8212; a small but important addition: we stamp every ingested row with the current date, giving us a simple audit trail of when the data was loaded</p></li></ol><blockquote><p>&#128161; <strong>Tip:</strong> Notice that the model name is defined once as a variable (hive_table) and reused in both the config block and the FROM clause. This keeps things DRY &#8212; if you rename the table, you change it in one place only.</p></blockquote><p>This pattern keeps the separation of concerns intact: the macro handles infrastructure (table registration), and the model handles transformation. dbt does what dbt is supposed to do &#8212; and nothing more.</p><h1>A Real-World Example: School Network Data Ingestion</h1><p>To make this concrete, consider a large school network &#8211; say, 50+ schools across a district &#8211; already operating within AWS. Their data team is responsible for centralizing student, staff, and assessment data from a patchwork of source systems: a Student Information System, an HR platform, and several third-party assessment providers.</p><p>None of these systems share a common integration standard. What they do all share: a scheduled CSV export, dropped into S3.</p><p>Here&#8217;s what that might look like in practice:</p><p>s3://source-files-hive/</p><p>&#9500;&#9472;&#9472; students/</p><p>&#9500;&#9472;&#9472; staff/</p><p>&#9492;&#9472;&#9472; assessments/</p><p>Each folder receives nightly file drops from the respective source system. The data team defines one dbt model per source, each invoking the same create_external_hive_table macro:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;b29fb00a-839d-4a08-a8fa-12f59b01c822&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">sql{%- set hive_table = &#8220;students&#8221; -%}
{{
    config(
        alias=hive_table,
        pre_hook=create_external_hive_table(
            model_name=hive_table,
            schema_definition=&#8221;
                student_id VARCHAR,
                first_name VARCHAR,
                last_name VARCHAR,
                date_of_birth VARCHAR,
                enrollment_status VARCHAR,
                school_id VARCHAR&#8221;,
            s3_location=&#8221;s3://source-files-hive/students/&#8221;
        )
    )
}}
select
    *,
    current_date as ingested_at
from
    s3_source_files_hive.s3_source_files_hive.{{ hive_table }}</code></pre></div><p></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;9bc287c0-8fa3-408a-bd72-6e51316738d6&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">sql{%- set hive_table = &#8220;staff&#8221; -%}
{{
    config(
        alias=hive_table,
        pre_hook=create_external_hive_table(
            model_name=hive_table,
            schema_definition=&#8221;
                staff_id VARCHAR,
                full_name VARCHAR,
                role VARCHAR,
                department VARCHAR,
                school_id VARCHAR,
                employment_status VARCHAR&#8221;,
            s3_location=&#8221;s3://source-files-hive/staff/&#8221;
        )
    )
}}
select
    *,
    current_date as ingested_at
from
    s3_source_files_hive.s3_source_files_hive.{{ hive_table }}</code></pre></div><p></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;80e08378-0da5-40e1-b575-ae31e5bc4a59&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">sql{%- set hive_table = &#8220;assessments&#8221; -%}
{{
    config(
        alias=hive_table,
        pre_hook=create_external_hive_table(
            model_name=hive_table,
            schema_definition=&#8221;
                assessment_id VARCHAR,
                student_id VARCHAR,
                subject VARCHAR,
                score VARCHAR,
                max_score VARCHAR,
                assessment_date VARCHAR,
                school_id VARCHAR&#8221;,
            s3_location=&#8221;s3://source-files-hive/assessments/&#8221;
        )
    )
}}
select
    *,
    current_date as ingested_at
from
    s3_source_files_hive.s3_source_files_hive.{{ hive_table }}</code></pre></div><p>The result: three clean, independently managed source tables, registered automatically on each dbt run, with zero manual intervention. The data team can onboard a new source system &#8211; say, a library platform or a special education tracking tool &#8211; by adding a single model file and an S3 folder. No console access required, no infrastructure tickets, no cross-team dependency on a cloud engineer to wire up permissions.</p><p>Downstream, dbt models join students, staff, and assessments to produce analytics-ready datasets: attendance summaries, assessment score trends by school, staff-to-student ratios. The ingestion layer stays untouched &#8211; it simply exists, and the transformation layer builds on top of it.</p><h1><strong>Summary</strong></h1><p>Data ingestion doesn&#8217;t have to be complicated. In this post, we walked through a clean, practical approach to bringing raw S3 files into a queryable Data Lake &#8212; without overengineering the pipeline or blurring the lines between infrastructure and transformation.</p><p>Here&#8217;s what we covered:</p><ul><li><p><strong>Why Hive over alternatives</strong> &#8212; Hive&#8217;s maturity and simplicity make it a natural fit for straightforward S3 ingestion. Where Iceberg wins on features, Hive wins on pragmatism. When you don&#8217;t need ACID transactions or time travel, there&#8217;s no reason to pay the complexity tax</p></li><li><p><strong>Why not external tables or dbt-redshift packages</strong> &#8212; external tables introduce permission headaches and lack standardization across warehouses. The dbt external tables package, while clever, violates a core dbt principle: sources should exist independently, not be managed by the transformation layer</p></li><li><p><strong>Trino + AWS Glue Catalog</strong> &#8212; by configuring a Hive catalog in Trino and pointing it at Glue, we get a fully managed, serverless metastore without spinning up any additional infrastructure. A tightly scoped IAM policy keeps things secure and follows the principle of least privilege</p></li><li><p><strong>Dynamic table creation with dbt macros</strong> &#8212; instead of manually registering Hive tables, a single reusable macro handles the DDL as a pre_hook, keeping table definitions in sync with your S3 files on every run</p></li><li><p><strong>Clean separation of concerns</strong> &#8212; the macro owns infrastructure, the model owns transformation. dbt stays in its lane, and your pipeline stays maintainable</p></li></ul><p>The result is a lightweight, reproducible, and version-controlled ingestion pipeline that lives entirely in your dbt project &#8212; no console gymnastics, no permission rabbit holes, no overengineering.</p><p>If you&#8217;re already running Trino on AWS and want a simple on-ramp for S3 file ingestion, this stack is hard to beat. As always, the best pipeline is the one your team can actually understand, maintain, and extend &#8212; and this one fits that bill.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[PowerSchool to Lakehouse: Student Data at Uncommon Schools]]></title><description><![CDATA[How Trino enables low-latency ingestion of student records at scale]]></description><link>https://newsletter.ponder.co/p/powerschool-to-lakehouse-student</link><guid isPermaLink="false">https://newsletter.ponder.co/p/powerschool-to-lakehouse-student</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Wed, 06 May 2026 10:04:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MnUo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: center;"></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MnUo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MnUo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!MnUo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!MnUo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!MnUo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MnUo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png" width="492" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:492,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MnUo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!MnUo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!MnUo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!MnUo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9725f7f5-709f-46e2-954a-05f7336fc8e6_2048x2048.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>Like many Charter Management Organizations (CMOs) across the U.S., Uncommon Schools relies on PowerSchool as its Student Information System (SIS) -- the system of record for student enrollment, demographics, attendance, grades, and scheduling. While PowerSchool is critical for day-to-day school operations, it wasn&#8217;t designed for fast, large-scale analytics use cases.</p><p>Under the hood, PowerSchool stores its data in an Oracle database, which makes extracting large tables -- like Students -- surprisingly slow when using conventional approaches.</p><p>In this post, I&#8217;ll walk through how we reduced ingestion time for the Students table from nearly 50 minutes to under a minute. We achieved this by migrating from a custom Python-based pipeline to Trino, enabling significantly faster data access and simpler ingestion logic. Along the way, I&#8217;ll share a few practical techniques to speed up data extraction -- not just in Oracle, but in any database system that supports procedural logic.</p><p>This work builds on ideas we explored in our earlier post, <a href="https://newsletter.ponder.co/p/trino-dbt-simplifying-elt-with-pure">Trino + dbt: Simplifying ELT with Pure SQL</a>, where we showed how combining Trino and dbt can simplify ingestion, improve reliability, and unify ingestion with transformation workflows. Here, we take that foundation further -- focusing on performance, real-world constraints, and how to make ingestion not just simpler, but dramatically faster.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/p/powerschool-to-lakehouse-student?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/p/powerschool-to-lakehouse-student?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.ponder.co/p/powerschool-to-lakehouse-student?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><h1>The Original Pipeline: Where We Started</h1><p>Our initial approach was built around a containerized extraction layer. We created a custom Docker image based on an Oracle Instant Client setup, which allowed us to connect directly to the PowerSchool Oracle database and run extraction queries. This image included Python, SQL*Plus, and a set of internal scripts used to execute parameterized queries and export data.</p><p>We orchestrated everything with Airflow, where each table ingestion was defined as a separate task in a DAG. Each task would spin up a container (via ECS/EKS) using our custom operator, ensuring that extraction workloads didn&#8217;t run on Airflow workers themselves but instead executed in isolated pods. This design gave us scalability and parallelism&#8212;but also introduced operational complexity.</p><p>To control what data gets extracted, we relied on SQL templates. Each table had its own query template, dynamically parameterized (e.g., by PowerSchool instance), and executed inside the container. For example, the Students table template included not only direct column selections, but also calls to Oracle PL/SQL functions like <strong>ps_customfields.getStudentsCF</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nNVI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nNVI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 424w, https://substackcdn.com/image/fetch/$s_!nNVI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 848w, https://substackcdn.com/image/fetch/$s_!nNVI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 1272w, https://substackcdn.com/image/fetch/$s_!nNVI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nNVI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png" width="1456" height="1039" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1039,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nNVI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 424w, https://substackcdn.com/image/fetch/$s_!nNVI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 848w, https://substackcdn.com/image/fetch/$s_!nNVI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 1272w, https://substackcdn.com/image/fetch/$s_!nNVI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41061c50-2668-4509-82bf-e8fbb8ba146e_1564x1116.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These functions are part of PowerSchool&#8217;s internal logic layer and allow access to data that isn&#8217;t physically stored in the base tables. While this gave us flexibility and completeness, it also came at a significant performance cost&#8212;each function call is effectively an additional computation executed per row.</p><p>Over time, several issues with this approach became clear:</p><ul><li><p><strong>Lack of lineage and validation</strong>: Changes to SQL templates were difficult to track and validate against downstream models. A simple column removal could silently break transformations later in the pipeline.</p></li><li><p><strong>Operational overhead</strong>: Each table required its own Airflow task and container. With ~30 tables, this meant dozens of parallel pods, making logs harder to read and increasing pressure on orchestration infrastructure.</p></li><li><p><strong>Performance bottlenecks</strong>: The biggest issue&#8212;queries were slow. Very slow. Extracting the Students table for a single instance could take up to <strong>50&#8211;60 minutes</strong>, largely due to heavy use of PL/SQL functions and row-by-row processing.</p></li></ul><p>In short, while the pipeline worked, it wasn&#8217;t scalable, transparent, or fast enough for our needs.</p><h1>The New Approach: Fast Ingestion with Trino</h1><p>To address the limitations of our original pipeline, we leaned into the approach we described in our previous post, Trino + dbt: Simplifying ELT with Pure SQL. The core idea is simple but powerful: move ingestion logic into SQL, unify it with transformation workflows in dbt, and let Trino handle execution across systems.</p><p>This shift solved several problems at once.</p><p>First, <strong>unpredictable production issues</strong> became much easier to manage. By bringing ingestion into dbt, we gained lineage, dependency tracking, and the ability to validate changes before they reach production. Instead of discovering issues at runtime, we can now catch them during development or CI &#8211; exactly the gap we highlighted in our earlier work.</p><p>Second, we eliminated the overhead of &#8220;millions of tasks and pods.&#8221; Instead of running one Airflow task per table (and spawning dozens of containers), we now have a <strong>single Airflow task</strong> that triggers a dbt run. Within that run, dbt executes multiple models concurrently using threads &#8211; all inside a single pod. This dramatically simplifies orchestration, improves observability, and reduces load on both Airflow and our container infrastructure.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZgcS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZgcS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 424w, https://substackcdn.com/image/fetch/$s_!ZgcS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 848w, https://substackcdn.com/image/fetch/$s_!ZgcS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 1272w, https://substackcdn.com/image/fetch/$s_!ZgcS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZgcS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png" width="406" height="192" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:406,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZgcS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 424w, https://substackcdn.com/image/fetch/$s_!ZgcS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 848w, https://substackcdn.com/image/fetch/$s_!ZgcS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 1272w, https://substackcdn.com/image/fetch/$s_!ZgcS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab340e8b-1bf2-4cec-a13e-fb76ad6ecdca_406x192.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>But the biggest win came from <strong>query performance</strong>.</p><p>In the new approach, the ingestion logic is written as a dbt model that uses Trino&#8217;s system.query to push down execution directly to Oracle. Instead of relying heavily on row-by-row PL/SQL function calls, we restructured the query to:</p><p><strong>Replace expensive function calls where possible with joins</strong> (e.g., leveraging <strong>studentcorefields</strong>, <strong>vwstudentcorefieldsuc</strong>, and other tables instead of repeatedly calling <strong>ps_customfields.getStudentsCF</strong>)<br></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e2Lc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e2Lc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 424w, https://substackcdn.com/image/fetch/$s_!e2Lc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 848w, https://substackcdn.com/image/fetch/$s_!e2Lc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 1272w, https://substackcdn.com/image/fetch/$s_!e2Lc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e2Lc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png" width="1456" height="199" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:199,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e2Lc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 424w, https://substackcdn.com/image/fetch/$s_!e2Lc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 848w, https://substackcdn.com/image/fetch/$s_!e2Lc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 1272w, https://substackcdn.com/image/fetch/$s_!e2Lc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2124c4a-2cdb-4e43-87fa-28c056fd08ee_1696x232.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The result is a much more efficient execution plan: fewer function calls, better use of joins, and improved parallelism across databases.</p><p>Combined with Trino&#8217;s ability to execute queries concurrently and dbt&#8217;s threaded execution model, this reduced the ingestion time for the Students table from nearly an hour to <strong>under a minute</strong>.</p><p>Just as importantly, the pipeline is now <strong>simpler, more maintainable, and fully transparent</strong>. Instead of spreading logic across Docker images, Airflow tasks, and SQL templates, everything lives in version-controlled dbt models&#8212;fully integrated with the rest of the data platform.</p><p>To tie everything together operationally, we also introduced a lightweight custom Airflow operator that runs dbt + Trino workloads inside a single Kubernetes pod:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D6xu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D6xu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 424w, https://substackcdn.com/image/fetch/$s_!D6xu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 848w, https://substackcdn.com/image/fetch/$s_!D6xu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 1272w, https://substackcdn.com/image/fetch/$s_!D6xu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D6xu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png" width="1386" height="1228" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1228,&quot;width&quot;:1386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D6xu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 424w, https://substackcdn.com/image/fetch/$s_!D6xu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 848w, https://substackcdn.com/image/fetch/$s_!D6xu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 1272w, https://substackcdn.com/image/fetch/$s_!D6xu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74e50bab-7338-4524-9695-3c5ead6f331b_1386x1228.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Summary</h1><p>Uncommon Schools&#8217; data team cut ingestion time for PowerSchool student records from nearly an hour to under a minute by replacing a custom Python/Docker pipeline with Trino and dbt. The original setup relied on containerized Oracle extractions, row-by-row PL/SQL function calls, and one Airflow task per table &#8212; functional, but slow, hard to maintain, and operationally expensive. The new approach moves ingestion logic into dbt models, uses Trino to push queries directly down to Oracle, and replaces costly function calls with efficient joins. The result is a faster, simpler, and fully version-controlled pipeline where lineage, validation, and transformation all live in one place.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Airflow Schedule Insights: Now Ready for Airflow 3]]></title><description><![CDATA[Example Educational DAGs, Asset Trees, and Full Visibility into Complex Dependencies]]></description><link>https://newsletter.ponder.co/p/airflow-schedule-insights-now-ready</link><guid isPermaLink="false">https://newsletter.ponder.co/p/airflow-schedule-insights-now-ready</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 09 Mar 2026 16:31:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!C_Up!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C_Up!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C_Up!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 424w, https://substackcdn.com/image/fetch/$s_!C_Up!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 848w, https://substackcdn.com/image/fetch/$s_!C_Up!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 1272w, https://substackcdn.com/image/fetch/$s_!C_Up!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C_Up!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png" width="1456" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!C_Up!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 424w, https://substackcdn.com/image/fetch/$s_!C_Up!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 848w, https://substackcdn.com/image/fetch/$s_!C_Up!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 1272w, https://substackcdn.com/image/fetch/$s_!C_Up!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f980f22-7a0b-40d0-8596-1a55bffcb104_1600x663.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When we first introduced <a href="https://newsletter.ponder.co/p/airflow-schedule-insights-how-dr">Airflow Schedule Insights</a>, we told the story of <strong>Dr. Movie</strong>, a cinema chain struggling with a &#8220;scheduling black box.&#8221; They had DAGs that silently refused to run, resource bottlenecks from over-parallelization, and zero visibility into when their next asset-based trigger would actually fire.</p><p>That story helped explain the problem.</p><p>But with <strong>Airflow 3</strong>, we decided to evolve the example environment.</p><p>Instead of fictional cinema DAGs, we now ship <strong>example educational DAGs</strong> that mimic real academic data platform dependency patterns. These DAGs are not production pipelines &#8212; they simply replicate common educational orchestration structures and asset relationships so users can test complex scheduling scenarios in a realistic setting.</p><p>In other words:<br>They copy educational DAG dependency patterns &#8212; not institutional data.</p><p>This makes the demo environment more relatable for universities and training organizations, while remaining lightweight and safe to use as a sandbox.</p><p>And alongside that shift, Schedule Insights v0.2.0 is officially out &#8212; fully migrated, dependency-light, and optimized for Airflow 3.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;dc6f4d8a-ae93-4559-896f-904728f63264&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">pip install airflow-schedule-insights</code></pre></div><p>&#128073; GitHub:<a href="https://github.com/ponderedw/airflow-schedule-insights"> https://github.com/ponderedw/airflow-schedule-insights</a><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zzs4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zzs4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!Zzs4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!Zzs4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!Zzs4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zzs4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2968187,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/190402449?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zzs4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!Zzs4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!Zzs4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!Zzs4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4dda100-46d6-43ab-9ce8-06a6316fd41e_800x400.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1><strong>What Changed in v0.2.0 (Airflow 3 Migration)</strong></h1><p>Under the hood, 22 files changed. If you&#8217;re a plugin developer, these are the silent Airflow 3 metadata changes you need to understand.</p><h2><strong>1&#65039;&#8419; The Great Renaming: Datasets &#8594; Assets</strong></h2><p>Airflow 3 formalized the shift from &#8220;datasets&#8221; to &#8220;assets.&#8221;</p><p>Old:</p><p><strong>task_outlet_dataset_reference</strong></p><p>New:</p><p><strong>task_outlet_asset_reference</strong></p><p>If your plugin queries the metadata DB directly, this rename will break you.</p><div><hr></div><h2><strong>2&#65039;&#8419; Logic Flip: is_active &#8594; is_stale</strong></h2><p>Airflow 2:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;d6dbc973-1112-4f1b-9bbd-b13bce014c37&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">DagModel.is_active == True</code></pre></div><p>Airflow 3:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;bb07eae2-237c-48f4-8ed4-6f160556bd1d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">DagModel.is_stale.is_(False)</code></pre></div><p>The column is gone. The logic is inverted. If you don&#8217;t update this filter, your visibility logic silently fails.</p><div><hr></div><h2><strong>3&#65039;&#8419; Asset Dependencies Are Trees, Not Lists</strong></h2><p>Airflow 3 introduces conditional asset expression9s with nested AND / OR logic.</p><p>Example:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;5189e613-55b7-4055-826f-8a98286491e9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">(Asset_A AND (Asset_B OR Asset_C))</code></pre></div><p>This is no longer a flat dependency list.</p><p>We implemented a recursive evaluator that parses the new asset_expression JSON structure so Schedule Insights can still predict:</p><ul><li><p>When a DAG will run</p></li><li><p>What it&#8217;s waiting on</p></li><li><p>Which branch of logic is currently blocking execution</p></li></ul><p>Without this, &#8220;next run&#8221; predictions are simply wrong.</p><div><hr></div><h2><strong>4&#65039;&#8419; Better Performance, Fewer Dependencies</strong></h2><p>We removed pandas and numpy.</p><p>Run duration medians are now computed directly in SQL using percentile_cont via SQLAlchemy.</p><p>Result:</p><ul><li><p>Faster installs</p></li><li><p>Lower memory usage</p></li><li><p>Cleaner dependency graph</p></li></ul><div><hr></div><h1><strong>Example Educational DAGs (Dependency Patterns Only)</strong></h1><p>For Airflow 3, the repository now includes an <strong>Academic Data Platform example DAG suite</strong>.</p><p>These DAGs simulate patterns such as:</p><ul><li><p>Ingestion &#8594; normalization &#8594; transformation &#8594; consolidation</p></li><li><p>Dataset/asset-triggered execution</p></li><li><p>Hybrid cron + asset scheduling</p></li><li><p>Conditional AND/OR asset logic</p></li><li><p>Reporting layers dependent on multiple upstream assets</p></li></ul><p>They exist purely to demonstrate:</p><ul><li><p>Complex asset expressions</p></li><li><p>Multi-layered DAG orchestration</p></li><li><p>Real-world dependency graphs</p></li></ul><p>No real institutional integrations.<br>No sensitive data.<br>Just realistic dependency topology.</p><p>This makes Schedule Insights far more meaningful to demonstrate than the original cinema example, especially when working with Airflow 3&#8217;s asset trees.</p><div><hr></div><h1><strong>Core Features (Now Tested on Complex Asset Graphs)</strong></h1><h2><strong>&#128736; The Next Run Table &#8212; No More Silent Failures</strong></h2><p>Asset-driven DAGs often &#8220;don&#8217;t run&#8221; for subtle reasons:</p><ul><li><p>Paused DAGs</p></li><li><p>Waiting on asset expressions</p></li><li><p>Hybrid cron + dataset logic</p></li><li><p>Unmet upstream conditions</p></li></ul><p>The <strong>Next Run table</strong> explains exactly why:</p><ul><li><p>&#8220;This DAG is paused and will not run.&#8221;</p></li><li><p>&#8220;No schedule or dependencies found.&#8221;</p></li><li><p>&#8220;Waiting for upstream Asset/DAG triggers.&#8221;</p></li></ul><div><hr></div><h2><strong>&#128202; The Schedule Impact Simulator</strong></h2><p>Want to change:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;03b5cf7d-a138-42a4-abe4-ef8f1dbc61c5&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">*/25 &#8594; */5</code></pre></div><p>Before committing?</p><p>Simulate it.</p><p>The UI highlights impacted future runs in purple and shows how the change propagates through downstream asset dependencies.</p><p>This is especially useful in complex multi-layer DAG graphs.</p><div><hr></div><h2><strong>&#128338; Timezone-Aware Gantt Charts</strong></h2><p>The plugin detects your local timezone and renders:</p><ul><li><p>Historical runs</p></li><li><p>Predicted runs</p></li><li><p>Gantt charts</p></li></ul><p>No more UTC mental math.</p><div><hr></div><h2><strong>&#128268; Programmatic Insights via API</strong></h2><p>We exposed the scheduling engine via FastAPI endpoints:</p><ul><li><p>get_future_runs_json</p></li><li><p>get_next_future_run_json</p></li></ul><p>Your internal tooling can now query predicted Airflow behavior programmatically.</p><div><hr></div><h1><strong>Visualizing Structure with airflow-dag-dependencies</strong></h1><p>To complement Schedule Insights, you can use our companion plugin:</p><p><strong>airflow-dag-dependencies</strong></p><p>Schedule Insights tells you <strong>when</strong> a DAG will run.<br>airflow-dag-dependencies shows you <strong>how everything connects</strong>.</p><p>Together they provide:</p><ul><li><p>Structural visibility (dependency graph)</p></li><li><p>Temporal visibility (future execution prediction)</p></li></ul><p>Especially powerful with Airflow 3&#8217;s conditional asset trees.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tlEN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tlEN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 424w, https://substackcdn.com/image/fetch/$s_!tlEN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 848w, https://substackcdn.com/image/fetch/$s_!tlEN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 1272w, https://substackcdn.com/image/fetch/$s_!tlEN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tlEN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png" width="1456" height="621" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:621,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tlEN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 424w, https://substackcdn.com/image/fetch/$s_!tlEN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 848w, https://substackcdn.com/image/fetch/$s_!tlEN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 1272w, https://substackcdn.com/image/fetch/$s_!tlEN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59943446-1ad3-4f08-b5dc-bb581168d5a0_1600x682.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Why This Matters at Scale</strong></h1><p>As more teams contribute DAGs to a shared Airflow environment &#8212; as is the case at Uncommon Schools, where multiple teams orchestrate data across a large network of schools &#8212; scheduling complexity compounds quickly. Each team adds their own timing requirements, and as run durations drift, overlap and resource contention become increasingly hard to spot from any single vantage point. Schedule Insights gives you a cross-team view &#8212; so you can see potential collisions before they become incidents. And when a DAG pile-up does occur, the historical run data lets you work backward and reconstruct what likely triggered the cascade.</p><h1><strong>Try It Today</strong></h1><p>Spin it up locally:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;293699bf-aeb7-4254-bbb2-8d6d3655c551&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">git clone https://github.com/ponderedw/airflow-schedule-insights
cd airflow-schedule-insights
docker compose -f local_airflow_3/docker-compose.yml up</code></pre></div><p>Then navigate to:</p><p>Browse &#8594; Schedule Insights</p><p>You&#8217;ll see the plugin running against realistic educational dependency patterns &#8212; not fictional cinema workflows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MHj9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MHj9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 424w, https://substackcdn.com/image/fetch/$s_!MHj9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 848w, https://substackcdn.com/image/fetch/$s_!MHj9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 1272w, https://substackcdn.com/image/fetch/$s_!MHj9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MHj9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png" width="1456" height="476" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:476,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MHj9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 424w, https://substackcdn.com/image/fetch/$s_!MHj9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 848w, https://substackcdn.com/image/fetch/$s_!MHj9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 1272w, https://substackcdn.com/image/fetch/$s_!MHj9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F651c8c8b-6691-49e6-b842-a026fd03fd75_1600x523.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>Airflow 3 made orchestration more powerful.<br>Schedule Insights makes it understandable.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[From AI Conversations to BI Charts]]></title><description><![CDATA[Visualizing semantic-layer analytics with Cube and AI]]></description><link>https://newsletter.ponder.co/p/from-ai-conversations-to-bi-charts</link><guid isPermaLink="false">https://newsletter.ponder.co/p/from-ai-conversations-to-bi-charts</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Tue, 17 Feb 2026 13:37:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q0fi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q0fi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q0fi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Q0fi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Q0fi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0fi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q0fi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Q0fi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Q0fi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Q0fi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0fi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a45d29-0c80-4f02-b002-77c776af7e0e_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>In our <a href="https://newsletter.ponder.co/p/from-semantic-layers-to-conversations">previous post</a>, we explored how to bridge the gap between complex data structures and end-users by grounding natural-language queries in a Cube-governed semantic layer. By using RAG, we enabled anyone&#8212;from teachers to board members&#8212;to query data without needing to touch SQL, GraphQL, or REST APIs.</p><p>But while answering a question with text is a great start, data is often best understood visually. Even for those who <em>can</em> write code, the goal is often the same: getting to the insight as quickly as possible. We asked ourselves: Can we move beyond simple text responses and visualize this data directly within the chat interface?</p><p>The answer is a resounding <strong>yes</strong>.</p><p>In this post, we&#8217;re introducing a new capability that turns conversational insights into immediate, actionable BI charts. We&#8217;ve implemented this by leveraging <strong>Streamlit&#8217;s</strong> native charting capabilities combined with custom logic for <strong>parsing the AI&#8217;s response</strong>.</p><p>Of course, we aren&#8217;t alone in this pursuit&#8212;the entire industry is racing toward &#8220;conversational BI.&#8221; This is simply our take on the problem. Our hope is that this specific implementation provides a blueprint or some inspiration for bringing similar capabilities to your own organization. If you have a different approach or wider experience in this space, we&#8217;d love for you to share your thoughts in the comments.</p><p>You can find the updated code in the same repository here:</p><p>&#128073; <strong>GitHub:</strong><a href="https://github.com/ponderedw/dbt-to-cube"> https://github.com/ponderedw/dbt-to-cube</a></p><p>Let&#8217;s dive into how we move from a simple chat response to a fully rendered chart.</p><p>One quick note before we dive in: all of the examples and visualizations in this post use synthetic sample data generated as part of the demo environment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!alDy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!alDy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!alDy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!alDy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!alDy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!alDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2895850,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/188257117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!alDy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!alDy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!alDy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!alDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660c731d-1f03-4885-a109-21dfce6b9cd8_800x400.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Quickstart</h1><p>Ready to see it in action? You can get the entire environment running in just a few steps.</p><ol><li><p><strong>Clone the repository:</strong> git clone https://github.com/ponderedw/dbt-to-cube</p></li><li><p><strong>Configure your environment:</strong> Create your .private.env file from the .private.env.template as explained<a href="https://newsletter.ponder.co/p/from-semantic-layers-to-conversations"> here</a>. This ensures your LLM provider and credentials are ready to go.</p></li><li><p><strong>Launch the stack:</strong> Simply run just all. This automated workflow handles the heavy lifting: spinning up the database, generating mock data, running dbt models, and ingesting metrics into both Cube and Superset. (You can read more about the underlying architecture<a href="https://newsletter.ponder.co/p/dbt-cubejs-superset-automating-semantic"> here</a>).</p></li><li><p><strong>Access the UI:</strong> Head over to http://localhost:8501/, enter your STREAMLIT_PASSWORD, and you&#8217;re ready to chat with your data.</p></li></ol><div><hr></div><h3><strong>From Questions to Visuals</strong></h3><p>Start by getting familiar with the metadata the RAG layer has indexed:</p><blockquote><p>&#8220;Hey. What measures and dimensions do we have?&#8221;</p></blockquote><p>Once the AI confirms the available metrics, it&#8217;s time to move beyond text. Let&#8217;s ask for a specific visualization:</p><blockquote><p>&#8220;Can you visualize the total number of course enrollments by difficulty level using a pie chart?&#8221;<br></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GY1B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GY1B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 424w, https://substackcdn.com/image/fetch/$s_!GY1B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 848w, https://substackcdn.com/image/fetch/$s_!GY1B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 1272w, https://substackcdn.com/image/fetch/$s_!GY1B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GY1B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png" width="1456" height="780" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GY1B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 424w, https://substackcdn.com/image/fetch/$s_!GY1B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 848w, https://substackcdn.com/image/fetch/$s_!GY1B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 1272w, https://substackcdn.com/image/fetch/$s_!GY1B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89bd06f8-7b21-47a9-a933-d4e11568c5a1_1600x857.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The result?</strong> A fully rendered BI graph in just 11 seconds.</p><p>Let&#8217;s try a different metric and a more dynamic chart type:</p><blockquote><p>&#8220;Return the number of students with excellent performance across academic years and visualize it using a line chart.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SxsN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SxsN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 424w, https://substackcdn.com/image/fetch/$s_!SxsN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 848w, https://substackcdn.com/image/fetch/$s_!SxsN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 1272w, https://substackcdn.com/image/fetch/$s_!SxsN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SxsN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png" width="1456" height="724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SxsN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 424w, https://substackcdn.com/image/fetch/$s_!SxsN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 848w, https://substackcdn.com/image/fetch/$s_!SxsN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 1272w, https://substackcdn.com/image/fetch/$s_!SxsN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe86ce202-cad3-4991-98ab-1eec5a05fbf2_1600x796.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In seconds, you receive an amazing, interactive line chart&#8212;mapping complex trends without you ever touching a visualization library.</p><h3><strong>More to Explore</strong></h3><p>The system is flexible enough to handle various chart types and comparison logic:</p><ul><li><p><strong>Area Charts:</strong> <em>&#8220;Can you create an area chart showing the number of students with excellent performance compared to the total number of enrolled students across semesters?&#8221;<br></em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VJs4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VJs4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 424w, https://substackcdn.com/image/fetch/$s_!VJs4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 848w, https://substackcdn.com/image/fetch/$s_!VJs4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 1272w, https://substackcdn.com/image/fetch/$s_!VJs4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VJs4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png" width="1456" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f789f284-73b0-4927-b270-62fd513fb658_1600x921.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VJs4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 424w, https://substackcdn.com/image/fetch/$s_!VJs4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 848w, https://substackcdn.com/image/fetch/$s_!VJs4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 1272w, https://substackcdn.com/image/fetch/$s_!VJs4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff789f284-73b0-4927-b270-62fd513fb658_1600x921.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Scatter Charts:</strong> <em>&#8220;Can you visualize the relationship between course difficulty level and average course GPA using a scatter chart?&#8221;<br></em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IrF8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IrF8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 424w, https://substackcdn.com/image/fetch/$s_!IrF8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 848w, https://substackcdn.com/image/fetch/$s_!IrF8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 1272w, https://substackcdn.com/image/fetch/$s_!IrF8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IrF8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png" width="1456" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IrF8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 424w, https://substackcdn.com/image/fetch/$s_!IrF8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 848w, https://substackcdn.com/image/fetch/$s_!IrF8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 1272w, https://substackcdn.com/image/fetch/$s_!IrF8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd90100-c340-4c7f-9059-5bdea8970ce3_1600x921.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>How does it work?</h1><p>To enable these visualizations, we didn&#8217;t need to reinvent the wheel. We kept the same agent-based architecture and Streamlit frontend but introduced two key modifications to the workflow:</p><h3><strong>1. Enhancing the Prompt (The &#8220;Brain&#8221;)</strong></h3><p>We updated our LangChain prompt to give the agent &#8220;visual awareness.&#8221; It now understands how to structure its output so the frontend knows when a chart is requested.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xxqD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xxqD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 424w, https://substackcdn.com/image/fetch/$s_!xxqD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 848w, https://substackcdn.com/image/fetch/$s_!xxqD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 1272w, https://substackcdn.com/image/fetch/$s_!xxqD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xxqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png" width="1456" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xxqD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 424w, https://substackcdn.com/image/fetch/$s_!xxqD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 848w, https://substackcdn.com/image/fetch/$s_!xxqD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 1272w, https://substackcdn.com/image/fetch/$s_!xxqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83b544a-f03a-460d-84e9-53277a5290f1_1600x583.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Where to look:</strong> You can find the specific instructions we added in cube-to-rag/app/server/chat.py.</p></li></ul><h3><strong>2. Intelligent Response Parsing (The &#8220;Bridge&#8221;)</strong></h3><p>Once the AI generates a response, the Streamlit application needs to know whether to display a paragraph of text or render a dynamic chart. We updated the handling logic to parse the AI&#8217;s response and trigger the appropriate Streamlit chart component.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rjs7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rjs7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 424w, https://substackcdn.com/image/fetch/$s_!rjs7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 848w, https://substackcdn.com/image/fetch/$s_!rjs7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 1272w, https://substackcdn.com/image/fetch/$s_!rjs7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rjs7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png" width="1456" height="737" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6850129e-a363-42f5-bd39-226f356ac898_1600x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:737,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rjs7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 424w, https://substackcdn.com/image/fetch/$s_!rjs7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 848w, https://substackcdn.com/image/fetch/$s_!rjs7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 1272w, https://substackcdn.com/image/fetch/$s_!rjs7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6850129e-a363-42f5-bd39-226f356ac898_1600x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Where to look:</strong> The updated logic is located in streamlit/Main.py.</p></li></ul><p>By separating the &#8220;intent&#8221; (in the prompt) from the &#8220;rendering&#8221; (in Streamlit), we maintain a clean separation of concerns while delivering a seamless user experience.</p><h1>Conclusion</h1><p>This experiment marks a significant step in making data truly accessible. By moving from simple text-based answers to <strong>dynamic BI visualizations</strong>, we&#8217;ve closed the loop between asking a question and gaining a visual insight.</p><p>The beauty of this approach lies in its <strong>governance</strong>. Because the AI is still grounded in the Cube semantic layer, the charts aren&#8217;t just &#8220;hallucinated&#8221; guesses&#8212;they are visual representations of verified business logic. Whether it&#8217;s a school administrator tracking student performance or a developer looking for a quick metric check, the interface provides a &#8220;hands-free&#8221; BI experience that stays accurate at scale.</p><h3><strong>What&#8217;s Next?</strong></h3><p>While this prototype demonstrates the power of combining RAG with Streamlit, there is still much to explore:</p><ul><li><p><strong>Embedded BI Dashboards:</strong> Moving beyond single charts to embed fully functional, pre-built dashboards (like those from <strong>Apache Superset</strong>) directly into the chat when a high-level overview is requested.</p></li><li><p><strong>Advanced Interactivity:</strong> Allowing users to drill down into chart elements through further conversation or &#8220;chatting with the legend.&#8221;</p></li><li><p><strong>Complex Multi-Step Reasoning:</strong> Improving how the agent handles requests that require joining multiple cubes or complex pre-aggregations.</p></li></ul><p>We believe that the future of BI isn&#8217;t just a static dashboard; it&#8217;s a conversation that adapts to the user&#8217;s needs in real-time. We hope this project helps you kickstart your own journey into conversational analytics.</p><div><hr></div><p><strong>Join the Conversation</strong></p><p>We&#8217;d love to hear your thoughts!</p><ul><li><p>Did this setup work for your data?</p></li><li><p>Do you prefer a different library for parsing AI-generated charts?</p></li><li><p>What&#8217;s the biggest challenge you&#8217;ve faced with Text-to-Chart workflows?</p></li></ul><p>Drop a comment below, or better yet, open an issue or PR on the<a href="https://github.com/ponderedw/dbt-to-cube"> GitHub repository</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[From Semantic Layers to Conversations]]></title><description><![CDATA[Turning Cube.js analytics into a natural-language interface with RAG]]></description><link>https://newsletter.ponder.co/p/from-semantic-layers-to-conversations</link><guid isPermaLink="false">https://newsletter.ponder.co/p/from-semantic-layers-to-conversations</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 26 Jan 2026 13:18:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pVRS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pVRS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pVRS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pVRS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pVRS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pVRS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pVRS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png" width="456" height="304.1043956043956" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:456,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pVRS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pVRS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pVRS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pVRS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b56c99e-1ac1-4909-b810-feecbcf19b49_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>In one of our previous posts, we showed how <strong>dbt, Cube, and Superset</strong> can work together to automate and standardize the semantic layer. The response from the community was overwhelmingly positive but it also raised a recurring question: <strong>why introduce Cube between dbt and Superset instead of connecting BI tools directly to the database?</strong></p><p>The answer is consistency at scale. A <strong>single, shared semantic layer</strong> ensures that metrics, dimensions, and business logic are defined once and reused everywhere &#8211; across BI tools, APIs, and downstream applications &#8211; rather than being reimplemented in each consumer.</p><p>This naturally led us to a bigger idea. If Cube already exposes a governed semantic layer through SQL, REST, and GraphQL, why force natural-language analytics back into brittle English-to-SQL translations? What if users could <strong>converse directly with the semantic layer</strong> instead?</p><p>In this post, we explore how to turn Cube analytics into a natural-language interface using <strong>RAG</strong>. We use RAG to store and retrieve Cube metrics and dimensions, allowing each user query to be grounded in the correct semantic context before any query is generated or executed. This keeps conversations aligned with predefined business logic while remaining flexible and intuitive for users.</p><p>Let&#8217;s walk through how it works.</p><p>&#128073; GitHub:<a href="https://github.com/ponderedw/dbt-to-cube"> https://github.com/ponderedw/dbt-to-cube</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ARDz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ARDz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!ARDz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!ARDz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!ARDz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ARDz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3669402,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/185835669?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ARDz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!ARDz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!ARDz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!ARDz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155720af-e2a4-485b-9d8b-9ac80aa8bcc8_800x400.gif 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h1>Quickstart</h1><ol><li><p>Clone the repository:<br>&#128073;<a href="https://github.com/ponderedw/dbt-to-cube"> https://github.com/ponderedw/dbt-to-cube</a></p></li><li><p>Copy .private.env.template to .private.env and configure the required secrets for your LLM provider.</p></li><li><p><code>just all</code></p></li></ol><p>Once everything is up and running:</p><ul><li><p>Open:</p></li></ul><pre><code>http://localhost:8000/</code></pre><ul><li><p> and navigate to the cube_schemas collection.<br>You&#8217;ll see a set of vectors representing Cube metadata &#8211; dimensions, measures, and cubes.<br>These embeddings are generated using the <strong>cube-to-rag</strong> library (<a href="https://pypi.org/project/cube-to-rag/">https://pypi.org/project/cube-to-rag/</a>), which we use to extract and embed Cube schema metadata into the vector store.<br></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DOGD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DOGD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 424w, https://substackcdn.com/image/fetch/$s_!DOGD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 848w, https://substackcdn.com/image/fetch/$s_!DOGD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 1272w, https://substackcdn.com/image/fetch/$s_!DOGD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DOGD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png" width="1456" height="564" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:564,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DOGD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 424w, https://substackcdn.com/image/fetch/$s_!DOGD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 848w, https://substackcdn.com/image/fetch/$s_!DOGD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 1272w, https://substackcdn.com/image/fetch/$s_!DOGD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc98c4e8-7f7b-4dfe-a35d-7e7c8cdc51d6_1600x620.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Next, open<a href="http://localhost:8501/"> </a></p></li></ul><pre><code>http://localhost:8501/</code></pre><ul><li><p>If you&#8217;ve set <strong>STREAMLIT_PASSWORD</strong> in <strong>.private.env</strong>, use it to log in.<br></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f7xm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f7xm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 424w, https://substackcdn.com/image/fetch/$s_!f7xm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 848w, https://substackcdn.com/image/fetch/$s_!f7xm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 1272w, https://substackcdn.com/image/fetch/$s_!f7xm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f7xm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png" width="1456" height="606" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:606,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f7xm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 424w, https://substackcdn.com/image/fetch/$s_!f7xm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 848w, https://substackcdn.com/image/fetch/$s_!f7xm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 1272w, https://substackcdn.com/image/fetch/$s_!f7xm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7100eb-8ff8-4a10-b84f-c508b1183ce6_1600x666.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You&#8217;re all set, start asking questions and explore your Cube analytics through natural language.</p><h1>Talking to Your Data</h1><p>Let&#8217;s start simple:<br> <strong>&#8220;What metrics and dimensions do we have?&#8221;</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xbG9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xbG9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 424w, https://substackcdn.com/image/fetch/$s_!xbG9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 848w, https://substackcdn.com/image/fetch/$s_!xbG9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 1272w, https://substackcdn.com/image/fetch/$s_!xbG9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xbG9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png" width="1456" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea38c754-e3ef-4396-9623-650b201951fd_1600x793.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xbG9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 424w, https://substackcdn.com/image/fetch/$s_!xbG9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 848w, https://substackcdn.com/image/fetch/$s_!xbG9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 1272w, https://substackcdn.com/image/fetch/$s_!xbG9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea38c754-e3ef-4396-9623-650b201951fd_1600x793.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Great. Now let&#8217;s explore the data itself:<br> <strong>&#8220;Show all available course names.&#8221;</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oROr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oROr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 424w, https://substackcdn.com/image/fetch/$s_!oROr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 848w, https://substackcdn.com/image/fetch/$s_!oROr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 1272w, https://substackcdn.com/image/fetch/$s_!oROr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oROr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png" width="1214" height="1370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1370,&quot;width&quot;:1214,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oROr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 424w, https://substackcdn.com/image/fetch/$s_!oROr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 848w, https://substackcdn.com/image/fetch/$s_!oROr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 1272w, https://substackcdn.com/image/fetch/$s_!oROr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdabd874b-872d-4926-8a6c-bd842d334738_1214x1370.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fp8m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fp8m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 424w, https://substackcdn.com/image/fetch/$s_!fp8m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 848w, https://substackcdn.com/image/fetch/$s_!fp8m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 1272w, https://substackcdn.com/image/fetch/$s_!fp8m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fp8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png" width="1456" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fp8m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 424w, https://substackcdn.com/image/fetch/$s_!fp8m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 848w, https://substackcdn.com/image/fetch/$s_!fp8m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 1272w, https://substackcdn.com/image/fetch/$s_!fp8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95da36ae-51d3-481a-a444-a73be09a11f5_1600x552.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nice. Let&#8217;s narrow it down:<br> <strong>&#8220;What metrics are available for Linear Algebra?&#8221;</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8vnl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8vnl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 424w, https://substackcdn.com/image/fetch/$s_!8vnl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 848w, https://substackcdn.com/image/fetch/$s_!8vnl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 1272w, https://substackcdn.com/image/fetch/$s_!8vnl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8vnl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png" width="1456" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8vnl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 424w, https://substackcdn.com/image/fetch/$s_!8vnl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 848w, https://substackcdn.com/image/fetch/$s_!8vnl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 1272w, https://substackcdn.com/image/fetch/$s_!8vnl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb0f496-16de-4a35-a9f0-cbae787bf856_1600x571.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now for a concrete business question:<br> <strong>&#8220;How many enrollments do we have across all courses?&#8221;</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wlxp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wlxp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 424w, https://substackcdn.com/image/fetch/$s_!Wlxp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 848w, https://substackcdn.com/image/fetch/$s_!Wlxp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 1272w, https://substackcdn.com/image/fetch/$s_!Wlxp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wlxp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png" width="1456" height="747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:747,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wlxp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 424w, https://substackcdn.com/image/fetch/$s_!Wlxp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 848w, https://substackcdn.com/image/fetch/$s_!Wlxp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 1272w, https://substackcdn.com/image/fetch/$s_!Wlxp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d5a1fe6-28d7-4229-ab4a-266be7994f40_1600x821.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And finally, let&#8217;s push it a bit further with a more complex query involving filters and breakdowns:<br> <strong>&#8220;What is the student engagement score for the </strong><em><strong>Data Structures and Algorithms</strong></em><strong> course, broken down by semester?&#8221;</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zsIT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zsIT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 424w, https://substackcdn.com/image/fetch/$s_!zsIT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 848w, https://substackcdn.com/image/fetch/$s_!zsIT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 1272w, https://substackcdn.com/image/fetch/$s_!zsIT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zsIT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png" width="1456" height="707" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:707,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zsIT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 424w, https://substackcdn.com/image/fetch/$s_!zsIT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 848w, https://substackcdn.com/image/fetch/$s_!zsIT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 1272w, https://substackcdn.com/image/fetch/$s_!zsIT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5abb228a-fce2-4ed2-b8d3-04256048ff15_1600x777.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And just like that, everything works. Metrics stay consistent, dimensions are respected, and the conversation maps cleanly to the semantic layer</p><h1>Conclusion</h1><p>This experiment shows one possible direction for moving from static semantic layers to truly conversational analytics. By grounding natural-language queries in Cube&#8217;s governed semantic layer using RAG, we avoid many of the pitfalls of naive text-to-SQL approaches: inconsistent metrics, broken joins, and logic that drifts away from business definitions. Instead, users can explore data conversationally while staying aligned with a single source of truth.</p><p>That said, this is not <em>the</em> solution &#8211; it&#8217;s <em>our</em> attempt at solving a real and growing problem. There are open questions around performance, UX, evaluation, security, and how this approach compares to alternatives such as agent-driven query planning, stricter semantic parsers, or hybrid BI experiences. We&#8217;re certain there are improvements to be made, edge cases we haven&#8217;t covered, and ideas we haven&#8217;t considered.</p><p>We&#8217;d love to hear what others think about this: What works? What doesn&#8217;t? What would you do differently? If you&#8217;re experimenting with similar approaches &#8211; or taking a completely different path &#8211; your feedback, suggestions, and alternatives are more than welcome.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[RAG Isn’t Enough: Structuring Documents Instead of Just Retrieving Them]]></title><description><![CDATA[An open-source approach to turning PDFs and DOCX files into structured datasets with LLMs]]></description><link>https://newsletter.ponder.co/p/rag-isnt-enough-structuring-documents</link><guid isPermaLink="false">https://newsletter.ponder.co/p/rag-isnt-enough-structuring-documents</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Tue, 06 Jan 2026 12:36:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-bj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z-bj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z-bj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 424w, https://substackcdn.com/image/fetch/$s_!Z-bj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 848w, https://substackcdn.com/image/fetch/$s_!Z-bj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 1272w, https://substackcdn.com/image/fetch/$s_!Z-bj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z-bj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png" width="1456" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:422736,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/183658708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z-bj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 424w, https://substackcdn.com/image/fetch/$s_!Z-bj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 848w, https://substackcdn.com/image/fetch/$s_!Z-bj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 1272w, https://substackcdn.com/image/fetch/$s_!Z-bj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52326c9d-fafa-43d5-89b8-7d59557c0cb0_1800x922.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>Most teams have been there. You start storing company documentation as Word files or PDFs because it&#8217;s quick, familiar, and temporary. A proof of concept, a contract, a report &#8211; throw it into a folder and move on. But over time, that &#8220;temporary&#8221; storage often becomes a critical production knowledge base.</p><p>At that point, problems emerge: documents are hard to search, relationships are implicit, extracting structured data is manual, and automation becomes painful.</p><p>A common approach today is &#8220;just put everything into RAG.&#8221; While retrieval helps with search, it doesn&#8217;t solve the core issue: the information itself is still unstructured. If the content were normalized into a machine-friendly format (like JSON with well-defined schemas), working with it would be faster, more reliable, and would open new workflows &#8211; analytics, validation, integrations, and automation.</p><p>That gap is what inspired this experiment. I wanted a way to turn business documents into structured, queryable data using LLMs. The result is <strong>StructuDoc</strong>, an open-source proof of concept that combines document parsing, image understanding, schema discovery, and prompt tracking into a single pipeline. It can move PDFs and DOCX files into structured datasets, identify common schemas, and store everything in S3.</p><p>This post introduces <strong>StructuDoc</strong>, explains how it works, and shares the reasoning behind its design. It&#8217;s offered in a spirit of sharing rather than as a commercial product &#8211; we&#8217;d love your feedback, alternative approaches you&#8217;ve tried, or contributions to the project.</p><ul><li><p>GitHub:<a href="https://github.com/ponderedw/StructuDoc"> https://github.com/ponderedw/StructuDoc</a></p></li><li><p>Docker Hub:<a href="https://hub.docker.com/repository/docker/pondered/structudoc/general"> https://hub.docker.com/repository/docker/pondered/structudoc/general</a></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qLyB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qLyB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!qLyB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!qLyB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!qLyB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qLyB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4377839,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/183658708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qLyB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!qLyB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!qLyB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!qLyB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e35641-38d8-467a-842c-07a8edeeedc9_800x400.gif 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Quickstart with StructuDoc</h1><p>StructuDoc makes it easy to turn PDFs and DOCX files into structured JSON, discover common schemas, and even analyze images using AI. Here&#8217;s how to get started in minutes:</p><h3><strong>1. Clone the repository</strong></h3><pre><code>git clone https://github.com/ponderedw/StructuDoc.git
cd StructuDoc</code></pre><h3><strong>2. Set up environment variables</strong></h3><p>Copy the example file:</p><pre><code>cp .env.example .env</code></pre><p>Edit <strong>.env</strong> to configure your local storage (MinIO) or S3, and optionally your LLM provider keys:</p><pre><code>ENV=local
SOURCE_BUCKET=minio/source-bucket
MINIO_HOST=http://localhost:9000
MINIO_SECURE=false
AWS_ACCESS_KEY_ID=admin
AWS_SECRET_ACCESS_KEY=password
LLM_MODEL=Bedrock:anthropic.claude-3-5-sonnet-20241022-v2:0</code></pre><h3><strong>3. Start the application (this file can be executed independently of the repository)</strong></h3><pre><code>docker compose up -f docker-compose-prod.yml</code></pre><ul><li><p><strong>Streamlit UI</strong>:</p></li></ul><pre><code> http://localhost:8501</code></pre><ul><li><p><strong>FastAPI backend</strong>:</p></li></ul><pre><code> http://localhost:8080</code></pre><ul><li><p><strong>MinIO console (</strong>login: admin/password<strong>)</strong>:</p></li></ul><pre><code> http://localhost:9001</code></pre><h3><strong>4. Upload and process documents</strong></h3><ol><li><p>Go to <strong>Upload Source Files</strong> in the UI.</p></li><li><p>Upload DOCX or PDF files.</p></li><li><p>StructuDoc will automatically:</p><ul><li><p>Convert PDFs to Markdown</p></li><li><p>Extract images</p></li><li><p>Store all files in structured folders</p></li></ul></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qInx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qInx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 424w, https://substackcdn.com/image/fetch/$s_!qInx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 848w, https://substackcdn.com/image/fetch/$s_!qInx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 1272w, https://substackcdn.com/image/fetch/$s_!qInx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qInx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png" width="1456" height="734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:734,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qInx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 424w, https://substackcdn.com/image/fetch/$s_!qInx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 848w, https://substackcdn.com/image/fetch/$s_!qInx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 1272w, https://substackcdn.com/image/fetch/$s_!qInx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fb40b96-ae1f-43e9-840f-56edec236aca_1600x807.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>5. Parse and analyze with AI</strong></h3><ul><li><p>Navigate to <strong>Parse Files With LLM</strong>:</p></li></ul><blockquote><p></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c4ez!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c4ez!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 424w, https://substackcdn.com/image/fetch/$s_!c4ez!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 848w, https://substackcdn.com/image/fetch/$s_!c4ez!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 1272w, https://substackcdn.com/image/fetch/$s_!c4ez!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c4ez!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png" width="438" height="334.2631578947368" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:608,&quot;resizeWidth&quot;:438,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c4ez!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 424w, https://substackcdn.com/image/fetch/$s_!c4ez!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 848w, https://substackcdn.com/image/fetch/$s_!c4ez!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 1272w, https://substackcdn.com/image/fetch/$s_!c4ez!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059aaca4-6e70-4569-8f3a-acedb6ef6fa6_608x464.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Analyze images with AI prompts</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TUfZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TUfZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 424w, https://substackcdn.com/image/fetch/$s_!TUfZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 848w, https://substackcdn.com/image/fetch/$s_!TUfZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 1272w, https://substackcdn.com/image/fetch/$s_!TUfZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TUfZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png" width="805" height="464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:805,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TUfZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 424w, https://substackcdn.com/image/fetch/$s_!TUfZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 848w, https://substackcdn.com/image/fetch/$s_!TUfZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 1272w, https://substackcdn.com/image/fetch/$s_!TUfZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff04c0767-e1e7-404f-b17c-20145c7f3d99_805x464.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KzGx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KzGx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 424w, https://substackcdn.com/image/fetch/$s_!KzGx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 848w, https://substackcdn.com/image/fetch/$s_!KzGx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 1272w, https://substackcdn.com/image/fetch/$s_!KzGx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KzGx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png" width="805" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&quot;width&quot;:805,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KzGx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 424w, https://substackcdn.com/image/fetch/$s_!KzGx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 848w, https://substackcdn.com/image/fetch/$s_!KzGx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 1272w, https://substackcdn.com/image/fetch/$s_!KzGx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1efef841-8553-49d6-964d-e3b4c468b2f8_805x941.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>And remember to save those descriptions to your s3 bucket: </p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c-Cq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c-Cq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 424w, https://substackcdn.com/image/fetch/$s_!c-Cq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 848w, https://substackcdn.com/image/fetch/$s_!c-Cq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 1272w, https://substackcdn.com/image/fetch/$s_!c-Cq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c-Cq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png" width="269" height="451" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:269,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c-Cq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 424w, https://substackcdn.com/image/fetch/$s_!c-Cq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 848w, https://substackcdn.com/image/fetch/$s_!c-Cq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 1272w, https://substackcdn.com/image/fetch/$s_!c-Cq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9be46195-b0be-42ec-a036-b72c30460ca3_269x451.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Discover common schemas across multiple documents</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R9nD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R9nD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 424w, https://substackcdn.com/image/fetch/$s_!R9nD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 848w, https://substackcdn.com/image/fetch/$s_!R9nD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 1272w, https://substackcdn.com/image/fetch/$s_!R9nD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R9nD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png" width="828" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:828,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R9nD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 424w, https://substackcdn.com/image/fetch/$s_!R9nD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 848w, https://substackcdn.com/image/fetch/$s_!R9nD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 1272w, https://substackcdn.com/image/fetch/$s_!R9nD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d25269d-4399-47d6-8163-0d4aa63a21ac_828x794.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>Parse your documents to JSON</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JAuw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JAuw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 424w, https://substackcdn.com/image/fetch/$s_!JAuw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 848w, https://substackcdn.com/image/fetch/$s_!JAuw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 1272w, https://substackcdn.com/image/fetch/$s_!JAuw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JAuw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png" width="828" height="465" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:465,&quot;width&quot;:828,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JAuw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 424w, https://substackcdn.com/image/fetch/$s_!JAuw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 848w, https://substackcdn.com/image/fetch/$s_!JAuw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 1272w, https://substackcdn.com/image/fetch/$s_!JAuw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a4fa8d1-0e3a-48dc-afd6-737e9a0af71a_828x465.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q7Po!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q7Po!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 424w, https://substackcdn.com/image/fetch/$s_!Q7Po!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 848w, https://substackcdn.com/image/fetch/$s_!Q7Po!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7Po!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q7Po!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png" width="828" height="1143" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1143,&quot;width&quot;:828,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q7Po!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 424w, https://substackcdn.com/image/fetch/$s_!Q7Po!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 848w, https://substackcdn.com/image/fetch/$s_!Q7Po!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7Po!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faee0a8e9-7a11-45ef-a4c4-f718437f74b7_828x1143.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now you have structured, queryable data from your documents &#8211; ready for testing, analysis, or building pipelines!</p><h1>Conclusion</h1><p>StructuDoc is an open-source experiment for turning PDFs and DOCX files into structured, queryable data. Instead of relying solely on RAG for search, it lets you extract JSON, discover common schemas, and analyze images with AI. This isn&#8217;t a fully polished product &#8211; it&#8217;s a proof of concept born from real challenges we&#8217;ve faced, shared in the hope it might help others or spark new ideas. We&#8217;d love to hear your feedback, learn about alternative approaches you&#8217;ve tried, or see contributions that improve StructuDoc.</p><p><strong>GitHub:</strong><a href="https://github.com/ponderedw/StructuDoc"> https://github.com/ponderedw/StructuDoc<br></a><strong>Docker Hub:</strong><a href="https://hub.docker.com/repository/docker/pondered/structudoc/general"> https://hub.docker.com/repository/docker/pondered/structudoc/general</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Incremental CI for dbt: Stop Rebuilding Everything From Scratch]]></title><description><![CDATA[Test your dbt models against real production data for more accurate CI results]]></description><link>https://newsletter.ponder.co/p/incremental-ci-for-dbt-stop-rebuilding</link><guid isPermaLink="false">https://newsletter.ponder.co/p/incremental-ci-for-dbt-stop-rebuilding</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 08 Dec 2025 13:23:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ab1bb9ea-6eeb-4d71-a741-7d86b8b13b1f_1282x834.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y2y0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y2y0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 424w, https://substackcdn.com/image/fetch/$s_!Y2y0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 848w, https://substackcdn.com/image/fetch/$s_!Y2y0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 1272w, https://substackcdn.com/image/fetch/$s_!Y2y0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y2y0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png" width="1282" height="834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1282,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:163853,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/181037971?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y2y0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 424w, https://substackcdn.com/image/fetch/$s_!Y2y0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 848w, https://substackcdn.com/image/fetch/$s_!Y2y0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 1272w, https://substackcdn.com/image/fetch/$s_!Y2y0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c887f3-3f42-44f6-a09a-c3d236072e05_1282x834.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>dbt has become the backbone of modern analytics engineering, and one of its best features is CI: the ability to compare a developer branch with main, rebuild only the changed models in a temporary schema, and use production data from unchanged models. It&#8217;s an amazing way to catch issues before they hit production.</p><p>But what about <strong>incremental models</strong> and <strong>snapshots</strong>? Metrics like Grade Point Average whose day-by-day variations are captured in a dbt snapshot are then tracked and rendered in various contexts over time. This per-student metric is calculated in one environment (production) each day to ensure a clear source of truth. But for CI&#8230;that&#8217;s where things get tricky.</p><p>Both incremental models and snapshots have different logic for <strong>initial runs</strong> vs. <strong>upsert runs</strong>. In CI, everything is always built from scratch &#8211; so your CI may pass, only for the query to fail the moment it meets existing data or objects in production.</p><p>To solve this for Uncommon Schools, we built a tiny but powerful solution &#8211; and now we&#8217;re sharing it with everyone:<br> &#128230; <strong>dbt-incremental-ci</strong> (<a href="https://pypi.org/project/dbt-incremental-ci/">https://pypi.org/project/dbt-incremental-ci/</a>)</p><h1>Quickstart</h1><p>Get up and running in under 5 minutes.</p><p>dbt-incremental-ci copies your <strong>production incremental models and snapshots</strong> into your CI schema so you can test against <strong>real production data</strong>, not empty tables.</p><div><hr></div><h2><strong>Installation</strong></h2><pre><code>pip install dbt-incremental-ci</code></pre><div><hr></div><h2><strong>Option 1: Using a Local Manifest File</strong></h2><p>Use this approach if your production manifest.json is stored in S3, GCS, or available locally.</p><h3><strong>Step 1: Download your production manifest</strong></h3><pre><code># From S3
aws s3 cp s3://my-dbt-artifacts/prod/manifest.json ./prod_manifest.json

# From GCS

gsutil cp gs://my-dbt-artifacts/prod/manifest.json ./prod_manifest.json</code></pre><h3><strong>Step 2: Copy production tables into your CI schema</strong></h3><pre><code>dbt-incremental-ci \
  --prod-manifest-path ./prod_manifest.json \
  --dbt-project-dir . \
  --database-uri &#8220;postgresql://user:pass@host:5432/db&#8221; \
  --ci-schema &#8220;ci_pr_123&#8221; \
  --threads 4</code></pre><h3><strong>Step 3: Run dbt with the copied production data</strong></h3><pre><code>dbt build --select state:modified+ --defer --state ./prod_manifest.json</code></pre><h3><strong>Step 4: Run your tests</strong></h3><pre><code>dbt test --select state:modified+ --defer --state ./prod_manifest.json</code></pre><p>You&#8217;re now running incremental models and snapshots against actual production state&#8212;not empty CI tables.</p><div><hr></div><h2><strong>Option 2: Using dbt Cloud</strong></h2><p>If you&#8217;re on dbt Cloud, you don&#8217;t need to download the manifest&#8212;the tool fetches it automatically from the API.</p><h3><strong>Step 1: Set your credentials</strong></h3><pre><code>export DBT_CLOUD_API_TOKEN=&#8221;your_token&#8221;
export DBT_CLOUD_ACCOUNT_ID=&#8221;12345&#8221;</code></pre><h3><strong>Step 2: Copy production tables into your CI schema</strong></h3><pre><code>dbt-incremental-ci \
  --dbt-cloud-job-id &#8220;67890&#8221; \
  --dbt-project-dir . \
  --database-uri &#8220;$DATABASE_URI&#8221; \
  --ci-schema &#8220;ci_pr_123&#8221; \
  --threads 4</code></pre><p>The tool will automatically:</p><ul><li><p>Connect to the dbt Cloud API</p></li><li><p>Fetch the latest successful production run</p></li><li><p>Download the manifest</p></li><li><p>Copy the required tables</p></li></ul><h3><strong>Step 3: Run dbt</strong></h3><pre><code>dbt build --select state:modified+ --defer</code></pre><h3><strong>Step 4: Run your tests</strong></h3><pre><code>dbt test --select state:modified+ --defer</code></pre><div><hr></div><h2><strong>What Just Happened?</strong></h2><p>The tool:</p><ol><li><p>Identified changed models using state:modified+</p></li><li><p>Filtered to incremental models and snapshots that already exist in production</p></li><li><p>Copied those production tables (with data!) into your CI schema</p></li><li><p>Preserved custom schemas (e.g., prod_marts &#8594; ci_pr_123_marts)</p></li></ol><p>This ensures your CI pipeline behaves like a real incremental run&#8212;catching bugs that only appear when existing data is present.</p><div><hr></div><h2><strong>Preview Before Running (Dry Run)</strong></h2><p>Want to see what will be copied without actually doing anything?</p><pre><code>dbt-incremental-ci \
  --prod-manifest-path ./prod_manifest.json \
  --dbt-project-dir . \
  --database-uri &#8220;postgresql://user:pass@host:5432/db&#8221; \
  --ci-schema &#8220;ci_pr_123&#8221; \
  --dry-run \
  --verbose</code></pre><p>This prints exactly which tables would be copied and the SQL that would run.</p><h1>Final Thoughts</h1><p>Incremental models and snapshots are some of the most powerful parts of dbt &#8211; but they&#8217;re also uniquely tricky to validate in CI. Full rebuilds simply don&#8217;t reflect how these models behave in production, which means some of the most painful bugs can slip past your pipeline undetected.</p><p>dbt-incremental-ci is <strong>our attempt</strong> to fix that gap. It&#8217;s a lightweight, practical solution that brings real production state into your CI runs so you can test incremental logic the way it actually runs in the real world.</p><p>But this isn&#8217;t the final word &#8211; far from it.<br>This is our first take at solving the problem, and we know the community will have ideas we haven&#8217;t thought of yet. If you have a better approach, want to improve this one, or see opportunities to make it smarter, faster, or more general &#8211; <strong>we&#8217;d love your help.</strong></p><p>&#128073; PyPI:<a href="https://pypi.org/project/dbt-incremental-ci/"> https://pypi.org/project/dbt-incremental-ci/<br></a>&#128073; GitHub: <em><a href="https://github.com/ponderedw/dbt-incremental-ci">https://github.com/ponderedw/dbt-incremental-ci</a> </em>&#8211; issues, discussions, and PRs are all very welcome.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Unifying dbt Lineage and Superset Metadata with AI Chat]]></title><description><![CDATA[A Superset plugin for exploring transformations, sources, and dashboards through a single, natural-language interface.]]></description><link>https://newsletter.ponder.co/p/unifying-dbt-lineage-and-superset</link><guid isPermaLink="false">https://newsletter.ponder.co/p/unifying-dbt-lineage-and-superset</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Tue, 02 Dec 2025 14:20:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZdN2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZdN2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZdN2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ZdN2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ZdN2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ZdN2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZdN2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png" width="376" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:376,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZdN2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ZdN2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ZdN2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ZdN2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005ae7fe-dfd3-43bb-ad41-88a91a45bea7_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>A couple of weeks ago, we shared several blog posts about different ways we&#8217;re making data more accessible and interactive: our Superset MCP (<a href="https://newsletter.ponder.co/p/superset-mcp-organizing-dashboard">link</a>), loading dbt metadata into GraphDB (<a href="https://newsletter.ponder.co/p/graph-powered-ai-chat-for-dbt">link</a>), and an amazing AI-powered UI plugin for Airflow that lets you interact with your workflows directly in the UI (<a href="https://newsletter.ponder.co/p/airflow-chat-conversational-ai-built">link</a>).</p><p>Today, I want to bring all three together and introduce <strong>superset-chat</strong> - a library that helps you manage both your dbt and dashboard metadata right in the Superset UI, powered by AI, Superset MCP, and our Falkor DB plugin. You can check it out on GitHub:<a href="https://github.com/ponderedw/superset-mcp-plugins"> superset-mcp-plugins</a>.</p><p>If you&#8217;ve ever felt a disconnect between BI and transformation logic, this library might resonate. It can answer questions like, <em>&#8220;Which dashboards depend on source X?&#8221;</em> - even when those sources aren&#8217;t referenced directly. While still a POC, superset-chat has already helped us organize educational metadata, and we&#8217;re excited to share it with the community. Maybe you&#8217;ll help improve it or come up with something entirely new!</p><h1>Quickstart</h1><p>You can try <strong>superset-chat</strong> in two ways:</p><h4><strong>1. Use your existing Superset</strong></h4><p>If you already have a Superset deployment, you can integrate the plugin directly:</p><ul><li><p>Install the plugin:</p></li></ul><pre><code>pip install superset-chat</code></pre><ul><li><p>Update your superset_config.py to register the plugin:</p></li></ul><pre><code>FLASK_APP_MUTATOR = lambda app: init_custom_views(app)
def init_custom_views(app):

    from superset_chat.ai_superset_assistant import AISupersetAssistantView

    appbuilder = app.appbuilder
    appbuilder.add_view(
        AISupersetAssistantView,
        &#8220;AI Superset Assistant&#8221;,
        icon=&#8221;fa-robot&#8221;,
        category=&#8221;Custom Tools&#8221;
    )</code></pre><ul><li><p>Make sure you have the following environment variables set for your deployment:</p></li></ul><pre><code>LLM_MODEL_ID=bedrock:anthropic.claude-3-5-sonnet-20240620-v1:0  # Must start with &#8216;bedrock&#8217;, &#8216;anthropic&#8217;, or &#8216;openai&#8217;
# ANTHROPIC_API_KEY=...              # Required if using Anthropic
AWS_ACCESS_KEY_ID=&#8217;...&#8217;             # Required if using Bedrock
AWS_SECRET_ACCESS_KEY=&#8217;...&#8217;         # Required if using Bedrock
SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://postgres:postgres@postgres:5432/postgres
SUPERSET_API_URL=http://localhost:8088
SUPERSET_USERNAME=superset_admin
SUPERSET_PASSWORD=superset
GRAPH_DB=falkordb                     # Optional: enable GraphDB connection
GRAPH_HOST=...                        # Optional: if using a remote GraphDB
GRAPH_USER=...
GRAPH_PASSWORD=...</code></pre><p>Restart Superset, log in, and open <strong>AI Superset Assistant</strong> under <strong>Custom Tools</strong>.</p><h4><strong>2. Run the local deploy</strong></h4><p>If you don&#8217;t have a Superset deployment, you can use our preconfigured local setup:</p><ul><li><p>Clone the repository:</p></li></ul><pre><code>git clone https://github.com/ponderedw/superset-mcp-plugins.git
cd superset-mcp-plugins</code></pre><ul><li><p>Copy the environment template and configure credentials:</p></li></ul><pre><code>cp template.env .env</code></pre><ul><li><p>The minimal .env for local deploy (we use FalkorDB in this tutorial) can be:</p></li></ul><pre><code>LLM_MODEL_ID=bedrock:anthropic.claude-3-5-sonnet-20240620-v1:0
# ANTHROPIC_API_KEY=...
AWS_ACCESS_KEY_ID=&#8217;...&#8217;
AWS_SECRET_ACCESS_KEY=&#8217;...&#8217;
SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://postgres:postgres@postgres:5432/postgres
SUPERSET_API_URL=http://localhost:8088
SUPERSET_USERNAME=superset_admin
SUPERSET_PASSWORD=superset
GRAPH_DB=falkordb</code></pre><ul><li><p>Run Superset with superset-chat:</p></li></ul><pre><code>just run_superset</code></pre><ul><li><p>Navigate to your Superset instance (usually http://localhost:8088) and open <strong>AI Superset Assistant</strong> under <strong>Custom Tools</strong>.</p></li></ul><p>This local deploy is a fully working Superset + superset-chat environment, so you can start experimenting even if you don&#8217;t have your own deployment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q0JX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q0JX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 424w, https://substackcdn.com/image/fetch/$s_!Q0JX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 848w, https://substackcdn.com/image/fetch/$s_!Q0JX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0JX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q0JX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png" width="572" height="248.67857142857142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:1456,&quot;resizeWidth&quot;:572,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q0JX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 424w, https://substackcdn.com/image/fetch/$s_!Q0JX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 848w, https://substackcdn.com/image/fetch/$s_!Q0JX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0JX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F859d1474-8e4d-4275-8c8a-555fe3095ba4_1600x696.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Using superset-chat: Examples</h1><p>If you&#8217;re using our project, we&#8217;ve included a <strong>dbt project</strong> that was automatically loaded into FalkorDB, along with <strong>Superset charts and dashboards</strong> that were imported into Superset. You can explore all of them in the UI as well as in dbt docs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HVJ1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HVJ1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 424w, https://substackcdn.com/image/fetch/$s_!HVJ1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 848w, https://substackcdn.com/image/fetch/$s_!HVJ1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 1272w, https://substackcdn.com/image/fetch/$s_!HVJ1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HVJ1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png" width="542" height="294.4519230769231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:791,&quot;width&quot;:1456,&quot;resizeWidth&quot;:542,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HVJ1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 424w, https://substackcdn.com/image/fetch/$s_!HVJ1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 848w, https://substackcdn.com/image/fetch/$s_!HVJ1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 1272w, https://substackcdn.com/image/fetch/$s_!HVJ1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c4c7f2e-87e0-49ff-828b-ec653b705725_1558x846.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cgyZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cgyZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 424w, https://substackcdn.com/image/fetch/$s_!cgyZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 848w, https://substackcdn.com/image/fetch/$s_!cgyZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 1272w, https://substackcdn.com/image/fetch/$s_!cgyZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cgyZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png" width="560" height="236.53846153846155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:615,&quot;width&quot;:1456,&quot;resizeWidth&quot;:560,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cgyZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 424w, https://substackcdn.com/image/fetch/$s_!cgyZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 848w, https://substackcdn.com/image/fetch/$s_!cgyZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 1272w, https://substackcdn.com/image/fetch/$s_!cgyZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe11047fb-0790-4b0b-976a-67eb7c18a199_1600x676.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Now, let&#8217;s try out the plugin with a few example queries:</p><ol><li><p><strong>Superset-related question:</strong></p></li></ol><blockquote><p><em>&#8220;Quick question &#8211; what&#8217;s our current count of Superset dashboards and charts?&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_xjs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_xjs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_xjs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_xjs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_xjs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_xjs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg" width="636" height="146.08125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:294,&quot;width&quot;:1280,&quot;resizeWidth&quot;:636,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_xjs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_xjs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_xjs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_xjs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee38bf05-73a0-4fc1-8d46-ad19c2641835_1280x294.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MW7e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MW7e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MW7e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MW7e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MW7e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MW7e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg" width="640" height="227.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:1280,&quot;resizeWidth&quot;:640,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MW7e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 424w, https://substackcdn.com/image/fetch/$s_!MW7e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 848w, https://substackcdn.com/image/fetch/$s_!MW7e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!MW7e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9cdb653-9f7a-4e66-b866-5e78dc92fef8_1280x455.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>As expected, superset-chat lists all the Superset metadata correctly &#8211; dashboards and charts &#8211; just like in the UI. Cool!</p><ol start="2"><li><p><strong>dbt-related question:<br><br></strong></p></li></ol><blockquote><p><em>&#8220;Hey! Do you know how many dbt models we have in total?&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O5Qd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O5Qd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 424w, https://substackcdn.com/image/fetch/$s_!O5Qd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 848w, https://substackcdn.com/image/fetch/$s_!O5Qd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!O5Qd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O5Qd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg" width="680" height="164.6875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:310,&quot;width&quot;:1280,&quot;resizeWidth&quot;:680,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O5Qd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 424w, https://substackcdn.com/image/fetch/$s_!O5Qd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 848w, https://substackcdn.com/image/fetch/$s_!O5Qd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!O5Qd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02fb89c7-39d4-4b2c-8f81-84d9621587f8_1280x310.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rV6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rV6G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rV6G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rV6G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rV6G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rV6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg" width="682" height="134.8015625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:253,&quot;width&quot;:1280,&quot;resizeWidth&quot;:682,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rV6G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rV6G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rV6G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rV6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f139dbb-8e49-4f71-823d-6079e8561498_1280x253.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>We can check the answer in dbt docs, and it&#8217;s completely correct. Awesome!</p><ol start="3"><li><p><strong>Combined dbt + Superset question:</strong></p></li></ol><blockquote><p><em>&#8220;Could you help me find all the dbt sources (not models) used in the Student Academic Standing chart?&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pMoX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pMoX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pMoX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pMoX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pMoX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pMoX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg" width="1280" height="315" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:315,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pMoX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pMoX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pMoX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pMoX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe935ecf4-4943-4a89-935a-d03ac4b57b9b_1280x315.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jyIk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jyIk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jyIk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jyIk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jyIk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jyIk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg" width="1280" height="561" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:561,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jyIk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jyIk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jyIk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jyIk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5088e17d-2970-4d74-b1ee-7df1bd9926b2_1280x561.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Amazing! superset-chat traced the chart all the way back to the underlying database tables. This shows how we can connect Superset dashboards directly to dbt metadata seamlessly.</p><h1>Connecting BI and Transformation Metadata with AI</h1><p>Connecting BI and Transformation Metadata with AI<br> With superset-chat, you can finally see your BI layer and your transformation logic in one place, without manually tracing dependencies or opening multiple tools. By unifying dbt lineage and Superset metadata, the plugin allows you to:</p><ul><li><p>Ask natural-language questions spanning both dashboards and data models.</p></li><li><p>Trace dashboards and charts back to the underlying source tables.</p></li><li><p>Verify dbt lineage directly from Superset without leaving the UI.</p></li><li><p>Quickly get insights that previously required multiple queries or digging through documentation.</p></li></ul><p>Even as a POC, superset-chat already shows how AI can bridge the gap between data transformation and business intelligence. It&#8217;s also beginning to influence some of our internal workflows - for example, in our work with <a href="https://uncommonschools.org/">Uncommon Schools</a> we&#8217;re exploring how the assistant can accelerate outage protocols, particularly when on-call responders aren&#8217;t familiar with the specific code paths involved. This kind of scenario highlights the value of unifying metadata and making it accessible through natural language.</p><p>Whether you&#8217;re exploring dashboards, analyzing dbt models, or troubleshooting lineage issues, this tool turns what was once a fragmented process into a single, interactive experience. We&#8217;re excited to share this with the community and invite you to try it, suggest improvements, or build on it for your own workflows. It&#8217;s a step toward truly connected, AI-powered data exploration.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[dbt → Cube.js → Superset: Automating Semantic Layer & BI Sync]]></title><description><![CDATA[A fully automated workflow for generating semantic layers and publishing them to BI platforms.]]></description><link>https://newsletter.ponder.co/p/dbt-cubejs-superset-automating-semantic</link><guid isPermaLink="false">https://newsletter.ponder.co/p/dbt-cubejs-superset-automating-semantic</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 24 Nov 2025 12:55:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!h9u_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h9u_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h9u_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!h9u_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!h9u_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!h9u_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h9u_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg" width="278" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:278,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h9u_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!h9u_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!h9u_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!h9u_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F653999ac-86d1-4329-9c17-1b3dd47c697c_1024x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>Rebuilding the same semantic layer over and over across different BI tools has always felt&#8230; unnecessarily painful. Most dashboards still reach directly into databases, each with their own idea of what a &#8220;metric&#8221; is, so you end up maintaining the same logic in three or four places. Even tools built to solve this &#8211; like <a href="http://cube.js">Cube.js</a> &#8211; don&#8217;t really solve the end-to-end problem of getting consistent metrics into your BI layer.</p><p>Out of curiosity (and a bit of frustration), I started tinkering with a small proof of concept to see whether dbt, Cube.js, and Superset could be wired together into a single automated flow. The result is <strong>dbt-to-cube</strong>:</p><p><a href="https://github.com/ponderedw/dbt-to-cube">https://github.com/ponderedw/dbt-to-cube</a></p><p>It&#8217;s very much a work in progress, but it already connects dbt &#8594; Cube.js &#8594; Superset and keeps metrics in sync without any manual steps. Sharing it here in case others are experimenting with similar setups &#8211; I&#8217;d genuinely love feedback, ideas, or contributions from anyone who gives it a try.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6ajf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ajf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!6ajf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!6ajf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!6ajf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6ajf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3065299,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.ponder.co/i/179719306?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6ajf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 424w, https://substackcdn.com/image/fetch/$s_!6ajf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 848w, https://substackcdn.com/image/fetch/$s_!6ajf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 1272w, https://substackcdn.com/image/fetch/$s_!6ajf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff491ae41-021e-4de0-bce0-1971b2f52a13_800x400.gif 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Quickstart</h1><p>See <strong>dbt-cube-sync</strong> in action! This walkthrough demonstrates a full semantic layer pipeline&#8212;from dbt transformations to BI dashboards&#8212;without any manual metric duplication.</p><h3><strong>Already Have dbt, Cube.js, and Superset?</strong></h3><p>If your stack is already deployed, you <strong>don&#8217;t need Docker</strong>. Just install dbt-cube-sync and point it to your existing deployment:</p><pre><code>pip install dbt-cube-sync

# Convert dbt models to Cube.js schemas

dbt-cube-sync dbt-to-cube \

  --manifest /path/to/manifest.json \

  --catalog /path/to/catalog.json \

  --output /path/to/cube/output

# Sync Cube.js schemas to Superset

dbt-cube-sync cube-to-bi superset \

  --cube-files /path/to/cube/output \

  --url http://your-superset:8088 \

  --username admin \

  --password admin \

  --cube-connection-name Cube</code></pre><p>This workflow works with <strong>Superset, Tableau, or PowerBI</strong>, giving you full control over your production-ready semantic layer.</p><div><hr></div><h3><strong>Starting from Scratch? Spin Up Everything Locally</strong></h3><p>If you want a <strong>full demo stack</strong> including sample data, all services run locally in Docker: PostgreSQL, dbt, Cube.js, Superset, and <strong>dbt-cube-sync</strong>.</p><h4><strong>Prerequisites</strong></h4><ul><li><p>Docker &amp; Docker Compose</p></li><li><p>Git</p></li><li><p>~10 minutes</p></li></ul><h4><strong>Step 1: Clone &amp; Start the Stack</strong></h4><pre><code>git clone https://github.com/ponderedw/dbt-to-cube
cd dbt-to-cube
docker-compose up --build</code></pre><p>This will:</p><ol><li><p>Initialize <strong>PostgreSQL</strong> with sample data</p></li><li><p>Run <strong>dbt transformations</strong> on 46 pre-built models</p></li><li><p>Start <strong>Cube.js API</strong> serving your semantic layer</p></li><li><p>Configure <strong>Superset</strong> with admin access and database connection</p></li><li><p>Automatically generate Cube.js schemas from dbt and sync them to Superset</p></li></ol><h4><strong>Step 2: Explore Your Data Stack</strong></h4><p>Once the logs show <strong>&#8220;Pipeline completed successfully!&#8221;</strong>, you can access:</p><ul><li><p><strong>Superset</strong>: http://localhost:8088 &#8212; login: admin/admin</p><ul><li><p>46 datasets auto-created from dbt models</p></li><li><p>Column metadata and metrics like <em>Average GPA</em> and <em>Pass Rate</em></p></li></ul></li></ul><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jc9l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jc9l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 424w, https://substackcdn.com/image/fetch/$s_!jc9l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 848w, https://substackcdn.com/image/fetch/$s_!jc9l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 1272w, https://substackcdn.com/image/fetch/$s_!jc9l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jc9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png" width="1456" height="116" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:116,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jc9l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 424w, https://substackcdn.com/image/fetch/$s_!jc9l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 848w, https://substackcdn.com/image/fetch/$s_!jc9l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 1272w, https://substackcdn.com/image/fetch/$s_!jc9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc193aaad-3349-41e3-86db-dd597ab690ed_1600x127.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yBob!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yBob!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 424w, https://substackcdn.com/image/fetch/$s_!yBob!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 848w, https://substackcdn.com/image/fetch/$s_!yBob!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 1272w, https://substackcdn.com/image/fetch/$s_!yBob!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yBob!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png" width="1456" height="1078" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1078,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yBob!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 424w, https://substackcdn.com/image/fetch/$s_!yBob!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 848w, https://substackcdn.com/image/fetch/$s_!yBob!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 1272w, https://substackcdn.com/image/fetch/$s_!yBob!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f12a87-7141-44d6-8e46-eb5800191fd6_1600x1185.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XWPZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XWPZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 424w, https://substackcdn.com/image/fetch/$s_!XWPZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 848w, https://substackcdn.com/image/fetch/$s_!XWPZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 1272w, https://substackcdn.com/image/fetch/$s_!XWPZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XWPZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png" width="1456" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:432,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XWPZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 424w, https://substackcdn.com/image/fetch/$s_!XWPZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 848w, https://substackcdn.com/image/fetch/$s_!XWPZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 1272w, https://substackcdn.com/image/fetch/$s_!XWPZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6224b1d5-5a12-4d63-b700-06b7a68389af_1600x475.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wDe_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wDe_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 424w, https://substackcdn.com/image/fetch/$s_!wDe_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 848w, https://substackcdn.com/image/fetch/$s_!wDe_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 1272w, https://substackcdn.com/image/fetch/$s_!wDe_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wDe_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png" width="1456" height="541" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:541,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wDe_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 424w, https://substackcdn.com/image/fetch/$s_!wDe_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 848w, https://substackcdn.com/image/fetch/$s_!wDe_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 1272w, https://substackcdn.com/image/fetch/$s_!wDe_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F220749b3-31e9-4e60-a3f3-d7c5ffa2c24a_1600x595.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>dbt Docs</strong>: http://localhost:8080 &#8212; full DAG and column-level documentation</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2h3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2h3S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 424w, https://substackcdn.com/image/fetch/$s_!2h3S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 848w, https://substackcdn.com/image/fetch/$s_!2h3S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 1272w, https://substackcdn.com/image/fetch/$s_!2h3S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2h3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png" width="458" height="389.42698706099816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&quot;width&quot;:1082,&quot;resizeWidth&quot;:458,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2h3S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 424w, https://substackcdn.com/image/fetch/$s_!2h3S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 848w, https://substackcdn.com/image/fetch/$s_!2h3S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 1272w, https://substackcdn.com/image/fetch/$s_!2h3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aa5a294-7e83-4b0c-934e-213f3dfb58eb_1082x920.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Cube.js API</strong>: http://localhost:4000 &#8212; REST and GraphQL endpoints</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l-EF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l-EF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 424w, https://substackcdn.com/image/fetch/$s_!l-EF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 848w, https://substackcdn.com/image/fetch/$s_!l-EF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 1272w, https://substackcdn.com/image/fetch/$s_!l-EF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l-EF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png" width="1456" height="486" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:486,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l-EF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 424w, https://substackcdn.com/image/fetch/$s_!l-EF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 848w, https://substackcdn.com/image/fetch/$s_!l-EF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 1272w, https://substackcdn.com/image/fetch/$s_!l-EF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fc093ef-fc30-4883-ab57-ae48e3e5d24b_1600x534.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Step 3: Watch the Pipeline in Action</strong></h4><pre><code>docker-compose logs -f dbt-cube-sync</code></pre><p>The pipeline runs in three automated phases:</p><ol><li><p><strong>dbt Parsing</strong> &#8211; reads manifest.json &amp; catalog.json, finds models, and maps dependencies</p></li><li><p><strong>Cube.js Schema Generation</strong> &#8211; converts dbt models into Cube.js dimensions and measures</p></li><li><p><strong>BI Tool Sync</strong> &#8211; pushes datasets and metrics to your BI tool with proper metadata</p></li></ol><p>Everything happens automatically for all models&#8212;no manual intervention required.</p><div><hr></div><h3><strong>&#9989; What You&#8217;ve Built</strong></h3><p>In minutes, you now have a <strong>unified semantic layer pipeline</strong>:</p><ol><li><p><strong>Single source of truth</strong>: Metrics defined once in dbt</p></li><li><p><strong>Automatic propagation</strong>: dbt &#8594; Cube.js &#8594; BI tools</p></li><li><p><strong>Cross-tool flexibility</strong>: Works with Superset, Tableau, PowerBI</p></li><li><p><strong>Developer-friendly</strong>: Version-controlled, testable, and documented</p></li></ol><p>Replace sample data with your warehouse and dbt models, and you have a <strong>production-ready semantic layer</strong> &#8211; no metric inconsistencies across tools.</p><h1>The Takeaway</h1><p>This little experiment convinced me that an automated semantic layer doesn&#8217;t have to be complicated. Define metrics once in dbt, let a small tool translate them to Cube.js, and push them into your BI tool of choice &#8211; no more re-implementing the same logic across dashboards.</p><p>If you end up trying out <strong>dbt-to-cube</strong>, I&#8217;d be really interested to hear what works, what breaks, or what you&#8217;d want it to support next. It&#8217;s still a POC, but with feedback from others running into the same problems, it could grow into something genuinely useful for the community.</p><p>Always happy to chat if you&#8217;re experimenting with semantic layers or have ideas on making this whole workflow smoother!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Airflow 3 Plugin Development: DAG Dependencies]]></title><description><![CDATA[A step-by-step tutorial for building your first Airflow 3 plugin]]></description><link>https://newsletter.ponder.co/p/airflow-3-plugin-development-dag</link><guid isPermaLink="false">https://newsletter.ponder.co/p/airflow-3-plugin-development-dag</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 17 Nov 2025 13:01:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iZio!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iZio!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iZio!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iZio!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iZio!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iZio!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iZio!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png" width="344" height="344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:344,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iZio!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iZio!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iZio!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iZio!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ae78474-4dd1-4cc5-8adf-1a964b0b999f_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>At Ponder, we&#8217;ve developed several plugins for Airflow 2.* and recently began migrating them to Airflow 3. Among our most valuable tools are<a href="https://pypi.org/project/airflow-schedule-insights/"> Airflow Schedule Insights</a> and<a href="https://pypi.org/project/airflow-chat/"> Airflow Chat</a>.</p><p>During the migration process, we discovered that Airflow 3.1.1 removed the DAG Dependencies tab that was present in Airflow 2.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7zaS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7zaS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 424w, https://substackcdn.com/image/fetch/$s_!7zaS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 848w, https://substackcdn.com/image/fetch/$s_!7zaS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 1272w, https://substackcdn.com/image/fetch/$s_!7zaS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7zaS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png" width="1456" height="242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:242,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7zaS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 424w, https://substackcdn.com/image/fetch/$s_!7zaS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 848w, https://substackcdn.com/image/fetch/$s_!7zaS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 1272w, https://substackcdn.com/image/fetch/$s_!7zaS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e507d60-dc01-4abd-b336-4f0f56394051_1600x266.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Rather than wait for this feature to return, we saw an opportunity: we could build a plugin to restore this functionality, help the community migrate to Airflow 3 more smoothly, demonstrate how to create plugins for Airflow 3, and even add improvements we found missing in Airflow 2.</p><p>The result is<a href="https://pypi.org/project/airflow-dag-dependencies/"> airflow-dag-dependencies</a>. In this post, we&#8217;ll walk you through how we built it and how it helps us manage our many educational DAGs.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;7a7acfa2-59e5-4bde-84f5-8104a6d0db48&quot;,&quot;duration&quot;:null}"></div><h1>Quick Start</h1><p>To use our plugin, simply install <strong>airflow-dag-dependencies</strong> in your Airflow environment. If you don&#8217;t have an environment set up, clone our<a href="https://github.com/ponderedw/airflow-dag-dependencies"> GitHub repository</a> and run docker compose up.</p><p>After a few minutes, once Airflow is running, navigate to <strong>http://localhost:8080/</strong> and log in with username &#8220;airflow&#8221; and password &#8220;airflow&#8221;. You&#8217;ll find a dozen educational DAGs &#8212; <strong>load_class_attendance</strong>, <strong>load_course_evaluations</strong>, and others.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sSPe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sSPe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 424w, https://substackcdn.com/image/fetch/$s_!sSPe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 848w, https://substackcdn.com/image/fetch/$s_!sSPe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 1272w, https://substackcdn.com/image/fetch/$s_!sSPe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sSPe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png" width="1456" height="941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sSPe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 424w, https://substackcdn.com/image/fetch/$s_!sSPe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 848w, https://substackcdn.com/image/fetch/$s_!sSPe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 1272w, https://substackcdn.com/image/fetch/$s_!sSPe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d5621b9-dba9-4bce-bf0d-7210c35f53b8_1600x1034.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Some are triggered by datasets, others by DAGs, and some run on cron schedules. The challenge? Understanding how they all connect.</p><p>This is where our plugin shines. Navigate to the <strong>Browse</strong> menu and click on <strong>DAG Dependencies</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7NcY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7NcY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 424w, https://substackcdn.com/image/fetch/$s_!7NcY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 848w, https://substackcdn.com/image/fetch/$s_!7NcY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 1272w, https://substackcdn.com/image/fetch/$s_!7NcY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7NcY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png" width="396" height="384.84507042253523" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:552,&quot;width&quot;:568,&quot;resizeWidth&quot;:396,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7NcY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 424w, https://substackcdn.com/image/fetch/$s_!7NcY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 848w, https://substackcdn.com/image/fetch/$s_!7NcY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 1272w, https://substackcdn.com/image/fetch/$s_!7NcY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8435cb-c872-4e60-9990-9f3ae6c7f1c8_568x552.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You&#8217;ll immediately see all the relationships visualized clearly. Notice how <strong>transform_program_effectiveness</strong> has two dependencies: a cron schedule and a dataset trigger.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b0yp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b0yp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 424w, https://substackcdn.com/image/fetch/$s_!b0yp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 848w, https://substackcdn.com/image/fetch/$s_!b0yp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 1272w, https://substackcdn.com/image/fetch/$s_!b0yp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b0yp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png" width="1018" height="554" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:554,&quot;width&quot;:1018,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b0yp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 424w, https://substackcdn.com/image/fetch/$s_!b0yp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 848w, https://substackcdn.com/image/fetch/$s_!b0yp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 1272w, https://substackcdn.com/image/fetch/$s_!b0yp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004344c6-c120-4162-9e92-4af633e8d76c_1018x554.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can also spot that <strong>load_curriculum_catalog</strong> and <strong>load_student_enrollment_data</strong> have no dependencies or schedules&#8212;they won&#8217;t run automatically.</p><p>And you&#8217;ll see that <strong>transform_academic_performance</strong> is triggered by <strong>load_course_evaluations</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CiGW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CiGW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 424w, https://substackcdn.com/image/fetch/$s_!CiGW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 848w, https://substackcdn.com/image/fetch/$s_!CiGW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 1272w, https://substackcdn.com/image/fetch/$s_!CiGW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CiGW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png" width="500" height="491.4841849148419" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:822,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CiGW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 424w, https://substackcdn.com/image/fetch/$s_!CiGW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 848w, https://substackcdn.com/image/fetch/$s_!CiGW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 1272w, https://substackcdn.com/image/fetch/$s_!CiGW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f2f33f-7fdb-4a6a-80cd-9cd266176d23_822x808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Enhanced Filtering</strong></p><p>But we didn&#8217;t stop at recreating Airflow 2&#8217;s functionality&#8212;we added the filtering capabilities we always wished it had. Want to see only the direct downstream dependencies of transform_student_feedback_analysis and all its upstream dependencies? Simply enter +transform_student_feedback_analysis+1 in the search bar. The graph instantly filters to show only the relevant connections.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vxPU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vxPU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 424w, https://substackcdn.com/image/fetch/$s_!vxPU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 848w, https://substackcdn.com/image/fetch/$s_!vxPU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 1272w, https://substackcdn.com/image/fetch/$s_!vxPU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vxPU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png" width="554" height="284.6098901098901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:1456,&quot;resizeWidth&quot;:554,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vxPU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 424w, https://substackcdn.com/image/fetch/$s_!vxPU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 848w, https://substackcdn.com/image/fetch/$s_!vxPU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 1272w, https://substackcdn.com/image/fetch/$s_!vxPU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd09570-edb0-4e89-89f9-cebf1857209f_1600x822.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The search syntax is intuitive: use <strong>+</strong> before a DAG name to include upstream dependencies, after to include downstream, or both for the full picture. Add a number (like +dag_name+2) to control how many levels deep to traverse. You can also search multiple DAGs at once using commas, or use <strong>@exact_name</strong> for precise matching.</p><p>That&#8217;s the power of airflow-dag-dependencies!</p><h1>Building Your First Airflow 3 Plugin: A Technical Deep Dive</h1><p>Now that we&#8217;ve seen the plugin in action, here is how to build it from scratch. This walkthrough highlights the key differences between Airflow 2 and Airflow 3 plugin development and shows how to create your own plugin.</p><h3><strong>Plugin Structure: Airflow 3 vs Airflow 2</strong></h3><p>One of the most significant changes in Airflow 3 is how plugins are structured and registered.</p><h4><strong>Airflow 2 Plugin Structure</strong></h4><pre><code>from airflow.plugins_manager import AirflowPlugin
from flask import Blueprint

from flask_admin import BaseView

class MyAirflow2Plugin(AirflowPlugin):

    name = &#8220;my_plugin&#8221;

    flask_blueprints = [my_blueprint]  # Flask blueprints

    admin_views = [MyAdminView]        # Flask-Admin views

    menu_links = [my_menu_link]        # Menu items</code></pre><h4><strong>Airflow 3 Plugin Structure</strong></h4><pre><code>from airflow.plugins_manager import AirflowPlugin
class MyAirflow3Plugin(AirflowPlugin):

    name = &#8220;my_plugin&#8221;

    fastapi_apps = [my_fastapi_app]     # FastAPI applications

    external_views = [my_external_view] # External view definitions</code></pre><div><hr></div><h3>Key Changes in Airflow 3</h3><p>&#8226; FastAPI replaces Flask for web applications, improving performance, async support, and automatic API documentation.<br> &#8226; External views replace Flask-Admin views, giving more flexible UI integration.<br> &#8226; Menu items are now part of external views rather than separate menu link definitions.</p><div><hr></div><h3><strong>Anatomy of the DAG Dependencies Plugin</strong></h3><h4><strong>Package Structure</strong></h4><p>airflow_dag_dependencies/</p><p>&#9500;&#9472;&#9472; __init__.py</p><p>&#9492;&#9472;&#9472; plugins/</p><p>    &#9500;&#9472;&#9472; __init__.py</p><p>    &#9492;&#9472;&#9472; dags_dependencies_plugin.py</p><div><hr></div><h3><strong>FastAPI Application</strong></h3><pre><code>from fastapi import FastAPI
from fastapi.responses import HTMLResponse

app = FastAPI()

@app.get(&#8221;/&#8221;, response_class=HTMLResponse)

async def dag_dependencies_graph():

    # Return HTML with embedded D3.js visualization

    return html_content

@app.get(&#8221;/api/dag-dependencies&#8221;)

async def get_dag_dependencies():

    # Return JSON data for DAG relationships

    return {&#8221;nodes&#8221;: nodes, &#8220;links&#8221;: links}</code></pre><div><hr></div><h3><strong>Plugin Registration</strong></h3><p><strong>FastAPI app configuration</strong></p><pre><code>fastapi_app_with_metadata = {
    &#8220;app&#8221;: app,
    &#8220;url_prefix&#8221;: &#8220;/dags_dependencies&#8221;,
    &#8220;name&#8221;: &#8220;DAG Dependencies App&#8221;
}</code></pre><p><strong>External view for menu integration</strong></p><pre><code>dag_dependencies_external_view = {
    &#8220;name&#8221;: &#8220;DAG Dependencies&#8221;,
    &#8220;href&#8221;: &#8220;/dags_dependencies/&#8221;,
    &#8220;destination&#8221;: &#8220;nav&#8221;,
    &#8220;category&#8221;: &#8220;browse&#8221;,
    &#8220;url_route&#8221;: &#8220;dag_dependencies&#8221;
}</code></pre><p><strong>Plugin class</strong></p><pre><code>class DagDependenciesPlugin(AirflowPlugin):
    name = &#8220;dags_dependencies_plugin&#8221;
    fastapi_apps = [fastapi_app_with_metadata]
    external_views = [dag_dependencies_external_view]</code></pre><div><hr></div><h3><strong>Data Access: Using DagBag</strong></h3><p>The plugin accesses Airflow&#8217;s DAG metadata through DagBag.</p><pre><code>from airflow.models import DagBag
async def get_dag_dependencies():

    dagbag = DagBag(include_examples=False)

    nodes = []

    for dag_id, dag in dagbag.dags.items():

        nodes.append({

            &#8220;id&#8221;: dag_id,

            &#8220;type&#8221;: determine_dag_type(dag),

            &#8220;schedule&#8221;: get_schedule_info(dag)

        })

    links = analyze_dag_relationships(dagbag)

    return {&#8221;nodes&#8221;: nodes, &#8220;links&#8221;: links}</code></pre><div><hr></div><h3><strong>Frontend Options: Embedded or External</strong></h3><p>Airflow 3 supports multiple frontend approaches:</p><p>&#8226; Embedded HTML/JS (current plugin)<br>&#8226; Standalone React components (future tutorial)<br>&#8226; Serving static assets for more advanced UIs</p><div><hr></div><h3><strong>Packaging for Distribution</strong></h3><p>Example <strong>pyproject.toml</strong> configuration:</p><pre><code>[tool.poetry]
name = &#8220;airflow-dag-dependencies&#8221;

version = &#8220;0.1.1a1&#8221;

description = &#8220;An Apache Airflow plugin that provides interactive visualization of DAG dependencies&#8221;

authors = [&#8221;Ponder&#8221;]

[tool.poetry.dependencies]

python = &#8220;&gt;=3.12, &lt;3.14&#8221;

apache-airflow = &#8220;^3.1.0&#8221;

[tool.poetry.plugins.&#8221;airflow.plugins&#8221;]

dag-dependencies-plugin = &#8220;airflow_dag_dependencies.plugins.dags_dependencies_plugin:DagDependenciesPlugin&#8221;</code></pre><div><hr></div><h3><strong>What&#8217;s Next?</strong></h3><p>The next tutorial will cover:</p><p>&#8226; Building React components that integrate with Airflow&#8217;s UI<br>&#8226; Handling authentication and permissions</p><p>Airflow 3&#8217;s FastAPI foundation opens the door to more capable, modern, and faster plugin development. More powerful integrations are now possible than ever.</p><h1>Conclusion</h1><p>Airflow 3 marks a real shift in how developers extend the platform. FastAPI, external views, and the new plugin model make it possible to build tools that are faster, more flexible, and much easier to maintain. Rebuilding the DAG Dependencies feature gave us a chance to explore these new capabilities in depth and turn a missing Airflow 2 feature into something more capable than before.</p><p>The <strong>airflow-dag-dependencies</strong> plugin restores a critical part of the Airflow UI, adds filtering and search features that help teams understand complex pipelines, and acts as a practical example of how to build real plugins in Airflow 3. If you are migrating from Airflow 2 or planning to develop your own extensions, this approach will give you a strong foundation.</p><p>There is still more room to grow. React-based UI components, richer interactions with Airflow&#8217;s new frontend APIs, and improved permission handling are all on the way. Airflow 3 opened the door to a modern plugin ecosystem, and this is only the start.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Superset MCP: Organizing Dashboard Metadata]]></title><description><![CDATA[How we use Superset MCP to keep complex dashboards structured, searchable, and easy to manage.]]></description><link>https://newsletter.ponder.co/p/superset-mcp-organizing-dashboard</link><guid isPermaLink="false">https://newsletter.ponder.co/p/superset-mcp-organizing-dashboard</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 10 Nov 2025 13:03:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_Kia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Kia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Kia!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_Kia!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_Kia!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_Kia!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Kia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png" width="288" height="288" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:288,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_Kia!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!_Kia!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!_Kia!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!_Kia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1925c1d9-0d96-40eb-ac5f-1300c797a046_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>At <a href="https://ponder.co/">Ponder</a>, we first introduced <a href="https://newsletter.ponder.co/p/next-level-airflow-mcp">Airflow MCP</a> and <a href="https://newsletter.ponder.co/p/airflow-chat-conversational-ai-built">its plugin</a> to make working with DAGs and pipelines smoother. But along the way, we realized something: managing Superset dashboards and their metadata can be just as challenging&#8212;if not more so.</p><p>Take education as an example. Schools and educational institutions manage dozens&#8212;sometimes hundreds&#8212;of dashboards tracking everything from student performance and attendance to resource allocation and budget utilization. Multiple BI developers work constantly on these dashboards, making frequent updates and refinements so stakeholders can access the most current data to improve education and help pupils succeed. The result? A powerful ecosystem of insights&#8212;but also an overwhelming maze of metadata.</p><p>Questions like &#8220;Who changed the attendance dashboard last week?&#8221;, &#8220;Which table powers our graduation rate metrics?&#8221;, or &#8220;What&#8217;s the data source behind this enrollment forecast?&#8221; can quickly become a time sink. And it&#8217;s not just schools&#8212;any organization with a complex BI environment faces the same challenge.</p><p>That&#8217;s why we built <strong>Superset MCP</strong>&#8212;so you can explore and manage Superset metadata through natural language, directly from your Claude code. No need to wrestle with the UI, no need to dig through layers of metadata. Just type your question, and get clear answers in plain language.</p><p>You can check out the project on <a href="https://github.com/ponderedw/superset-mcp">GitHub</a>, pull the image from <a href="https://hub.docker.com/repository/docker/pondered/superset-mcp/general">Docker Hub</a>, or install it from <a href="https://pypi.org/project/superset-mcp-server/">PyPI</a>.</p><h1>Quickstart</h1><h3><strong>1. Run Superset Locally</strong></h3><p>If you don&#8217;t already have a Superset deployment but still want to try out <strong>Superset MCP</strong>, simply clone our GitHub repository and start it with Docker Compose:</p><pre><code>git clone https://github.com/ponderedw/superset-mcp
cd superset-mcp
docker compose up</code></pre><p>Once it&#8217;s up, open your browser and visit:</p><pre><code>http://localhost:8088/</code></pre><p>Login credentials for the example environment:</p><ul><li><p><strong>Username:</strong> superset_admin</p></li><li><p><strong>Password:</strong> superset<br><br></p></li></ul><div><hr></div><h3><strong>2. Using Superset MCP in Claude Desktop</strong></h3><ol><li><p>Open <strong>Claude Desktop</strong>.</p></li><li><p>Navigate to: <strong>Settings &#8594; Developer &#8594; Edit Config</strong>.</p></li><li><p>Add the following entry to your MCP servers:</p></li></ol><pre><code>{
  &#8220;mcpServers&#8221;: {
    &#8220;superset&#8221;: {
      &#8220;args&#8221;: [
        &#8220;run&#8221;,
        &#8220;-i&#8221;,
        &#8220;--rm&#8221;,
        &#8220;-e&#8221;,
        &#8220;SUPERSET_API_URL&#8221;,
        &#8220;-e&#8221;,
        &#8220;SUPERSET_USERNAME&#8221;,
        &#8220;-e&#8221;,
        &#8220;SUPERSET_PASSWORD&#8221;,
        &#8220;pondered/superset-mcp:latest&#8221;
      ],
      &#8220;command&#8221;: &#8220;docker&#8221;,
      &#8220;env&#8221;: {
        &#8220;SUPERSET_API_URL&#8221;: &#8220;http://host.docker.internal:8088&#8221;,
        &#8220;SUPERSET_USERNAME&#8221;: &#8220;superset_admin&#8221;,
        &#8220;SUPERSET_PASSWORD&#8221;: &#8220;superset&#8221;
      }
    }
  }
}
</code></pre><blockquote><p><strong>Note:</strong> The Superset URL and credentials above match our local example environment.</p></blockquote><ol start="4"><li><p>Restart Claude Code.</p></li></ol><div><hr></div><h3><strong>3. Using Superset MCP with LangChain</strong></h3><p>To integrate with LangChain:</p><ol><li><p>Install our PyPI package:</p></li></ol><pre><code>pip install superset-mcp-server</code></pre><p>&#128230;<a href="https://pypi.org/project/superset-mcp-server/"> PyPI link</a></p><ol start="2"><li><p>Add the following MCP server configuration to your tools:</p></li></ol><pre><code>from langchain_mcp_adapters.client import MultiServerMCPClient
import os

mcps = {
    &#8220;SupersetMCP&#8221;: {
        &#8220;command&#8221;: &#8220;python&#8221;,
        &#8220;args&#8221;: [&#8221;-m&#8221;, &#8220;superset_mcp_server.mcp_server&#8221;],
        &#8220;transport&#8221;: &#8220;stdio&#8221;,
        &#8220;env&#8221;: {
            k: v for k, v in {
                &#8220;SUPERSET_API_URL&#8221;: os.getenv(&#8221;SUPERSET_API_URL&#8221;),
                &#8220;SUPERSET_USERNAME&#8221;: os.getenv(&#8221;SUPERSET_USERNAME&#8221;),
                &#8220;SUPERSET_PASSWORD&#8221;: os.getenv(&#8221;SUPERSET_PASSWORD&#8221;),
            }.items() if v is not None
        }
    }
}

client = MultiServerMCPClient(mcps)
mcp_tools = await client.get_tools()</code></pre><p>Now you&#8217;re ready to simply <strong>ask questions about your Superset instance in natural language</strong>&#8212;and let MCP handle the rest!</p><h1>Talking to Superset MCP</h1><p>Let&#8217;s connect to our example Superset deployment and build a simple dashboard using the data automatically ingested into our Postgres database.</p><p>First, we&#8217;ll add a database connection &#8212; specify <strong>&#8220;postgres&#8221;</strong> as both the host and the database name, and use <strong>&#8220;superset&#8221;</strong> for the login and password.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FJtM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FJtM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 424w, https://substackcdn.com/image/fetch/$s_!FJtM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 848w, https://substackcdn.com/image/fetch/$s_!FJtM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 1272w, https://substackcdn.com/image/fetch/$s_!FJtM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FJtM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png" width="360" height="265.6236786469345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d45533d6-8ad7-472d-abf3-f644446122bf_946x698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:698,&quot;width&quot;:946,&quot;resizeWidth&quot;:360,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FJtM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 424w, https://substackcdn.com/image/fetch/$s_!FJtM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 848w, https://substackcdn.com/image/fetch/$s_!FJtM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 1272w, https://substackcdn.com/image/fetch/$s_!FJtM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd45533d6-8ad7-472d-abf3-f644446122bf_946x698.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Once connected, we can create a few simple charts from the database tables and organize them into an <strong>E-commerce Performance Dashboard</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ichW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ichW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 424w, https://substackcdn.com/image/fetch/$s_!ichW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 848w, https://substackcdn.com/image/fetch/$s_!ichW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 1272w, https://substackcdn.com/image/fetch/$s_!ichW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ichW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png" width="190" height="329.82683982683983" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:802,&quot;width&quot;:462,&quot;resizeWidth&quot;:190,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ichW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 424w, https://substackcdn.com/image/fetch/$s_!ichW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 848w, https://substackcdn.com/image/fetch/$s_!ichW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 1272w, https://substackcdn.com/image/fetch/$s_!ichW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F703c9ae9-4fb4-4132-b76b-188de100a10a_462x802.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wi0c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wi0c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 424w, https://substackcdn.com/image/fetch/$s_!wi0c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 848w, https://substackcdn.com/image/fetch/$s_!wi0c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 1272w, https://substackcdn.com/image/fetch/$s_!wi0c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wi0c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png" width="1456" height="632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:632,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wi0c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 424w, https://substackcdn.com/image/fetch/$s_!wi0c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 848w, https://substackcdn.com/image/fetch/$s_!wi0c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 1272w, https://substackcdn.com/image/fetch/$s_!wi0c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf93c55d-d2c5-44a2-885e-e59e4b3615af_1600x694.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Finally, don&#8217;t forget to <strong>publish</strong> your dashboard so it&#8217;s ready to use!<br><br></p><p>You can explore all the available tools in Claude Desktop &#8212; and more will be coming soon.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-cRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-cRC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 424w, https://substackcdn.com/image/fetch/$s_!-cRC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 848w, https://substackcdn.com/image/fetch/$s_!-cRC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 1272w, https://substackcdn.com/image/fetch/$s_!-cRC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-cRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png" width="326" height="259.1901234567901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:644,&quot;width&quot;:810,&quot;resizeWidth&quot;:326,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-cRC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 424w, https://substackcdn.com/image/fetch/$s_!-cRC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 848w, https://substackcdn.com/image/fetch/$s_!-cRC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 1272w, https://substackcdn.com/image/fetch/$s_!-cRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73c25ea3-e699-4c2b-b9be-4bf48534ccf6_810x644.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now, let&#8217;s start asking some interesting questions:</p><ul><li><p><strong>How many dashboards and charts do we have?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ibZ3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ibZ3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 424w, https://substackcdn.com/image/fetch/$s_!ibZ3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 848w, https://substackcdn.com/image/fetch/$s_!ibZ3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 1272w, https://substackcdn.com/image/fetch/$s_!ibZ3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ibZ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png" width="468" height="276.42857142857144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:860,&quot;width&quot;:1456,&quot;resizeWidth&quot;:468,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ibZ3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 424w, https://substackcdn.com/image/fetch/$s_!ibZ3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 848w, https://substackcdn.com/image/fetch/$s_!ibZ3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 1272w, https://substackcdn.com/image/fetch/$s_!ibZ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba11f50f-9ba0-4678-81a9-c57e4d970d3a_1600x945.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N7GM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N7GM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 424w, https://substackcdn.com/image/fetch/$s_!N7GM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 848w, https://substackcdn.com/image/fetch/$s_!N7GM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 1272w, https://substackcdn.com/image/fetch/$s_!N7GM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N7GM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png" width="512" height="332.3076923076923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:945,&quot;width&quot;:1456,&quot;resizeWidth&quot;:512,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!N7GM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 424w, https://substackcdn.com/image/fetch/$s_!N7GM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 848w, https://substackcdn.com/image/fetch/$s_!N7GM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 1272w, https://substackcdn.com/image/fetch/$s_!N7GM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0f47fd-d1e2-4aa7-b91c-943cacd3a319_1600x1038.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Great! We get the exact number of dashboards and charts in our environment.</p></li><li><p><strong>Who are the most active users?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mbTf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mbTf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 424w, https://substackcdn.com/image/fetch/$s_!mbTf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 848w, https://substackcdn.com/image/fetch/$s_!mbTf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 1272w, https://substackcdn.com/image/fetch/$s_!mbTf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mbTf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png" width="510" height="366.3873626373626" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1046,&quot;width&quot;:1456,&quot;resizeWidth&quot;:510,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mbTf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 424w, https://substackcdn.com/image/fetch/$s_!mbTf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 848w, https://substackcdn.com/image/fetch/$s_!mbTf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 1272w, https://substackcdn.com/image/fetch/$s_!mbTf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9485d2e0-2310-4d23-9b01-f3e2cf5d37b8_1600x1149.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rkiO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rkiO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 424w, https://substackcdn.com/image/fetch/$s_!rkiO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 848w, https://substackcdn.com/image/fetch/$s_!rkiO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!rkiO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rkiO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png" width="340" height="380.68579426172147" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:1429,&quot;resizeWidth&quot;:340,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!rkiO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 424w, https://substackcdn.com/image/fetch/$s_!rkiO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 848w, https://substackcdn.com/image/fetch/$s_!rkiO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!rkiO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc307f670-4122-4d83-a95c-eb42ddb6ffb2_1429x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br>Perfect &#8212; not only do we see the top active user, but we also get an <em>Activity Timeline</em>, which makes it much easier to understand what&#8217;s happening in our cluster.</p></li></ul><ul><li><p><strong>What is the source table for Customer-Product Network?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rO2J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rO2J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 424w, https://substackcdn.com/image/fetch/$s_!rO2J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 848w, https://substackcdn.com/image/fetch/$s_!rO2J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 1272w, https://substackcdn.com/image/fetch/$s_!rO2J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rO2J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png" width="450" height="343.68131868131866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1112,&quot;width&quot;:1456,&quot;resizeWidth&quot;:450,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!rO2J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 424w, https://substackcdn.com/image/fetch/$s_!rO2J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 848w, https://substackcdn.com/image/fetch/$s_!rO2J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 1272w, https://substackcdn.com/image/fetch/$s_!rO2J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b3866b5-24b1-4a9c-88e4-67ce2edc1b5c_1600x1222.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> Excellent &#8212; we now have the precise database object name.</p></li></ul><ul><li><p><strong>When was the </strong><em><strong>Revenue by Country</strong></em><strong> chart last changed, and by whom?</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zaif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zaif!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 424w, https://substackcdn.com/image/fetch/$s_!zaif!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 848w, https://substackcdn.com/image/fetch/$s_!zaif!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 1272w, https://substackcdn.com/image/fetch/$s_!zaif!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zaif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png" width="532" height="431.15384615384613" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1180,&quot;width&quot;:1456,&quot;resizeWidth&quot;:532,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zaif!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 424w, https://substackcdn.com/image/fetch/$s_!zaif!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 848w, https://substackcdn.com/image/fetch/$s_!zaif!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 1272w, https://substackcdn.com/image/fetch/$s_!zaif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb272e8f-6523-4fcc-aa44-6f2a6ce6e496_1600x1297.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Spot on &#8212; we&#8217;ve got the correct answer here as well.</p></li></ul><p>Pretty cool, right? Keep exploring and help us uncover even more capabilities of Superset MCP!</p><h1>Conclusion &#8212; Managing Metadata the Smart Way</h1><p>Superset MCP turns the often painful task of navigating dashboard metadata into a fast, intuitive conversation. Whether you&#8217;re an educational administrator tracking changes to student performance dashboards, a data analyst identifying which tables feed into critical reports, or a team lead trying to understand who&#8217;s been most active in your BI environment&#8212;you can now skip the clicks, menus, and manual searches. Just ask in plain language, and get precise, actionable answers.</p><p>In education settings where BI teams constantly update dashboards to provide stakeholders with real-time insights for improving outcomes, Superset MCP becomes invaluable. But the benefits extend far beyond schools&#8212;any business with complex dashboard environments, whether in healthcare, finance, retail, or manufacturing, can leverage this natural language interface to cut through the metadata complexity.</p><p>Because it works entirely through natural language, you can easily delegate these tasks to <strong>analysts, project managers, principals, department heads, or any non-technical users</strong>&#8212;empowering more people in your team to get the information they need without relying on developers or admins.</p><p>We&#8217;re excited to see how the community will use Superset MCP&#8212;and we&#8217;d love your feedback. Try it out, share your ideas, and help us shape the next set of capabilities.</p><p>&#128279; <strong>Resources:</strong></p><ul><li><p><a href="https://github.com/hipposys-ltd/superset-mcp">GitHub Repository</a></p></li><li><p><a href="https://hub.docker.com/repository/docker/pondered/superset-mcp/general">Docker Hub Image</a></p></li><li><p><a href="https://pypi.org/project/superset-mcp-server/">PyPI Package</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Graph-Powered AI Chat for dbt]]></title><description><![CDATA[Using FalkorDB & Neo4j as a Graph DB]]></description><link>https://newsletter.ponder.co/p/graph-powered-ai-chat-for-dbt</link><guid isPermaLink="false">https://newsletter.ponder.co/p/graph-powered-ai-chat-for-dbt</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Mon, 03 Nov 2025 13:21:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UPUJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UPUJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UPUJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UPUJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UPUJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UPUJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UPUJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png" width="488" height="325.44505494505495" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:488,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!UPUJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!UPUJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!UPUJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!UPUJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e57aca-08e9-4945-a768-23ad7c8f78c8_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Introduction</strong></h2><p>In education data teams, our analytics models often grow organically alongside organizational needs. As school networks expand their data infrastructure&#8212;adding new student information systems, assessment platforms, and operational tools&#8212;their dbt projects can become increasingly complex. What starts as a clean set of staging models quickly evolves into an intricate web of dependencies that becomes difficult to navigate and maintain.</p><p>In previous blog posts&#8212;<a href="https://newsletter.ponder.co/publish/posts/detail/162414803?referrer=%2Fpublish%2Fposts">dbt-to-English</a> and <a href="https://newsletter.ponder.co/p/towards-english-to-sql-that-actually">English-to-SQL</a>&#8212;we demonstrated how LLMs can assist with understanding and generating dbt metadata. However, these tools fall short when it comes to answering complex questions about dbt&#8217;s project-wide structure and dependencies. For instance, what is the most widely reused source across models (recursively)? Or, how many seed datasets are used by models materialized as tables?</p><p>We&#8217;ve seen this challenge firsthand. At one school network, their analytics catalog grew from a handful of models serving basic enrollment reporting to hundreds of interconnected models supporting everything from attendance analytics to intervention tracking to college persistence dashboards. This organic growth led to inadvertent circular dependencies that made it increasingly difficult to refactor models or optimize their orchestration. The team needed a way to visualize and understand these dependencies before they could untangle them.</p><p>That&#8217;s when we had a realization: dbt&#8217;s structure is naturally graph-shaped, making it an excellent fit for graph databases. This inspired us to launch a new project&#8212;<a href="https://github.com/ponderedw/dbt-kg">dbt-kg</a>&#8212;which shows how to upload dbt metadata (from manifest.json and catalog.json) into a graph database and leverage it in an AI-powered chat. While our demo uses <a href="https://www.falkordb.com/">FalkorDB</a>, the project is also compatible with Neo4j&#8212;just update the configuration settings accordingly.</p><h2><strong>Quickstart</strong></h2><p>To get started, clone our GitHub repository:<br><a href="https://github.com/hipposys-ltd/dbt-kg"> https://github.com/ponderedw/dbt-kg</a></p><p>Next, copy the environment template and configure it:</p><pre><code>cp template.env .env</code></pre><p>In your <strong>.env</strong> file, set the <strong>LLM_MODEL_ID</strong> according to the provider you want to use:</p><pre><code>LLM_MODEL_ID=&#8217;bedrock:...&#8217;
LLM_MODEL_ID=&#8217;anthropic:...&#8217;
LLM_MODEL_ID=&#8217;openai:...&#8217;</code></pre><blockquote><p>The prefix (bedrock, anthropic, or openai) determines which LLM provider will be used.<br> Be sure to include the appropriate credentials as well:</p></blockquote><ul><li><p><strong>AWS_SECRET_ACCESS_KEY</strong> for Bedrock</p></li><li><p><strong>ANTHROPIC_API_KEY</strong> for Anthropic</p></li><li><p><strong>OPENAI_API_KEY</strong> for OpenAI</p></li></ul><p>Then, choose your graph database by setting the <strong>GRAPH_DB</strong> variable. This can be either <strong>falkordb</strong> or <strong>neo4j</strong>. For this demo, we&#8217;ll be using <strong>FalkorDB</strong>.</p><p>If your database requires authentication, provide values for <strong>GRAPH_USER</strong> and <strong>GRAPH_PASSWORD</strong>.</p><blockquote><p>&#9888;&#65039; Our default FalkorDB setup does <strong>not</strong> use authentication, so these can remain commented out. If you&#8217;re using our default Neo4j setup, uncomment those variables and set the default credentials accordingly.</p></blockquote><p>Now, run the setup:</p><pre><code>just all</code></pre><p>Once everything is set up, open your browser and go to:</p><pre><code> http://localhost:8501/</code></pre><p>Navigate to the <strong>&#8220;Load DBT Manifest&#8221;</strong> page from the sidebar. You&#8217;ll be prompted to upload your <strong>manifest.json</strong> and <strong>catalog.json</strong> files. If you have your own, upload them; otherwise, use the sample files located in <strong>DbtExampleProject/target</strong> within the repo.</p><p>Upon successful upload, you&#8217;ll see a confirmation message.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M1bs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M1bs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 424w, https://substackcdn.com/image/fetch/$s_!M1bs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 848w, https://substackcdn.com/image/fetch/$s_!M1bs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!M1bs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M1bs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png" width="1456" height="992" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:992,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M1bs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 424w, https://substackcdn.com/image/fetch/$s_!M1bs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 848w, https://substackcdn.com/image/fetch/$s_!M1bs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 1272w, https://substackcdn.com/image/fetch/$s_!M1bs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5b9d97d-6f63-469b-a9dd-18481759d787_1476x1006.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Finally, open your graph database UI at:</p><pre><code> http://localhost:3000/</code></pre><p>Run the following query to view your dbt Knowledge Graph:</p><pre><code>MATCH (a)-[b]-(c)
RETURN a, b, c</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2kvb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2kvb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 424w, https://substackcdn.com/image/fetch/$s_!2kvb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 848w, https://substackcdn.com/image/fetch/$s_!2kvb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 1272w, https://substackcdn.com/image/fetch/$s_!2kvb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2kvb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png" width="1456" height="635" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:635,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2kvb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 424w, https://substackcdn.com/image/fetch/$s_!2kvb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 848w, https://substackcdn.com/image/fetch/$s_!2kvb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 1272w, https://substackcdn.com/image/fetch/$s_!2kvb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ae7ddb8-42cd-4c54-9573-f3013653759a_1600x698.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Congratulations! Your <strong>dbt Knowledge Graph</strong> is now up and running. &#127881;</p><h2><strong>Interacting with Your dbt Graph via Chat</strong></h2><p>Let&#8217;s return to</p><pre><code> http://localhost:8501/</code></pre><p>&#8212;this time, we&#8217;ll stay on the <strong>Main</strong> page and begin chatting with our dbt Knowledge Graph.</p><p>We&#8217;ll start by asking a high-level question about source table usage:</p><blockquote><p><strong>Prompt:<br></strong> &#8220;Can you find the source tables that are used by the most models, including indirect dependencies through the entire dependency chain?&#8221;<br></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u7Me!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u7Me!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 424w, https://substackcdn.com/image/fetch/$s_!u7Me!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 848w, https://substackcdn.com/image/fetch/$s_!u7Me!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 1272w, https://substackcdn.com/image/fetch/$s_!u7Me!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u7Me!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png" width="1438" height="204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:204,&quot;width&quot;:1438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u7Me!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 424w, https://substackcdn.com/image/fetch/$s_!u7Me!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 848w, https://substackcdn.com/image/fetch/$s_!u7Me!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 1272w, https://substackcdn.com/image/fetch/$s_!u7Me!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37ed9b57-4a06-4875-8cb6-79090daba57f_1438x204.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q0ja!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q0ja!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 424w, https://substackcdn.com/image/fetch/$s_!Q0ja!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 848w, https://substackcdn.com/image/fetch/$s_!Q0ja!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0ja!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q0ja!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png" width="1394" height="736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/192957dd-451a-4941-adba-fad1f1705660_1394x736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:1394,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q0ja!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 424w, https://substackcdn.com/image/fetch/$s_!Q0ja!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 848w, https://substackcdn.com/image/fetch/$s_!Q0ja!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0ja!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F192957dd-451a-4941-adba-fad1f1705660_1394x736.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cdXH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cdXH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 424w, https://substackcdn.com/image/fetch/$s_!cdXH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 848w, https://substackcdn.com/image/fetch/$s_!cdXH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 1272w, https://substackcdn.com/image/fetch/$s_!cdXH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cdXH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png" width="1394" height="434" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:434,&quot;width&quot;:1394,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cdXH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 424w, https://substackcdn.com/image/fetch/$s_!cdXH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 848w, https://substackcdn.com/image/fetch/$s_!cdXH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 1272w, https://substackcdn.com/image/fetch/$s_!cdXH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59e19d-98e6-4661-b622-9caa2af27c0a_1394x434.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The system correctly identifies both source tables from our example project and ranks them by usage in descending order. Perfect!</p><p>Next, let&#8217;s try something more challenging:</p><blockquote><p><strong>Prompt:<br></strong> &#8220;Please identify the model with the highest number of dependent models, including transitive dependencies. This model must be materialized as a table. Return all the information you have about this table.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s42I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s42I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 424w, https://substackcdn.com/image/fetch/$s_!s42I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 848w, https://substackcdn.com/image/fetch/$s_!s42I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 1272w, https://substackcdn.com/image/fetch/$s_!s42I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s42I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png" width="1394" height="216" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:216,&quot;width&quot;:1394,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s42I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 424w, https://substackcdn.com/image/fetch/$s_!s42I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 848w, https://substackcdn.com/image/fetch/$s_!s42I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 1272w, https://substackcdn.com/image/fetch/$s_!s42I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b8ec2c-efd7-47e5-bb1d-b7e87e4bf894_1394x216.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This is tricky&#8212;because in our project, there are no models materialized as <strong>table</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SfO7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SfO7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 424w, https://substackcdn.com/image/fetch/$s_!SfO7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 848w, https://substackcdn.com/image/fetch/$s_!SfO7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 1272w, https://substackcdn.com/image/fetch/$s_!SfO7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SfO7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png" width="556" height="362.95552367288377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1394,&quot;resizeWidth&quot;:556,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SfO7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 424w, https://substackcdn.com/image/fetch/$s_!SfO7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 848w, https://substackcdn.com/image/fetch/$s_!SfO7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 1272w, https://substackcdn.com/image/fetch/$s_!SfO7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5b49d5-5c54-4218-87cf-cd298c34513f_1394x910.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AgnI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AgnI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 424w, https://substackcdn.com/image/fetch/$s_!AgnI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 848w, https://substackcdn.com/image/fetch/$s_!AgnI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 1272w, https://substackcdn.com/image/fetch/$s_!AgnI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AgnI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png" width="546" height="405.77905308464847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1036,&quot;width&quot;:1394,&quot;resizeWidth&quot;:546,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AgnI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 424w, https://substackcdn.com/image/fetch/$s_!AgnI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 848w, https://substackcdn.com/image/fetch/$s_!AgnI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 1272w, https://substackcdn.com/image/fetch/$s_!AgnI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bc101e5-d2b9-49b6-8bf9-e4eef3d9c2a9_1394x1036.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Impressively, the LLM handles this gracefully by identifying the closest match: a view instead, and clearly stating the limitation. That&#8217;s a solid response.</p><p>Let&#8217;s follow up with another prompt to dig deeper:</p><blockquote><p><strong>Prompt:<br></strong> &#8220;Can you also list indirect dependent models for stg_orders?&#8221;<br></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b2kn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b2kn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 424w, https://substackcdn.com/image/fetch/$s_!b2kn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 848w, https://substackcdn.com/image/fetch/$s_!b2kn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 1272w, https://substackcdn.com/image/fetch/$s_!b2kn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b2kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png" width="424" height="273.2050209205021" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:616,&quot;width&quot;:956,&quot;resizeWidth&quot;:424,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b2kn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 424w, https://substackcdn.com/image/fetch/$s_!b2kn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 848w, https://substackcdn.com/image/fetch/$s_!b2kn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 1272w, https://substackcdn.com/image/fetch/$s_!b2kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9cb4ff3-4264-437b-8659-4a277ea76157_956x616.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now we&#8217;re talking. The model returns the full dependency chain. Mission accomplished.</p><div><hr></div><h3><strong>From One Monolithic Job to Smart Job Grouping</strong></h3><p>In many real-world workflows, especially when integrating with orchestrators like <strong>Airflow</strong>, we don&#8217;t want to run the entire dbt graph as a single job. Instead, we aim to break it into smaller, manageable jobs (DAGs) that can trigger downstream non-dbt processes as early as possible. But there&#8217;s a catch: circular dependencies often make this kind of separation complex and error-prone.</p><p>Let&#8217;s ask the LLM to help with that:</p><blockquote><p><strong>Prompt:<br></strong> &#8220;Can you analyze our dbt dependency graph and create a job separation strategy? I need to group models, seeds, and snapshots into separate jobs that eliminate circular dependencies while defining clear inter-job dependencies.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FSI1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FSI1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 424w, https://substackcdn.com/image/fetch/$s_!FSI1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 848w, https://substackcdn.com/image/fetch/$s_!FSI1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 1272w, https://substackcdn.com/image/fetch/$s_!FSI1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FSI1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png" width="1338" height="1258" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1258,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FSI1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 424w, https://substackcdn.com/image/fetch/$s_!FSI1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 848w, https://substackcdn.com/image/fetch/$s_!FSI1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 1272w, https://substackcdn.com/image/fetch/$s_!FSI1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc75ab990-a97c-46b4-ac29-23c18c305fd1_1338x1258.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And it delivers! The model intelligently separates our graph into four distinct jobs and describes the cross-job dependencies clearly.</p><h2>Summary</h2><p>By leveraging the graph-shaped nature of dbt projects, the dbt-kg initiative demonstrates how graph databases like FalkorDB and Neo4j can supercharge the way we interact with dbt metadata. With an intuitive setup, seamless integration of LLMs, and a simple web-based interface, users can upload their dbt artifacts and start asking complex, project-wide questions in natural language.</p><p>For education data teams in particular, this approach addresses a common challenge: as schools and networks scale their analytics capabilities, their dbt projects naturally grow more complex. The AI-powered chat not only handles nuanced prompts about source usage, dependencies, and materializations but also assists in advanced tasks like intelligent job grouping to optimize orchestration workflows&#8212;exactly the kind of refactoring that the school network mentioned earlier needed to break apart their circular dependencies and create a more maintainable structure.</p><p>Whether you&#8217;re supporting a single school, a district, or a multi-state network, transforming static metadata into a dynamic, queryable knowledge graph makes data engineering more intelligent, conversational, and manageable. This is especially valuable in education, where data teams often wear multiple hats and need efficient ways to understand and maintain increasingly sophisticated analytics infrastructure.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data &amp; AI Engineering @ Ponder! Subscribe for free to receive new posts!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Observability for LangChain with Langfuse]]></title><description><![CDATA[How Airflow-Chat Makes It Easy]]></description><link>https://newsletter.ponder.co/p/observability-for-langchain-with</link><guid isPermaLink="false">https://newsletter.ponder.co/p/observability-for-langchain-with</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Tue, 05 Aug 2025 09:50:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DFwK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DFwK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DFwK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!DFwK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!DFwK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!DFwK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DFwK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png" width="219" height="328.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:219,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!DFwK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!DFwK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!DFwK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!DFwK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d66dd8b-caae-43d6-b222-dea5c3138ecb_1024x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2><p>After recently launching our new library, <strong>airflow-chat</strong>&#8212;a plugin that enables seamless LLM chat interactions within your Airflow instance via our <strong><a href="https://newsletter.hipposys.ai/publish/posts/detail/162028958?referrer=%2Fpublish%2Fposts">Airflow MCP</a></strong>&#8212;we quickly turned our attention to an important question: <em>how do we effectively observe and log these conversations?</em></p><p>Imagine a scenario where a user triggers an unintended action due to safe mode being disabled, leading to a production error. How do you trace the issue? Who initiated the command? What was the exact prompt that caused the failure? Or more generally&#8212;how do you evaluate LLM interactions over time?</p><p>To address these questions, we turned to <strong>Langfuse</strong>, an elegant open-source tool purpose-built for developing, monitoring, evaluating, and debugging LLM applications. In this blog post, we&#8217;ll walk you through integrating Langfuse into your LangChain workflow&#8212;and specifically, how we&#8217;ve already done this within the airflow-chat plugin. You can follow along using our repo:<a href="https://github.com/ponderedw/airflow-mcp-plugins"> https://github.com/ponderedw/airflow-mcp-plugins</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Quickstart</h2><p>Let&#8217;s walk through a quick setup to see how Langfuse integrates with the airflow-chat plugin.</p><h3><strong>1. Clone the Repository and Set Up Locally</strong></h3><p>Start by cloning our GitHub repository:</p><pre><code>git clone https://github.com/ponderedw/airflow-mcp-plugins</code></pre><p>Then follow the setup steps outlined in our airflow-chat blog post to get the plugin running in your local environment.</p><blockquote><p><strong>Note:</strong> Running both Airflow and Langfuse locally can be resource-intensive. If your machine starts lagging, consider connecting to pre-deployed instances of Airflow and Langfuse for a smoother experience.</p></blockquote><p>To launch both locally, run:</p><pre><code>just airflow_langfuse</code></pre><p>Once the containers are up, head to</p><pre><code> http://localhost:3000/</code></pre><p> and sign up for a new Langfuse account.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wXD1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wXD1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 424w, https://substackcdn.com/image/fetch/$s_!wXD1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 848w, https://substackcdn.com/image/fetch/$s_!wXD1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!wXD1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wXD1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png" width="276" height="348.12345679012344" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1226,&quot;width&quot;:972,&quot;resizeWidth&quot;:276,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wXD1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 424w, https://substackcdn.com/image/fetch/$s_!wXD1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 848w, https://substackcdn.com/image/fetch/$s_!wXD1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 1272w, https://substackcdn.com/image/fetch/$s_!wXD1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f017785-87c5-4422-a813-f9424cd8cf39_972x1226.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>2. Create an Organization, Project, and API Key</strong></h3><p>After signing up:</p><ul><li><p>Create a new <strong>Organization</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GXb5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GXb5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 424w, https://substackcdn.com/image/fetch/$s_!GXb5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 848w, https://substackcdn.com/image/fetch/$s_!GXb5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 1272w, https://substackcdn.com/image/fetch/$s_!GXb5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GXb5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png" width="1456" height="284" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:284,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GXb5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 424w, https://substackcdn.com/image/fetch/$s_!GXb5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 848w, https://substackcdn.com/image/fetch/$s_!GXb5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 1272w, https://substackcdn.com/image/fetch/$s_!GXb5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815a6747-89ac-4b5a-ad46-7496bb6b1d3b_1600x312.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p>Create a <strong>Project</strong> under that organization</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y-RR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y-RR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 424w, https://substackcdn.com/image/fetch/$s_!y-RR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 848w, https://substackcdn.com/image/fetch/$s_!y-RR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 1272w, https://substackcdn.com/image/fetch/$s_!y-RR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y-RR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png" width="1456" height="323" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:323,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y-RR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 424w, https://substackcdn.com/image/fetch/$s_!y-RR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 848w, https://substackcdn.com/image/fetch/$s_!y-RR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 1272w, https://substackcdn.com/image/fetch/$s_!y-RR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87fa7e-7581-44ed-8b01-8c6b1414d2eb_1600x355.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p>Generate an <strong>API key</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3eDF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3eDF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 424w, https://substackcdn.com/image/fetch/$s_!3eDF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 848w, https://substackcdn.com/image/fetch/$s_!3eDF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 1272w, https://substackcdn.com/image/fetch/$s_!3eDF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3eDF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png" width="1456" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3eDF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 424w, https://substackcdn.com/image/fetch/$s_!3eDF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 848w, https://substackcdn.com/image/fetch/$s_!3eDF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 1272w, https://substackcdn.com/image/fetch/$s_!3eDF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4e22114-f561-45f9-a24c-f1da914c23bf_1600x357.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K3iu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K3iu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 424w, https://substackcdn.com/image/fetch/$s_!K3iu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 848w, https://substackcdn.com/image/fetch/$s_!K3iu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 1272w, https://substackcdn.com/image/fetch/$s_!K3iu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K3iu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png" width="682" height="163.0054945054945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1456,&quot;resizeWidth&quot;:682,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K3iu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 424w, https://substackcdn.com/image/fetch/$s_!K3iu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 848w, https://substackcdn.com/image/fetch/$s_!K3iu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 1272w, https://substackcdn.com/image/fetch/$s_!K3iu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f8cb82a-aa6d-4077-9e1a-afa74e544dd4_1600x382.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Copy the credentials and add them to your Airflow environment variables. If you&#8217;re using our GitHub setup, you can simply paste them into the airflow-plugin.env file:</p><pre><code>LANGFUSE_SECRET_KEY=sk-lf-053f1073-789b-4705-8daa-23b825829d3d
LANGFUSE_PUBLIC_KEY=pk-lf-25851900-8b27-45f7-b7a0-617321e988cf
LANGFUSE_HOST=http://host.docker.internal:3000</code></pre><h3><strong>3. Restart and Explore</strong></h3><p>Restart your environment:</p><pre><code>just airflow_langfuse</code></pre><p>Now, navigate to the Airflow UI, interact with the airflow-chat plugin, and ask a few test questions.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rFMc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rFMc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 424w, https://substackcdn.com/image/fetch/$s_!rFMc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 848w, https://substackcdn.com/image/fetch/$s_!rFMc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 1272w, https://substackcdn.com/image/fetch/$s_!rFMc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rFMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png" width="520" height="163.92857142857142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:1456,&quot;resizeWidth&quot;:520,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rFMc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 424w, https://substackcdn.com/image/fetch/$s_!rFMc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 848w, https://substackcdn.com/image/fetch/$s_!rFMc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 1272w, https://substackcdn.com/image/fetch/$s_!rFMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff015a034-464b-40b4-b1fa-16e36cc89428_1600x504.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Then head over to the Langfuse dashboard. Open the <strong>"Tracing &#8594; Traces"</strong> tab:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RvD5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RvD5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 424w, https://substackcdn.com/image/fetch/$s_!RvD5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 848w, https://substackcdn.com/image/fetch/$s_!RvD5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 1272w, https://substackcdn.com/image/fetch/$s_!RvD5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RvD5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png" width="528" height="451.7586206896552" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/619f9203-3787-4435-91d0-584a4de32d84_928x794.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:928,&quot;resizeWidth&quot;:528,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RvD5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 424w, https://substackcdn.com/image/fetch/$s_!RvD5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 848w, https://substackcdn.com/image/fetch/$s_!RvD5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 1272w, https://substackcdn.com/image/fetch/$s_!RvD5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619f9203-3787-4435-91d0-584a4de32d84_928x794.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Voil&#224;&#8212;your entire chat session is logged, complete with trace-level details.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AxEF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AxEF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 424w, https://substackcdn.com/image/fetch/$s_!AxEF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 848w, https://substackcdn.com/image/fetch/$s_!AxEF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 1272w, https://substackcdn.com/image/fetch/$s_!AxEF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AxEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png" width="728" height="78.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:157,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AxEF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 424w, https://substackcdn.com/image/fetch/$s_!AxEF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 848w, https://substackcdn.com/image/fetch/$s_!AxEF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 1272w, https://substackcdn.com/image/fetch/$s_!AxEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a83de4d-b71d-48d3-a95d-185787ca4bfa_1600x173.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FBSj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FBSj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 424w, https://substackcdn.com/image/fetch/$s_!FBSj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 848w, https://substackcdn.com/image/fetch/$s_!FBSj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 1272w, https://substackcdn.com/image/fetch/$s_!FBSj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FBSj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png" width="1456" height="1055" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1055,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FBSj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 424w, https://substackcdn.com/image/fetch/$s_!FBSj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 848w, https://substackcdn.com/image/fetch/$s_!FBSj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 1272w, https://substackcdn.com/image/fetch/$s_!FBSj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5396f82e-29af-4e5b-b52f-4a1aaac0f5c2_1600x1159.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Just like that, observability is in place!</p><h2>Going Further with Langfuse</h2><p>Langfuse offers much more than just trace logging&#8212;it provides powerful tools to evaluate and improve your LLM application.</p><p><strong>Users<br></strong> Navigate to the <strong>Users</strong> tab to see a list of application users. You&#8217;ll notice a user named "airflow"&#8212;this represents interactions made through the airflow-chat plugin. Click on it to view all associated sessions. This is a great way to monitor how your team is using the plugin over time.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wZRw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wZRw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 424w, https://substackcdn.com/image/fetch/$s_!wZRw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 848w, https://substackcdn.com/image/fetch/$s_!wZRw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 1272w, https://substackcdn.com/image/fetch/$s_!wZRw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wZRw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png" width="556" height="149.94169096209913" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:1372,&quot;resizeWidth&quot;:556,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wZRw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 424w, https://substackcdn.com/image/fetch/$s_!wZRw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 848w, https://substackcdn.com/image/fetch/$s_!wZRw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 1272w, https://substackcdn.com/image/fetch/$s_!wZRw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ac8d50-69e1-40bb-8338-f8d93a074e64_1372x370.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Cost Tracking<br></strong> Langfuse makes it easy to track costs. In the <strong>Traces</strong> tab, you&#8217;ll see session-level costs, while the <strong>Home</strong> tab gives you an overview of model-level expenses. For deeper insights, head over to the <strong>Dashboards</strong> tab and explore the built-in <strong>Langfuse Cost Dashboard</strong>, or create a custom dashboard with your own cost graphs.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sCXZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sCXZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 424w, https://substackcdn.com/image/fetch/$s_!sCXZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 848w, https://substackcdn.com/image/fetch/$s_!sCXZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 1272w, https://substackcdn.com/image/fetch/$s_!sCXZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sCXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png" width="494" height="236.4142857142857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:536,&quot;width&quot;:1120,&quot;resizeWidth&quot;:494,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sCXZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 424w, https://substackcdn.com/image/fetch/$s_!sCXZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 848w, https://substackcdn.com/image/fetch/$s_!sCXZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 1272w, https://substackcdn.com/image/fetch/$s_!sCXZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6af0ac4e-d597-472a-be65-484024252bc5_1120x536.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ee38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ee38!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 424w, https://substackcdn.com/image/fetch/$s_!Ee38!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 848w, https://substackcdn.com/image/fetch/$s_!Ee38!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 1272w, https://substackcdn.com/image/fetch/$s_!Ee38!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ee38!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png" width="1456" height="481" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:481,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ee38!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 424w, https://substackcdn.com/image/fetch/$s_!Ee38!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 848w, https://substackcdn.com/image/fetch/$s_!Ee38!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 1272w, https://substackcdn.com/image/fetch/$s_!Ee38!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b440aba-375f-47c5-80c3-6a9d3f0407b9_1600x529.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you suspect that token prices are incorrect, go to <strong>Settings &#8594; Models</strong>, and either &#8220;Add model definition&#8221; or &#8220;Clone&#8221; an existing one to customize pricing.</p><p><strong>Evaluations<br></strong> Langfuse supports two types of evaluations: <strong>Human Annotation</strong> and <strong>LLM-as-a-Judge</strong>.</p><ul><li><p><strong>Human Annotation<br></strong> Go to the <strong>Scores</strong> tab and create a new score. Next, create an <strong>Annotation Queue</strong>, and then add traces to the queue via the <strong>Traces</strong> tab. You can now manually evaluate each session. While this method offers fine-grained control, it can be time-consuming.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jUHy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jUHy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 424w, https://substackcdn.com/image/fetch/$s_!jUHy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 848w, https://substackcdn.com/image/fetch/$s_!jUHy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 1272w, https://substackcdn.com/image/fetch/$s_!jUHy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jUHy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png" width="1456" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jUHy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 424w, https://substackcdn.com/image/fetch/$s_!jUHy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 848w, https://substackcdn.com/image/fetch/$s_!jUHy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 1272w, https://substackcdn.com/image/fetch/$s_!jUHy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7f7fcd8-fcfb-4888-aeef-80ccacbf0cbe_1600x357.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p4pE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p4pE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 424w, https://substackcdn.com/image/fetch/$s_!p4pE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 848w, https://substackcdn.com/image/fetch/$s_!p4pE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 1272w, https://substackcdn.com/image/fetch/$s_!p4pE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p4pE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png" width="1456" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p4pE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 424w, https://substackcdn.com/image/fetch/$s_!p4pE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 848w, https://substackcdn.com/image/fetch/$s_!p4pE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 1272w, https://substackcdn.com/image/fetch/$s_!p4pE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c337f2-8b7b-4189-94c3-503ba5d891bd_1600x306.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D7ys!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D7ys!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 424w, https://substackcdn.com/image/fetch/$s_!D7ys!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 848w, https://substackcdn.com/image/fetch/$s_!D7ys!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 1272w, https://substackcdn.com/image/fetch/$s_!D7ys!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D7ys!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png" width="1456" height="216" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d604b93-2488-4fac-9229-d79e698808de_1600x237.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:216,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D7ys!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 424w, https://substackcdn.com/image/fetch/$s_!D7ys!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 848w, https://substackcdn.com/image/fetch/$s_!D7ys!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 1272w, https://substackcdn.com/image/fetch/$s_!D7ys!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d604b93-2488-4fac-9229-d79e698808de_1600x237.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p><strong>LLM-as-a-Judge<br></strong> To automate evaluations, go to <strong>Settings &#8594; LLM Connection</strong> and add a model connection.<br>Then create a custom evaluator by navigating to <strong>Create Custom Evaluator &#8594; Create New Evaluator</strong>, and set up a <strong>Default Evaluation Model</strong>. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hQQr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hQQr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 424w, https://substackcdn.com/image/fetch/$s_!hQQr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 848w, https://substackcdn.com/image/fetch/$s_!hQQr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 1272w, https://substackcdn.com/image/fetch/$s_!hQQr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hQQr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png" width="1456" height="229" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:229,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hQQr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 424w, https://substackcdn.com/image/fetch/$s_!hQQr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 848w, https://substackcdn.com/image/fetch/$s_!hQQr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 1272w, https://substackcdn.com/image/fetch/$s_!hQQr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F463f8fe3-0785-488c-9f8b-3d6ba8ee5399_1600x252.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Choose a metric&#8212;such as <strong>Relevance</strong>&#8212;and specify whether you want to evaluate existing traces or only new ones.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!31IG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!31IG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 424w, https://substackcdn.com/image/fetch/$s_!31IG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 848w, https://substackcdn.com/image/fetch/$s_!31IG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 1272w, https://substackcdn.com/image/fetch/$s_!31IG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!31IG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png" width="1456" height="356" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!31IG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 424w, https://substackcdn.com/image/fetch/$s_!31IG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 848w, https://substackcdn.com/image/fetch/$s_!31IG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 1272w, https://substackcdn.com/image/fetch/$s_!31IG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94fccd8-94ed-49d4-82de-1ecbdd5f4998_1600x391.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tWg6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tWg6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 424w, https://substackcdn.com/image/fetch/$s_!tWg6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 848w, https://substackcdn.com/image/fetch/$s_!tWg6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 1272w, https://substackcdn.com/image/fetch/$s_!tWg6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tWg6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png" width="1456" height="339" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53af71a5-f496-4344-858c-f820e71c309b_1600x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:339,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tWg6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 424w, https://substackcdn.com/image/fetch/$s_!tWg6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 848w, https://substackcdn.com/image/fetch/$s_!tWg6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 1272w, https://substackcdn.com/image/fetch/$s_!tWg6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53af71a5-f496-4344-858c-f820e71c309b_1600x373.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>For inputs and outputs, map query to input and generation to output.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z3Yv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 424w, https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 848w, https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 1272w, https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png" width="382" height="268.31792975970427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1082,&quot;resizeWidth&quot;:382,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 424w, https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 848w, https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 1272w, https://substackcdn.com/image/fetch/$s_!Z3Yv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418b4028-0324-48f0-8b8a-e93c2ad8c461_1082x760.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> Now, go back to Airflow and ask a question. Check the <strong>Evaluation Logs</strong> and you&#8217;ll see a score and comment like:</p></li></ul><blockquote><p><em>&#8220;The generation directly and comprehensively answers the user's query by listing all the DAGs, providing their names, and offering additional context about their purpose and scheduling. The response is focused, informative, and adds significant value to the user's understanding of the available DAGs in the Airflow environment.&#8221;</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SOjS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SOjS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 424w, https://substackcdn.com/image/fetch/$s_!SOjS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 848w, https://substackcdn.com/image/fetch/$s_!SOjS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 1272w, https://substackcdn.com/image/fetch/$s_!SOjS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SOjS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png" width="1456" height="188" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1818ebe-1f61-453a-809d-370c0053345d_1600x207.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:188,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SOjS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 424w, https://substackcdn.com/image/fetch/$s_!SOjS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 848w, https://substackcdn.com/image/fetch/$s_!SOjS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 1272w, https://substackcdn.com/image/fetch/$s_!SOjS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1818ebe-1f61-453a-809d-370c0053345d_1600x207.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></blockquote><p>This demonstrates how Langfuse helps you evaluate, measure, and continuously improve your LLM-powered apps.</p><h2>Setting Up Langfuse for Your LangChain Application</h2><p>Integrating Langfuse into your LangChain app is straightforward. The configuration is handled in the <strong>airflow_chat/plugins/app/server/llm.py</strong> file, specifically within the <strong>get_user_chat_config</strong> function:</p><pre><code>def get_user_chat_config(session_id: str, username: str = None) -&gt; dict:
    chat_config = {
        'configurable': {'thread_id': session_id},
        'recursion_limit': 100
    }

    if os.environ.get('LANGFUSE_HOST'):
        langfuse_handler = CallbackHandler(
            user_id=username if username else session_id,
            session_id=str(session_id),
            public_key=os.environ.get('LANGFUSE_PUBLIC_KEY'),
            secret_key=os.environ.get('LANGFUSE_SECRET_KEY'),
            host=os.environ.get('LANGFUSE_HOST')
        )
        chat_config['callbacks'] = [langfuse_handler]

    return chat_config</code></pre><p>This function builds the chat configuration and conditionally attaches the Langfuse callback handler if the environment variables are present.</p><p>The resulting configuration (chat_config) is then passed to the <strong>astream_events</strong> method like this:</p><pre><code>async for event in self._agent.astream_events(
    {"messages": [HumanMessage(content=message)]},
    config=chat_session,
    version='v2',
)
</code></pre><p>The <strong>_agent</strong> object itself is initialized using the <strong>create_react_agent</strong> utility from LangGraph:</p><pre><code>from langgraph.prebuilt import create_react_agent

self._agent = create_react_agent(
    self._llm,
    tools,
    checkpointer=checkpointer,
    prompt=PROMPT_MESSAGE
)
</code></pre><p>All of this logic can be found in the airflow_chat/plugins/app/server/llm.py file. This setup enables seamless event streaming and tracking via Langfuse within your LangChain-based application.</p><h2>Summary</h2><p>By combining the airflow-chat plugin with Langfuse, we&#8217;ve created a robust observability stack for LLM-powered workflows within Airflow. From real-time trace logging and cost tracking to advanced evaluation methods like LLM-as-a-judge, Langfuse brings clarity and control to your AI interactions. Whether you're debugging unexpected prompts, monitoring usage, or analyzing performance, Langfuse helps you iterate with confidence. For a deeper dive into all the features Langfuse offers, visit <strong>https://langfuse.com</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[airflow-chat: Conversational AI Built into Airflow]]></title><description><![CDATA[Talk to your DAGs, inspect tasks, and operate pipelines&#8212;right from the interface.]]></description><link>https://newsletter.ponder.co/p/airflow-chat-conversational-ai-built</link><guid isPermaLink="false">https://newsletter.ponder.co/p/airflow-chat-conversational-ai-built</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Wed, 30 Jul 2025 11:41:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lDvw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lDvw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lDvw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lDvw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lDvw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lDvw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lDvw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png" width="428" height="285.43131868131866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:428,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lDvw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lDvw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lDvw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lDvw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafc5f75c-b13d-4770-b9c1-f048e06b3c14_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2><p>Not long ago, we introduced<a href="https://newsletter.hipposys.ai/p/airflow-mcp"> our MCP for Airflow</a>&#8212;designed to make operating DAGs and workflows as intuitive as chatting with a colleague. But there was a catch: it depended on Claude Desktop, which some organizations are unable or unwilling to adopt due to concerns around sharing data with Anthropic&#8212;or because of other operational, compliance, or policy-related reasons.</p><p>That got us thinking: what if we brought the same conversational interface <em>directly</em> into the Airflow UI?</p><p>That&#8217;s how the <strong>airflow-chat</strong> plugin came to life.</p><p>Under the hood, the plugin still leverages our existing MCP. You can run it fully embedded inside the Airflow webserver, or flexibly configure it in one of two other ways:</p><ul><li><p>As a plugin running inside the Airflow webserver (simplest setup)</p></li><li><p>Using the plugin alongside a separate MCP service</p></li><li><p>Or in a fully decoupled three-process architecture: <strong>Airflow webserver plugin &#8594; FastAPI server &#8594; MCP service</strong></p></li></ul><p>You also have full control over the LLM backend. MCP supports multiple providers, so <strong>you can choose to run it with Amazon Bedrock, Anthropic, or OpenAI</strong>&#8212;whichever best suits your infrastructure and policies.</p><p>This makes it easier than ever to integrate natural language interfaces into your pipelines&#8212;entirely within your stack and control.</p><p>Explore the project here:</p><ul><li><p>PyPI:<a href="https://pypi.org/project/airflow-chat/"> airflow-chat</a></p></li><li><p>GitHub:<a href="https://github.com/hipposys-ltd/airflow-mcp-plugins"> airflow-mcp-plugins</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Quickstart</h2><p>If you don&#8217;t have your own Airflow cluster, feel free to use the one provided in <a href="https://github.com/hipposys-ltd/airflow-mcp-plugins">our GitHub repository</a>.</p><p>Let&#8217;s start with the simplest setup. To integrate our plugin, add the following to your Airflow environment:</p><pre><code>airflow-chat==0.1.0a8</code></pre><blockquote><p><strong>Note:</strong> Version 0.1.0a8 is the latest at the time of writing. Check our<a href="https://pypi.org/project/airflow-chat"> PyPI repository</a> for updates before installing.</p></blockquote><h3><strong>&#128736; Required Environment Variables</strong></h3><p>Add the following environment variables to your cluster configuration:</p><pre><code>LLM_MODEL_ID=anthropic:claude-3-5-haiku-20241022
AIRFLOW_ASSISTENT_AI_CONN=airflow:airflow@http://localhost:8080
ANTHROPIC_API_KEY=your_anthropic_key</code></pre><h4><strong>AIRFLOW_ASSISTENT_AI_CONN Explained</strong></h4><p>This connection string is used by the AI Assistant plugin to communicate with your Airflow instance. It follows this structure:</p><pre><code>AIRFLOW_ASSISTENT_AI_CONN=&lt;username&gt;:&lt;password&gt;@http://localhost:8080</code></pre><ul><li><p>Replace <strong>&lt;username&gt;</strong> and <strong>&lt;password&gt;</strong> with any valid Airflow credentials you want the assistant to use.</p></li><li><p><strong>Do not change localhost:8080</strong>, as this address is required for internal routing within the containerized environment where the plugin operates.</p></li></ul><blockquote><p>&#128257; <strong>Model Flexibility:<br></strong> You can switch <strong>LLM_MODEL_ID</strong> to use models from <strong>Bedrock</strong> or <strong>OpenAI</strong>. Simply change the prefix accordingly:</p></blockquote><ul><li><p>For Bedrock: bedrock:...</p></li><li><p>For OpenAI: openai:...</p></li></ul><p>Be sure to set the correct corresponding API credentials:</p><ul><li><p><strong>Anthropic:</strong> ANTHROPIC_API_KEY</p></li><li><p><strong>Bedrock:</strong> AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY</p></li><li><p><strong>OpenAI:</strong> OPENAI_API_KEY</p></li></ul><h3><strong>&#9881;&#65039; Additional Configuration</strong></h3><p>You can also configure optional Airflow MCP environment variables such as:</p><ul><li><p>AIRFLOW_INSIGHTS_MODE</p></li><li><p>POST_MODE</p></li></ul><p>We explain these options in detail in<a href="https://newsletter.hipposys.ai/p/next-level-airflow-mcp"> this blog post</a>.</p><div><hr></div><h3><strong>&#129514; Running with Our Default Environment</strong></h3><p>If you&#8217;re using our pre-configured environment:</p><pre><code>cp airflow-plugin-test.env airflow-plugin.env</code></pre><p>Then open airflow-plugin.env, fill in all required values, and run:</p><pre><code>just airflow</code></pre><div><hr></div><h3><strong>&#129517; Accessing the Assistant</strong></h3><p>Once your cluster is running, open</p><pre><code> http://localhost:8080</code></pre><p>, then navigate to:</p><pre><code>Tools -&gt; AI Chat Assistant</code></pre><p>You&#8217;ll now see the Airflow Chat Assistant in action! Try asking:</p><blockquote><p><em>"What Airflow DAGs do we have, and which ones are paused?"</em></p></blockquote><p>&#127881; Everything should work beautifully out of the box!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6WIX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6WIX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 424w, https://substackcdn.com/image/fetch/$s_!6WIX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 848w, https://substackcdn.com/image/fetch/$s_!6WIX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 1272w, https://substackcdn.com/image/fetch/$s_!6WIX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6WIX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png" width="1456" height="309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:309,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6WIX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 424w, https://substackcdn.com/image/fetch/$s_!6WIX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 848w, https://substackcdn.com/image/fetch/$s_!6WIX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 1272w, https://substackcdn.com/image/fetch/$s_!6WIX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfd4fa9c-ee6a-4ca2-9afd-1a1667dfde52_1600x340.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HVkY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HVkY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 424w, https://substackcdn.com/image/fetch/$s_!HVkY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 848w, https://substackcdn.com/image/fetch/$s_!HVkY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 1272w, https://substackcdn.com/image/fetch/$s_!HVkY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HVkY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png" width="1456" height="612" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:612,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HVkY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 424w, https://substackcdn.com/image/fetch/$s_!HVkY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 848w, https://substackcdn.com/image/fetch/$s_!HVkY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 1272w, https://substackcdn.com/image/fetch/$s_!HVkY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1776f29-c45a-42b3-8d3b-5263e952df69_1600x672.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3><strong>&#128272; Access Control</strong></h3><p>Access to the AI plugin is restricted to:</p><ul><li><p><strong>Admins</strong>, or</p></li><li><p>Any user assigned the <strong>AIRFLOW_AI</strong> role.</p></li></ul><h2>Other Deployment Strategies</h2><p>Let&#8217;s take a look at how our <strong>simple deployment</strong> works&#8212;and then walk through how to modify it depending on your needs.</p><h3><strong>&#129513; The Basic Setup</strong></h3><p>Our lightweight <strong>Airflow Chat plugin</strong> runs both the <strong>Langchain modules</strong> and <strong>Airflow MCP</strong> locally inside the <strong>Airflow Webserver</strong>. This setup works out-of-the-box with minimal configuration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zzU4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zzU4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 424w, https://substackcdn.com/image/fetch/$s_!zzU4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 848w, https://substackcdn.com/image/fetch/$s_!zzU4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 1272w, https://substackcdn.com/image/fetch/$s_!zzU4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zzU4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png" width="910" height="392" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:392,&quot;width&quot;:910,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zzU4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 424w, https://substackcdn.com/image/fetch/$s_!zzU4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 848w, https://substackcdn.com/image/fetch/$s_!zzU4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 1272w, https://substackcdn.com/image/fetch/$s_!zzU4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a1f1316-86b2-4775-902f-a648cb0ee4d0_910x392.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But what if you don&#8217;t want to manage environment variables inside the Airflow instance under the same user? No problem&#8212;you can <strong>split the deployment</strong> and run MCP externally.</p><div><hr></div><h3><strong>&#128640; Option 1: Externalize the MCP Server</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J2Gq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J2Gq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 424w, https://substackcdn.com/image/fetch/$s_!J2Gq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 848w, https://substackcdn.com/image/fetch/$s_!J2Gq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 1272w, https://substackcdn.com/image/fetch/$s_!J2Gq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J2Gq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png" width="832" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:832,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J2Gq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 424w, https://substackcdn.com/image/fetch/$s_!J2Gq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 848w, https://substackcdn.com/image/fetch/$s_!J2Gq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 1272w, https://substackcdn.com/image/fetch/$s_!J2Gq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45dde1ce-23a0-4744-9f32-e6745270fe17_832x580.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To run MCP as a separate component:</p><ol><li><p><strong>Remove the embedded MCP server</strong> from your Airflow Webserver setup.</p></li></ol><p><strong>Add these environment variables</strong> to your Airflow instance (you can use airflow-plugin.env in our repo):</p><pre><code>TRANSPORT_TYPE=sse
mcp_host=host.docker.internal:8001
MCP_TOKEN=test_token</code></pre><blockquote><p>&#128204; <em>Note: <strong>mcp_host</strong> must be updated if you're deploying the MCP server on your own infrastructure.</em></p></blockquote><p><strong>Remove the Airflow connection variable</strong>: AIRFLOW_ASSISTENT_AI_CONN</p><ol start="2"><li><p>If you're using our repository, just run:</p></li></ol><pre><code>cp airflow-mcp-test.env airflow-mcp.env</code></pre><p>Then, customize the following variables as needed (no changes required if using the default setup in our repo):</p><pre><code>LLM_MODEL_ID=antropic:claude-3-5-haiku-20241022
AIRFLOW_ASSISTENT_AI_CONN=airflow:airflow@http://airflow-webserver:8080
TOKEN=test_token
TRANSPORT_TYPE=sse</code></pre><blockquote><p>&#9989; <em>Ensure that TOKEN and MCP_TOKEN have the same value to establish a secure connection between Airflow and the remote MCP server.</em></p></blockquote><p>To deploy:</p><ul><li><p>Run just prod if you're using our repo, or</p></li><li><p>Use the Docker image:<a href="https://hub.docker.com/repository/docker/hipposysai/airflow-mcp"> hipposysai/airflow-mcp:latest</a></p></li><li><p>Refer to docker-compose.prod.yml for an example configuration.</p></li></ul><div><hr></div><h3><strong>&#128421;&#65039; Option 2: Use the Plugin as a UI Only (Separate Langchain Logic)</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!skJ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!skJ7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 424w, https://substackcdn.com/image/fetch/$s_!skJ7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 848w, https://substackcdn.com/image/fetch/$s_!skJ7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 1272w, https://substackcdn.com/image/fetch/$s_!skJ7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!skJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png" width="832" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:832,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!skJ7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 424w, https://substackcdn.com/image/fetch/$s_!skJ7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 848w, https://substackcdn.com/image/fetch/$s_!skJ7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 1272w, https://substackcdn.com/image/fetch/$s_!skJ7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348b84d8-e3c6-440f-a801-d192ffbb8ea9_832x580.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you prefer to <strong>fully decouple Langchain logic</strong> from the Airflow Webserver (and just use the plugin as a UI layer), update your airflow-plugin.env as follows:</p><pre><code>INTERNAL_AI_ASSISTANT_SERVER=false
FAST_API_ACCESS_SECRET_TOKEN='ThisIsATempAccessTokenForLocalEnvs.ReplaceInProd'
BACKEND_URL=http://chat_fastapi:8080</code></pre><p>Then, for the FastAPI/Langchain service (using the <strong>hipposysai/airflow-mcp-fastapi</strong> image), define:</p><pre><code>LLM_MODEL_ID=antropic:claude-3-5-haiku-20241022
SECRET_KEY='ThisIsATempSecretForLocalEnvs.ReplaceInProd.'
FAST_API_ACCESS_SECRET_TOKEN='ThisIsATempAccessTokenForLocalEnvs.ReplaceInProd'
TRANSPORT_TYPE=sse
MCP_TOKEN=test_token
mcp_host=mcp_sse_server:8000
POSTGRES_USER='airflow'
POSTGRES_PASSWORD='airflow'
POSTGRES_DB='postgres'</code></pre><p>To apply this config:</p><pre><code>cp langchain-fastapi-test.env langchain-fastapi.env
just prod</code></pre><div><hr></div><h3><strong>&#9878;&#65039; Option 3: Separate Backend but Share MCP</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z73W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z73W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 424w, https://substackcdn.com/image/fetch/$s_!Z73W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 848w, https://substackcdn.com/image/fetch/$s_!Z73W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 1272w, https://substackcdn.com/image/fetch/$s_!Z73W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z73W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png" width="818" height="730" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/380429de-6b06-4537-a52a-826cacc0572f_818x730.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:730,&quot;width&quot;:818,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z73W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 424w, https://substackcdn.com/image/fetch/$s_!Z73W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 848w, https://substackcdn.com/image/fetch/$s_!Z73W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 1272w, https://substackcdn.com/image/fetch/$s_!Z73W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F380429de-6b06-4537-a52a-826cacc0572f_818x730.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Want to offload backend logic from your Airflow Webserver <em>without</em> introducing a separate MCP service? You can:</p><ol><li><p><strong>Remove TRANSPORT_TYPE=sse</strong> from langchain-fastapi.env (or whichever file defines your backend).</p></li><li><p><strong>Copy all environment variables</strong> from your MCP service (airflow-mcp.env) to your backend environment.</p></li></ol><p>This option gives you better performance isolation without significantly increasing deployment complexity.</p><h2>Summary</h2><p>The airflow-chat plugin brings a conversational AI interface directly into the Airflow UI, enabling users to inspect DAGs, query task states, and operate pipelines using natural language. Built on top of the existing MCP architecture, it offers flexible deployment options&#8212;from running entirely inside the Airflow Webserver to more decoupled setups involving external MCP and FastAPI services. The plugin supports multiple LLM backends (Anthropic, Bedrock, OpenAI), giving teams full control over model providers and data handling. With minimal configuration, customizable environment files, and built-in access controls, airflow-chat makes AI-powered orchestration both accessible and secure&#8212;right where data pipelines live.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Next-Level Airflow MCP]]></title><description><![CDATA[Add DAG prediction and control to Claude Desktop]]></description><link>https://newsletter.ponder.co/p/next-level-airflow-mcp</link><guid isPermaLink="false">https://newsletter.ponder.co/p/next-level-airflow-mcp</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Wed, 23 Jul 2025 11:18:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nlCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nlCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nlCT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!nlCT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!nlCT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!nlCT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nlCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png" width="353" height="353" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:353,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nlCT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!nlCT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!nlCT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!nlCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda9e389a-64b8-428e-9eae-eabbb435f88d_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Introduction</strong></h2><p>A few weeks ago, we introduced <strong><a href="https://newsletter.hipposys.ai/p/airflow-mcp">Airflow MCP</a></strong><a href="https://newsletter.hipposys.ai/p/airflow-mcp"> from Hipposys</a>. Since then, we've fine-tuned its capabilities to better align with real-world user needs. In this post, we&#8217;ll walk you through three major updates: <strong>Safe Mode</strong> for secure operation, enhanced controls to manage <strong>DAG state</strong>, and a new way to <strong>predict upcoming DAG runs</strong> using our <strong><a href="https://newsletter.hipposys.ai/publish/posts/detail/153249544?referrer=%2Fpublish%2Fposts">Airflow Schedule Insights</a></strong><a href="https://newsletter.hipposys.ai/publish/posts/detail/153249544?referrer=%2Fpublish%2Fposts"> plugin</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Run with Confidence: Safe Mode</strong></h2><p>We realized that many users&#8212;especially those working with production Airflow instances&#8212;need to be certain that MCP won&#8217;t inadvertently alter DAG states. Even if your Airflow user has permission to run, pause, or delete DAGs, you may want to use MCP strictly for <strong>read-only access</strong>. That&#8217;s why <strong>Safe Mode</strong> is now the <strong>default behavior</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zXoK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zXoK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 424w, https://substackcdn.com/image/fetch/$s_!zXoK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 848w, https://substackcdn.com/image/fetch/$s_!zXoK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 1272w, https://substackcdn.com/image/fetch/$s_!zXoK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zXoK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png" width="484" height="492.72072072072075" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:666,&quot;resizeWidth&quot;:484,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zXoK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 424w, https://substackcdn.com/image/fetch/$s_!zXoK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 848w, https://substackcdn.com/image/fetch/$s_!zXoK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 1272w, https://substackcdn.com/image/fetch/$s_!zXoK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4aa9b14-9da9-46f6-bfb5-8d7a4418dc11_666x678.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In Safe Mode, only informational (GET) functions are available, ensuring you can inspect your Airflow environment without risk. To enable write capabilities (e.g. triggering or modifying DAGs), you can explicitly opt in by setting the POST_MODE environment variable.</p><p>To do this, add the following to your claude_desktop_config.json:</p><pre><code>{
  "mcpServers": {
    "airflow_mcp": {
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "airflow_api_url",
        "-e",
        "airflow_username",
        "-e",
        "airflow_password",
        "-e",
        "POST_MODE",
        "hipposysai/airflow-mcp:latest"
      ],
      "command": "docker",
      "env": {
        "airflow_api_url": "http://host.docker.internal:8088/api/v1",
        "airflow_username": "airflow",
        "airflow_password": "airflow",
        "POST_MODE": "true"
      }
    }
  }
}</code></pre><p>Once enabled, you&#8217;ll have access to all functions&#8212;including state-changing operations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BjeG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BjeG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 424w, https://substackcdn.com/image/fetch/$s_!BjeG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 848w, https://substackcdn.com/image/fetch/$s_!BjeG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 1272w, https://substackcdn.com/image/fetch/$s_!BjeG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BjeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png" width="500" height="509.009009009009" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:666,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BjeG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 424w, https://substackcdn.com/image/fetch/$s_!BjeG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 848w, https://substackcdn.com/image/fetch/$s_!BjeG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 1272w, https://substackcdn.com/image/fetch/$s_!BjeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4102194-d224-4902-a8ec-57e1b4a47cba_666x678.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Until then, rest assured: by default, MCP operates in a safe, read-only mode, so you can explore and monitor without risking production disruptions or unscheduled runs.</p><h2><strong>Pause DAGs Before the Storm</strong></h2><p>We've all been there: an unexpected (or even expected) outage hits, and you need to <strong>urgently pause all Airflow DAGs</strong>. So you go through them one by one&#8230; but wait&#8212;<strong>some DAGs were already paused</strong>. Should you manually note them down just to restore their state afterward? That&#8217;s tedious&#8212;and error-prone.</p><p><strong>Not anymore.</strong></p><p>Thanks to the new <strong>change_dags_pause_status</strong> method, this process is now streamlined and reliable.</p><p>Note: The Airflow cluster I'm working with is deployed from our GitHub repo:<a href="https://github.com/hipposys-ltd/airflow-mcp"> hipposys-ltd/airflow-mcp</a>.</p><p>Right now, here&#8217;s our current state:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YpyV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YpyV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 424w, https://substackcdn.com/image/fetch/$s_!YpyV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 848w, https://substackcdn.com/image/fetch/$s_!YpyV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!YpyV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YpyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png" width="266" height="429.8989898989899" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1280,&quot;width&quot;:792,&quot;resizeWidth&quot;:266,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YpyV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 424w, https://substackcdn.com/image/fetch/$s_!YpyV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 848w, https://substackcdn.com/image/fetch/$s_!YpyV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!YpyV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81304e39-e253-4d3d-891a-9ab7776fb062_792x1280.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s use <strong>MCP</strong> to prepare for the outage.<br> Start with the following prompt:</p><blockquote><p><em>"Hi, please pause all Airflow DAGs, but before doing so, list the DAGs that are currently paused. We&#8217;ll use that list to remember which ones need to be unpaused tomorrow."<br></em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1kfh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1kfh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 424w, https://substackcdn.com/image/fetch/$s_!1kfh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 848w, https://substackcdn.com/image/fetch/$s_!1kfh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 1272w, https://substackcdn.com/image/fetch/$s_!1kfh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1kfh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png" width="477" height="227.10998552821997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:658,&quot;width&quot;:1382,&quot;resizeWidth&quot;:477,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!1kfh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 424w, https://substackcdn.com/image/fetch/$s_!1kfh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 848w, https://substackcdn.com/image/fetch/$s_!1kfh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 1272w, https://substackcdn.com/image/fetch/$s_!1kfh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04b57b1-0172-4e4f-ad87-20f7c79c527a_1382x658.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Crhh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Crhh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 424w, https://substackcdn.com/image/fetch/$s_!Crhh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 848w, https://substackcdn.com/image/fetch/$s_!Crhh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 1272w, https://substackcdn.com/image/fetch/$s_!Crhh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Crhh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png" width="490" height="360.01908396946567" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1048,&quot;resizeWidth&quot;:490,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Crhh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 424w, https://substackcdn.com/image/fetch/$s_!Crhh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 848w, https://substackcdn.com/image/fetch/$s_!Crhh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 1272w, https://substackcdn.com/image/fetch/$s_!Crhh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbdcf053a-6f6d-4444-b0e2-e44608a60aa7_1048x770.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zDkr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zDkr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 424w, https://substackcdn.com/image/fetch/$s_!zDkr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 848w, https://substackcdn.com/image/fetch/$s_!zDkr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 1272w, https://substackcdn.com/image/fetch/$s_!zDkr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zDkr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png" width="436" height="421.28270042194094" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1374,&quot;width&quot;:1422,&quot;resizeWidth&quot;:436,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zDkr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 424w, https://substackcdn.com/image/fetch/$s_!zDkr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 848w, https://substackcdn.com/image/fetch/$s_!zDkr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 1272w, https://substackcdn.com/image/fetch/$s_!zDkr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cfb787-ba81-4f36-a2e0-b34e209423ae_1422x1374.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XEet!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XEet!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 424w, https://substackcdn.com/image/fetch/$s_!XEet!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 848w, https://substackcdn.com/image/fetch/$s_!XEet!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!XEet!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XEet!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png" width="366" height="721.8646153846154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1282,&quot;width&quot;:650,&quot;resizeWidth&quot;:366,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!XEet!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 424w, https://substackcdn.com/image/fetch/$s_!XEet!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 848w, https://substackcdn.com/image/fetch/$s_!XEet!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 1272w, https://substackcdn.com/image/fetch/$s_!XEet!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159caf93-1713-4764-8cee-fffdd7e4520a_650x1282.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As you can see, <strong>all DAGs have been successfully paused.</strong></p><p>Now comes the tricky part: restoring normal operations without unpausing DAGs that were paused before the outage.</p><p>Run:</p><blockquote><p><em>"Great. Now please unpause the DAGs, but make sure to leave the ones that were already paused as they are."</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uBKd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uBKd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 424w, https://substackcdn.com/image/fetch/$s_!uBKd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 848w, https://substackcdn.com/image/fetch/$s_!uBKd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 1272w, https://substackcdn.com/image/fetch/$s_!uBKd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uBKd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png" width="592" height="104.49450549450549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:257,&quot;width&quot;:1456,&quot;resizeWidth&quot;:592,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uBKd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 424w, https://substackcdn.com/image/fetch/$s_!uBKd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 848w, https://substackcdn.com/image/fetch/$s_!uBKd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 1272w, https://substackcdn.com/image/fetch/$s_!uBKd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa894e48b-7aa1-4f72-93ea-33cd73ee359a_1528x270.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kqKM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kqKM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 424w, https://substackcdn.com/image/fetch/$s_!kqKM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 848w, https://substackcdn.com/image/fetch/$s_!kqKM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 1272w, https://substackcdn.com/image/fetch/$s_!kqKM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kqKM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png" width="434" height="394.9338959212377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1294,&quot;width&quot;:1422,&quot;resizeWidth&quot;:434,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kqKM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 424w, https://substackcdn.com/image/fetch/$s_!kqKM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 848w, https://substackcdn.com/image/fetch/$s_!kqKM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 1272w, https://substackcdn.com/image/fetch/$s_!kqKM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30ba07b3-3815-4c52-a4c0-139654a764d8_1422x1294.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wzvn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wzvn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 424w, https://substackcdn.com/image/fetch/$s_!Wzvn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 848w, https://substackcdn.com/image/fetch/$s_!Wzvn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 1272w, https://substackcdn.com/image/fetch/$s_!Wzvn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wzvn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png" width="242" height="416.7121951219512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1412,&quot;width&quot;:820,&quot;resizeWidth&quot;:242,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Wzvn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 424w, https://substackcdn.com/image/fetch/$s_!Wzvn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 848w, https://substackcdn.com/image/fetch/$s_!Wzvn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 1272w, https://substackcdn.com/image/fetch/$s_!Wzvn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cb93144-6bbc-4513-b023-2b8c2cfd65ae_820x1412.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And just like that&#8212;done.<br> <strong>It only took two prompts</strong> to handle a full-cluster pause and restore cycle, cleanly and safely.</p><h2><strong>When Will It Run?</strong></h2><p>Let&#8217;s start with something simple: <strong>finding out when load_ticket_sales will run next</strong>.</p><p>To do that, we&#8217;ll need to update claude_desktop_config.json once again by enabling <strong>Airflow Insights Mode</strong>:</p><pre><code>{
  "mcpServers": {
    "airflow_mcp": {
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "airflow_api_url",
        "-e",
        "airflow_username",
        "-e",
        "airflow_password",
        "-e",
        "POST_MODE",
        "-e",
        "AIRFLOW_INSIGHTS_MODE",
        "hipposysai/airflow-mcp:latest"
      ],
      "command": "docker",
      "env": {
        "airflow_api_url": "http://host.docker.internal:8088/api/v1",
        "airflow_username": "airflow",
        "airflow_password": "airflow",
        "POST_MODE": "true",
        "AIRFLOW_INSIGHTS_MODE": "true"
      }
    }
  }
}</code></pre><blockquote><p>&#9888;&#65039; <strong>Note:</strong> Make sure the<a href="https://newsletter.hipposys.ai/publish/posts/detail/153249544?referrer=%2Fpublish%2Fposts"> Airflow Schedule Insights plugin</a> is installed in your Airflow instance for this to work.</p></blockquote><p>Now, restart <strong>Claude Desktop</strong> and ask:</p><blockquote><p><em>&#8220;When is the next run for load_ticket_sales (in EST)?&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gMQ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gMQ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 424w, https://substackcdn.com/image/fetch/$s_!gMQ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 848w, https://substackcdn.com/image/fetch/$s_!gMQ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 1272w, https://substackcdn.com/image/fetch/$s_!gMQ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gMQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png" width="1456" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gMQ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 424w, https://substackcdn.com/image/fetch/$s_!gMQ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 848w, https://substackcdn.com/image/fetch/$s_!gMQ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 1272w, https://substackcdn.com/image/fetch/$s_!gMQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb8bd59-a01b-4fb7-8d2a-980a9becd198_1486x572.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After a short wait, you&#8217;ll get a detailed answer including the <strong>start time, end time, and expected duration</strong>&#8212;and it&#8217;s accurate. But that&#8217;s easy&#8212;load_ticket_sales is a scheduled DAG.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zTDm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zTDm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 424w, https://substackcdn.com/image/fetch/$s_!zTDm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 848w, https://substackcdn.com/image/fetch/$s_!zTDm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 1272w, https://substackcdn.com/image/fetch/$s_!zTDm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zTDm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png" width="536" height="332.8164665523156" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:1166,&quot;resizeWidth&quot;:536,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zTDm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 424w, https://substackcdn.com/image/fetch/$s_!zTDm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 848w, https://substackcdn.com/image/fetch/$s_!zTDm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 1272w, https://substackcdn.com/image/fetch/$s_!zTDm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3a0778-5a1b-440e-9b03-e23aaa5c3ced_1166x724.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s go a step further and try something more dynamic.</p><div><hr></div><h3>Event-Driven DAG Prediction</h3><p>Now let&#8217;s look at an <strong>event-driven DAG</strong> with no fixed schedule: transform_customer_sentiment.</p><p>This DAG is triggered when:</p><ul><li><p><strong>either</strong> transform_sales_aggregator <strong>and</strong> load_customer_feedback complete,</p></li><li><p><strong>or</strong> load_ticket_sales finishes on its own.<br></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-KPf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-KPf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 424w, https://substackcdn.com/image/fetch/$s_!-KPf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 848w, https://substackcdn.com/image/fetch/$s_!-KPf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 1272w, https://substackcdn.com/image/fetch/$s_!-KPf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-KPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png" width="1456" height="242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:242,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-KPf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 424w, https://substackcdn.com/image/fetch/$s_!-KPf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 848w, https://substackcdn.com/image/fetch/$s_!-KPf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 1272w, https://substackcdn.com/image/fetch/$s_!-KPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d9c0fa6-a411-476b-8da7-05911cdba65e_1600x266.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b029!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b029!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 424w, https://substackcdn.com/image/fetch/$s_!b029!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 848w, https://substackcdn.com/image/fetch/$s_!b029!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 1272w, https://substackcdn.com/image/fetch/$s_!b029!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b029!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png" width="1168" height="542" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:542,&quot;width&quot;:1168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b029!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 424w, https://substackcdn.com/image/fetch/$s_!b029!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 848w, https://substackcdn.com/image/fetch/$s_!b029!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 1272w, https://substackcdn.com/image/fetch/$s_!b029!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea6130ae-108e-4bc6-8537-f82f152d6a8e_1168x542.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>According to Claude, the next trigger will come from load_ticket_sales. Let&#8217;s wait and see&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EV7Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EV7Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 424w, https://substackcdn.com/image/fetch/$s_!EV7Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 848w, https://substackcdn.com/image/fetch/$s_!EV7Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 1272w, https://substackcdn.com/image/fetch/$s_!EV7Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EV7Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png" width="1456" height="749" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:749,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EV7Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 424w, https://substackcdn.com/image/fetch/$s_!EV7Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 848w, https://substackcdn.com/image/fetch/$s_!EV7Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 1272w, https://substackcdn.com/image/fetch/$s_!EV7Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F133747db-fb41-4c5d-97b1-66c2588f0569_1486x764.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JDpk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JDpk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 424w, https://substackcdn.com/image/fetch/$s_!JDpk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 848w, https://substackcdn.com/image/fetch/$s_!JDpk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 1272w, https://substackcdn.com/image/fetch/$s_!JDpk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JDpk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png" width="1456" height="151" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:151,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JDpk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 424w, https://substackcdn.com/image/fetch/$s_!JDpk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 848w, https://substackcdn.com/image/fetch/$s_!JDpk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 1272w, https://substackcdn.com/image/fetch/$s_!JDpk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a34bf37-2b35-42f2-adaa-4978fcce6cfb_1600x166.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>And yes&#8212;it was triggered <strong>just one second later</strong> than predicted and finished <strong>two seconds later</strong> than expected. Even better, Claude correctly identified that <strong>load_ticket_sales</strong> was the trigger.</p><div><hr></div><h3>Querying Multiple DAGs at Once</h3><p>Now let&#8217;s try asking about several DAGs in one go:</p><blockquote><p><em>&#8220;When are the next runs for load_movie_inventory, load_box_office_reports, and transform_loyalty_program_analysis (in UTC)?&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5XAA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5XAA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 424w, https://substackcdn.com/image/fetch/$s_!5XAA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 848w, https://substackcdn.com/image/fetch/$s_!5XAA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 1272w, https://substackcdn.com/image/fetch/$s_!5XAA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5XAA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png" width="550" height="543.9560439560439" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1440,&quot;width&quot;:1456,&quot;resizeWidth&quot;:550,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5XAA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 424w, https://substackcdn.com/image/fetch/$s_!5XAA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 848w, https://substackcdn.com/image/fetch/$s_!5XAA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 1272w, https://substackcdn.com/image/fetch/$s_!5XAA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e959e27-30f2-4f97-84e2-b88bd1c716f7_1476x1460.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Claude replies&#8212;<strong>none of them will run</strong>, and that&#8217;s correct!</p><div><hr></div><p>With just a few configuration changes, you can now <strong>monitor and predict future DAG runs directly from Claude Desktop</strong>&#8212;scheduled or event-driven. No guesswork, no surprises.</p><h2><strong>Summary: Next-Level DAG Observability and Control</strong></h2><p>With the latest updates to <strong>Airflow MCP</strong>, Claude Desktop evolves from a smart interface into a <strong>powerful control and observability tool</strong> for Airflow users. You can now operate in <strong>Safe Mode</strong> for peace of mind in production, <strong>pause and restore DAG states safely</strong> during outages, and even <strong>predict when DAGs&#8212;scheduled or event-driven&#8212;will run next</strong>, thanks to the new <strong>Airflow Schedule Insights</strong> integration. Whether you're running a complex pipeline or preparing for maintenance, these upgrades ensure you're always one step ahead&#8212;<strong>with just a couple of prompts</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[AWS S3 Vector Buckets Are Here — Use Them with LangChain]]></title><description><![CDATA[Connect the dots between Amazon&#8217;s new vector storage and LangChain&#8217;s RAG workflows]]></description><link>https://newsletter.ponder.co/p/aws-s3-vector-buckets-are-here-use</link><guid isPermaLink="false">https://newsletter.ponder.co/p/aws-s3-vector-buckets-are-here-use</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Sun, 20 Jul 2025 13:14:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RX-Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Introduction</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RX-Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RX-Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!RX-Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!RX-Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!RX-Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RX-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png" width="319" height="212.7396978021978" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:319,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!RX-Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!RX-Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!RX-Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!RX-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcffa03be-63ed-4011-9079-47feeef3d00c_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>When building a RAG system, developers often turn to vector databases&#8212;like ChromaDB or Milvus&#8212;for storing embeddings. While popular, these solutions come with notable drawbacks:</p><ul><li><p>Proprietary options can be expensive, and even open-source databases typically require maintaining a full cluster.</p></li><li><p>Managing infrastructure&#8212;permissions, monitoring, uptime&#8212;adds significant operational complexity.</p></li><li><p>Scaling vector databases for large workloads isn't always straightforward or cost-effective.</p></li><li><p>Most solutions lack native integration with AWS services like Amazon Bedrock Knowledge Bases.</p></li></ul><p>To address these limitations, AWS recently introduced <strong>S3 Vector Buckets</strong>&#8212;a lightweight, scalable, and fully managed way to store and retrieve vector embeddings directly within Amazon S3. While AWS provides excellent documentation on using this with their Agent ecosystem (<a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vectors-getting-started.html">official guide</a>), we created a<a href="https://github.com/hipposys-ltd/s3-vector-bucket"> demo project</a> showing how to integrate S3 Vector Buckets with <strong>LangChain</strong>.</p><p>In this post, we'll walk you through the setup, using real-world data from the<a href="https://a030-cpc.nyc.gov/html/cpc/index.aspx"> NYC City Planning website</a>, and demonstrate how to extract useful insights with natural language queries.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>Setting Up the Vector Bucket</h1><p>Start by navigating to <strong>AWS S3</strong>, selecting <strong>Vector Buckets</strong> from the left-hand menu, and creating a new bucket.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jmos!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jmos!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 424w, https://substackcdn.com/image/fetch/$s_!jmos!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 848w, https://substackcdn.com/image/fetch/$s_!jmos!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 1272w, https://substackcdn.com/image/fetch/$s_!jmos!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jmos!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png" width="146" height="269.224" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ff85ad7-d975-411b-99bc-786189675c70_500x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:922,&quot;width&quot;:500,&quot;resizeWidth&quot;:146,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jmos!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 424w, https://substackcdn.com/image/fetch/$s_!jmos!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 848w, https://substackcdn.com/image/fetch/$s_!jmos!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 1272w, https://substackcdn.com/image/fetch/$s_!jmos!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ff85ad7-d975-411b-99bc-786189675c70_500x922.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AYAF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AYAF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 424w, https://substackcdn.com/image/fetch/$s_!AYAF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 848w, https://substackcdn.com/image/fetch/$s_!AYAF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 1272w, https://substackcdn.com/image/fetch/$s_!AYAF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AYAF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png" width="1456" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AYAF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 424w, https://substackcdn.com/image/fetch/$s_!AYAF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 848w, https://substackcdn.com/image/fetch/$s_!AYAF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 1272w, https://substackcdn.com/image/fetch/$s_!AYAF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d724c6-765b-463c-a1ca-13e7176252a7_1600x663.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Great &#8212; now we have an S3 vector bucket ready to store embeddings. But how do we <strong>search</strong> through those vectors? For that, we need to create a <strong>vector index</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eNsv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eNsv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 424w, https://substackcdn.com/image/fetch/$s_!eNsv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 848w, https://substackcdn.com/image/fetch/$s_!eNsv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 1272w, https://substackcdn.com/image/fetch/$s_!eNsv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eNsv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png" width="630" height="287.3076923076923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:664,&quot;width&quot;:1456,&quot;resizeWidth&quot;:630,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eNsv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 424w, https://substackcdn.com/image/fetch/$s_!eNsv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 848w, https://substackcdn.com/image/fetch/$s_!eNsv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 1272w, https://substackcdn.com/image/fetch/$s_!eNsv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a5ee323-22d9-4404-8dbc-00bacdfffe6f_1600x730.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When configuring the index, set the <strong>dimensions</strong> value to match the number of values returned by your embedding model. Since we&#8217;re using the amazon.titan-embed-text-v2:0 embedding model from <strong>Amazon Bedrock</strong>, which produces vectors of <strong>1024 dimensions</strong>, set the dimension accordingly.</p><p>Next, you&#8217;ll need to choose a similarity measure &#8212; either <strong>Euclidean Distance</strong> or <strong>Cosine Similarity</strong>. We&#8217;ll use <strong>Cosine Similarity</strong>, as it aligns better with how Titan embeddings are designed: they capture meaning in the <strong>direction</strong> of the vector rather than its magnitude, which is exactly what Cosine Similarity measures.</p><p>Perfect! With both the <strong>vector bucket</strong> and <strong>index</strong> set up, you're now ready to run your repository and start interacting with your vector store.</p><h1>Using the Vector Bucket</h1><p>To get started, clone our demo repository locally:</p><pre><code>git clone https://github.com/hipposys-ltd/s3-vector-bucket
cd s3-vector-bucket
cp template.env .env</code></pre><p>This will generate a .env file where you&#8217;ll configure all necessary environment variables:</p><pre><code>DEPLOY_ENV='local'
# Postgres

POSTGRES_USER='postgres'

POSTGRES_PASSWORD='postgres'

POSTGRES_DB='postgres'

# LLM Model

LLM_MODEL_ID='bedrock:...' # or use 'anthropic:...' or 'openai:...'

# Secrets (replace in production)

SECRET_KEY='ThisIsATempSecretForLocalEnvs.ReplaceInProd.'

FAST_API_ACCESS_SECRET_TOKEN='ThisIsATempAccessTokenForLocalEnvs.ReplaceInProd'

# AWS Credentials

AWS_ACCESS_KEY_ID='...'

AWS_SECRET_ACCESS_KEY='...'

AWS_DEFAULT_REGION='...'

# Optional Keys

# ANTHROPIC_API_KEY='...'

# OPENAI_API_KEY='&lt;YOUR OPENAI API KEY&gt;'

# Vector Store

bucket='test-vector-bucket'

index='test-vector-index'

# Optional: Custom embedding model

# embedding_model='...'</code></pre><p>To use Bedrock for both embedding and LLM, set <strong>LLM_MODEL_ID</strong> to a string starting with bedrock: and ensure your AWS credentials are configured.<br> If you prefer using models like Claude (Anthropic) or OpenAI, set the respective API key and adjust <strong>LLM_MODEL_ID</strong> accordingly (e.g., anthropic:... or openai:...).</p><p>Once configured, run:</p><pre><code>just all</code></pre><p>Then open your browser and navigate to</p><p> http://localhost:8501</p><p>You&#8217;ll find three tabs:</p><ul><li><p><strong>Main</strong> &#8211; a chat interface to interact with your vector store</p></li><li><p><strong>Load File</strong> &#8211; to upload PDF documents and populate your vector index</p></li><li><p><strong>See Vectors</strong> &#8211; to explore and manage uploaded embeddings</p></li></ul><p>Initially, the vector store will be empty, so let&#8217;s add some data.<br> Download the prepared NYC CPC dataset from:<br><a href="https://hipposys-public-assets.s3.us-east-1.amazonaws.com/newsletter-assets/NYC+Planning.zip"> https://hipposys-public-assets.s3.us-east-1.amazonaws.com/newsletter-assets/NYC+Planning.zip</a></p><p>Extract the PDF files into the data/ folder. Then, go to the <strong>Load File</strong> tab and upload them.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xmig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xmig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 424w, https://substackcdn.com/image/fetch/$s_!xmig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 848w, https://substackcdn.com/image/fetch/$s_!xmig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 1272w, https://substackcdn.com/image/fetch/$s_!xmig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xmig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png" width="381" height="212.67601683029454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1426,&quot;resizeWidth&quot;:381,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xmig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 424w, https://substackcdn.com/image/fetch/$s_!xmig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 848w, https://substackcdn.com/image/fetch/$s_!xmig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 1272w, https://substackcdn.com/image/fetch/$s_!xmig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8fc7b89-b276-4b76-9c18-2f5f8f4edcfd_1426x796.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zuVh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zuVh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 424w, https://substackcdn.com/image/fetch/$s_!zuVh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 848w, https://substackcdn.com/image/fetch/$s_!zuVh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!zuVh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zuVh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png" width="342" height="597.1428571428571" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1320,&quot;width&quot;:756,&quot;resizeWidth&quot;:342,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zuVh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 424w, https://substackcdn.com/image/fetch/$s_!zuVh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 848w, https://substackcdn.com/image/fetch/$s_!zuVh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!zuVh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16c227b7-db56-4bab-993a-5bbc28510911_756x1320.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After processing is complete, check the <strong>See Vectors</strong> tab&#8212;you&#8217;ll see the loaded data! You can even manage the embeddings: delete individual rows, entire documents, or wipe all vectors.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d0C4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d0C4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 424w, https://substackcdn.com/image/fetch/$s_!d0C4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 848w, https://substackcdn.com/image/fetch/$s_!d0C4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 1272w, https://substackcdn.com/image/fetch/$s_!d0C4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d0C4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png" width="377" height="290.7767857142857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1123,&quot;width&quot;:1456,&quot;resizeWidth&quot;:377,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d0C4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 424w, https://substackcdn.com/image/fetch/$s_!d0C4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 848w, https://substackcdn.com/image/fetch/$s_!d0C4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 1272w, https://substackcdn.com/image/fetch/$s_!d0C4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb342ad57-6085-4b84-a8c5-9da216ec55fb_1600x1234.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now, switch to the <strong>Main</strong> tab and try a query like:</p><blockquote><p><em>What are the changing conditions of the Special Hudson Yards District?</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CR2C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CR2C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 424w, https://substackcdn.com/image/fetch/$s_!CR2C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 848w, https://substackcdn.com/image/fetch/$s_!CR2C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!CR2C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CR2C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png" width="545" height="471.2603021978022" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1259,&quot;width&quot;:1456,&quot;resizeWidth&quot;:545,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CR2C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 424w, https://substackcdn.com/image/fetch/$s_!CR2C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 848w, https://substackcdn.com/image/fetch/$s_!CR2C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!CR2C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d809abc-d832-496e-8b00-94b0fbc3c725_1478x1278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Gej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Gej!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 424w, https://substackcdn.com/image/fetch/$s_!1Gej!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 848w, https://substackcdn.com/image/fetch/$s_!1Gej!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!1Gej!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Gej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png" width="540" height="442.11480362537765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/592428dd-292d-414a-ae87-a490837231a6_1324x1084.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1084,&quot;width&quot;:1324,&quot;resizeWidth&quot;:540,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1Gej!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 424w, https://substackcdn.com/image/fetch/$s_!1Gej!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 848w, https://substackcdn.com/image/fetch/$s_!1Gej!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!1Gej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F592428dd-292d-414a-ae87-a490837231a6_1324x1084.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iArt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iArt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 424w, https://substackcdn.com/image/fetch/$s_!iArt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 848w, https://substackcdn.com/image/fetch/$s_!iArt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 1272w, https://substackcdn.com/image/fetch/$s_!iArt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iArt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png" width="554" height="209.21450151057402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:1324,&quot;resizeWidth&quot;:554,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!iArt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 424w, https://substackcdn.com/image/fetch/$s_!iArt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 848w, https://substackcdn.com/image/fetch/$s_!iArt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 1272w, https://substackcdn.com/image/fetch/$s_!iArt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb54def63-c141-4536-8415-dcf6c2c5bee3_1324x500.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><br>You should receive a highly relevant response&#8212;your setup is working!</p><h1>How It Works</h1><p>The core logic of our vector integration lives in<a href="https://github.com/hipposys-ltd/s3-vector-bucket/blob/main/app/vector/__init__.py"> app/vector/__init__.py</a>.</p><h4><strong>Connecting to the S3 Vector Store</strong></h4><p>We use the boto3 SDK to interact with AWS&#8217;s new S3 vector store:</p><pre><code>self.s3vectors = boto3.client('s3vectors', region_name='us-east-1')</code></pre><p>This client handles all interactions&#8212;storing, searching, listing, and deleting vectors in the configured S3 bucket.</p><div><hr></div><h4><strong>Searching the Vector Bucket</strong></h4><p>The search method performs the following steps:</p><ol><li><p>Embeds the input text using an embedding model (e.g., Amazon Titan).</p></li><li><p>Sends the resulting vector to the S3 bucket for similarity search.</p></li><li><p>Returns the top matches with metadata and distance.</p></li></ol><pre><code>def search(self, input_text):
    request = json.dumps({"inputText": input_text})
    response = self.bedrock.invoke_model(modelId=self.embedding_model, body=request)
    embedding = json.loads(response["body"].read())["embedding"]

    query = self.s3vectors.query_vectors(
        vectorBucketName=self.bucket,
        indexName=self.index,
        queryVector={"float32": embedding},
        topK=3,
        returnDistance=True,
        returnMetadata=True
    )
    return query["vectors"]</code></pre><div><hr></div><h4><strong>Listing and Deleting Vectors</strong></h4><p>You can also view or clean up your vector store using the following methods:</p><pre><code>def list_vectors(self):
    query = self.s3vectors.list_vectors(
        vectorBucketName=self.bucket,
        indexName=self.index,
        returnMetadata=True
    )
    return [{**vector['metadata'], 'key': vector['key']} for vector in query['vectors']]

def delete_vectors(self, vector_keys: list):
    self.s3vectors.delete_vectors(
        vectorBucketName=self.bucket,
        indexName=self.index,
        keys=vector_keys
    )</code></pre><div><hr></div><h4><strong>Uploading Data to the Vector Store</strong></h4><p>The upload_file function (also in the same module) handles:</p><ul><li><p>Loading text from files</p></li><li><p>Generating embeddings</p></li><li><p>Storing them into the S3 vector bucket</p></li></ul><p>This process is triggered when you upload documents via the <strong>Load File</strong> tab in the UI.</p><div><hr></div><h4><strong>LangChain Integration</strong></h4><p>To integrate this logic into your LangChain agent, we wrap the search method as a LangChain Tool inside <strong>app/server/chat.py</strong>:</p><pre><code>retriever = VectorDB()
tool = Tool(
    name="Data_Retriever",
    func=retriever.search,
    description="Searches S3 vector bucket for similar embeddings and returns matching results",
)
tools = [tool]</code></pre><p>This enables your LangChain agent to retrieve semantically relevant data from your S3 vector bucket in response to user queries.</p><h1>Conclusion</h1><p>AWS S3 Vector Buckets offer a simple and scalable alternative to traditional vector databases&#8212;no clusters, no heavy maintenance, and no additional services to run. Combined with LangChain, you can now build RAG pipelines that are lightweight, cost-effective, and easy to set up.</p><p>Our demo showed how to embed and store documents, query them semantically, and retrieve meaningful answers&#8212;all using S3 as your vector store. Whether you're working with Amazon Bedrock, Anthropic, or OpenAI models, this setup provides a flexible and developer-friendly foundation for building intelligent applications.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Towards English-to-SQL that actually works]]></title><description><![CDATA[dbt to English to SQL]]></description><link>https://newsletter.ponder.co/p/towards-english-to-sql-that-actually</link><guid isPermaLink="false">https://newsletter.ponder.co/p/towards-english-to-sql-that-actually</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Sun, 25 May 2025 15:28:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8e76a172-302c-4c4f-b834-8432d534852c_1478x1020.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5MpI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5MpI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5MpI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5MpI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5MpI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5MpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png" width="414" height="414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:414,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5MpI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5MpI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5MpI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5MpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7199e4fb-ec1a-481c-bfb8-3a7125ceebde_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Introduction</strong></h3><p>&#8220;<strong>English-to-SQL</strong>&#8221; is a hot topic right now&#8212;and for good reason. It&#8217;s the dream of every data analyst, data engineer, and data-savvy team: imagine asking a question in plain English and having an LLM not only understand it, but also run the exact SQL query needed to get the answer from your database or data lake.</p><p>There are many ways to implement <strong>English-to-SQL</strong>, and each approach comes with different tradeoffs in complexity, accuracy, and contextual awareness. What we&#8217;re showcasing here is just one practical and powerful path&#8212;focused on giving the LLM rich, structured context using <strong>dbt</strong> and <strong>LangChain</strong>.</p><p>Our <strong>dbt-to-English</strong> project laid the foundation by giving LLMs access to your dbt metadata, real SQL object names, and custom prompts. Now, we&#8217;ve taken it further: by integrating LangChain&#8217;s <strong>QuerySQLDatabaseTool</strong>, your LLM-powered assistant can not only understand your data environment, but actually connect to your database and run live SQL queries based on natural language inputs.</p><p>If you haven&#8217;t read our previous<a href="https://newsletter.hipposys.ai/p/dbt-to-english"> blog post about dbt-to-English</a>, we recommend starting there&#8212;it sets the stage for what&#8217;s next.</p><p>Let&#8217;s explore how this new feature works in practice.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><strong>Getting Started: Connecting to the Database and Generating Fictional Sample Data</strong></h3><p>Let&#8217;s begin with a simple example to understand how the system works<strong>.</strong></p><div><hr></div><p><strong>1. Configure Your Environment<br></strong> Update your <strong>private.env</strong> file by adding a new key from the <strong>private.env-template</strong> file, for example:</p><pre><code><strong>DATABASE_URI=...</strong></code></pre><p>You can either use your own database or connect to the provided local one:</p><pre><code><strong>DATABASE_URI=postgresql://postgres:postgres@postgres:5432/postgres</strong></code></pre><div><hr></div><p><strong>2. Launch the Environment<br></strong> Run the <strong>dbt-to-English</strong> environment (<a href="https://github.com/hipposys-ltd/dbt-to-english">GitHub repo</a>) using Docker:</p><pre><code><strong>docker compose up --build</strong></code></pre><div><hr></div><p><strong>3. Run dbt to generate source tables and transformation models.</strong></p><pre><code> <strong>cd DbtExampleProject
 dbt build</strong></code></pre><p><strong>4. Enable Database Connection in UI<br></strong> In the app interface, select the catalog and manifest files. Then proceed to the <em>System Prompt</em> section, where a new checkbox labeled "Connect to the Database?" appears below the prompt text. Check this box.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fERe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fERe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 424w, https://substackcdn.com/image/fetch/$s_!fERe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 848w, https://substackcdn.com/image/fetch/$s_!fERe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 1272w, https://substackcdn.com/image/fetch/$s_!fERe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fERe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png" width="446" height="106" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:106,&quot;width&quot;:446,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fERe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 424w, https://substackcdn.com/image/fetch/$s_!fERe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 848w, https://substackcdn.com/image/fetch/$s_!fERe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 1272w, https://substackcdn.com/image/fetch/$s_!fERe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb91d811-8714-478e-badd-ab246b6d9f7b_446x106.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Now add the following instruction to your prompt:</p><ol start="8"><li><p><strong>Execute a query to retrieve only the first 5 rows (no more) from the table, using PostgreSQL dialect. You must use your retrieval tool for this step!<br> After analyzing the structure of the results (including column names, data types, and format patterns), generate entirely fictional placeholder data that illustrates the table schema only.<br> Do not include any actual database values, even if they appear to be examples.</strong></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VUOq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VUOq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 424w, https://substackcdn.com/image/fetch/$s_!VUOq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 848w, https://substackcdn.com/image/fetch/$s_!VUOq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 1272w, https://substackcdn.com/image/fetch/$s_!VUOq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VUOq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png" width="1364" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:1364,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VUOq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 424w, https://substackcdn.com/image/fetch/$s_!VUOq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 848w, https://substackcdn.com/image/fetch/$s_!VUOq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 1272w, https://substackcdn.com/image/fetch/$s_!VUOq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00855f1-64ff-472d-a5da-15a61e4469f3_1364x524.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p><strong>5. Run the Script<br></strong> Let&#8217;s use the stg_customers model for this test. The system connects to the database via the provided <strong>DATABASE_URI</strong>, runs a query to fetch the first 5 rows, analyzes the schema, and produces fake&#8212;but structurally accurate&#8212;data.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CN-p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CN-p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 424w, https://substackcdn.com/image/fetch/$s_!CN-p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 848w, https://substackcdn.com/image/fetch/$s_!CN-p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 1272w, https://substackcdn.com/image/fetch/$s_!CN-p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CN-p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png" width="1364" height="88" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:88,&quot;width&quot;:1364,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CN-p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 424w, https://substackcdn.com/image/fetch/$s_!CN-p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 848w, https://substackcdn.com/image/fetch/$s_!CN-p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 1272w, https://substackcdn.com/image/fetch/$s_!CN-p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cdcb99d-077a-497a-82fc-af02e234159e_1364x88.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><p><strong>6. Verify Query Execution<br></strong> Inspect the <strong>PostgreSQL</strong> logs to confirm that the query was executed. The logs show that the tool did connect and access the table, which confirms the integration is functioning correctly.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nw4f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nw4f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 424w, https://substackcdn.com/image/fetch/$s_!nw4f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 848w, https://substackcdn.com/image/fetch/$s_!nw4f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 1272w, https://substackcdn.com/image/fetch/$s_!nw4f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nw4f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png" width="1456" height="53" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:53,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nw4f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 424w, https://substackcdn.com/image/fetch/$s_!nw4f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 848w, https://substackcdn.com/image/fetch/$s_!nw4f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 1272w, https://substackcdn.com/image/fetch/$s_!nw4f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b3592-9d41-40d6-9f03-bbeaa1968e9b_1532x56.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><p><strong>7. Compare with Actual Data<br></strong> To verify the accuracy of the AI's schema understanding, run the same query manually:</p><pre><code><strong>SELECT * FROM dbt.stg_customers sc LIMIT 5;</strong></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X_xn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X_xn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 424w, https://substackcdn.com/image/fetch/$s_!X_xn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 848w, https://substackcdn.com/image/fetch/$s_!X_xn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 1272w, https://substackcdn.com/image/fetch/$s_!X_xn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X_xn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png" width="1246" height="192" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:192,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X_xn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 424w, https://substackcdn.com/image/fetch/$s_!X_xn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 848w, https://substackcdn.com/image/fetch/$s_!X_xn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 1272w, https://substackcdn.com/image/fetch/$s_!X_xn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0741fe3-8646-43b0-952f-6760f5f6c129_1246x192.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iWWg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iWWg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 424w, https://substackcdn.com/image/fetch/$s_!iWWg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 848w, https://substackcdn.com/image/fetch/$s_!iWWg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 1272w, https://substackcdn.com/image/fetch/$s_!iWWg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iWWg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png" width="1204" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:1204,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iWWg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 424w, https://substackcdn.com/image/fetch/$s_!iWWg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 848w, https://substackcdn.com/image/fetch/$s_!iWWg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 1272w, https://substackcdn.com/image/fetch/$s_!iWWg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe81d2e1-67c6-446d-8bcf-57698203145b_1204x360.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As expected, the tool generated entirely fictional data that mirrors the structure of the actual records. This proves that the placeholder data is schema-faithful and safe for demonstration or documentation purposes. Data analysts, product managers, or other non-technical users can now explore data structures confidently, without any risk of exposing real production data.</p><h3>Advanced Validation Use Case</h3><p>Now, let&#8217;s explore a more advanced and practical use case&#8212;<strong>identifying outdated dbt descriptions</strong>.</p><h4><strong>1. Add a Description with Known Issues</strong></h4><p>We&#8217;ll begin by editing the <strong>schema.yml</strong> file to add a description for the <strong>order_count_per_customer</strong> model. Intentionally include <strong>two incorrect statements</strong> and <strong>one correct one</strong>. For example:</p><blockquote><p>&#8220;The following table is always empty but consists of four columns. Its data is generated using a SQL <strong>GROUP BY</strong> clause.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Vk7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Vk7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 424w, https://substackcdn.com/image/fetch/$s_!3Vk7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 848w, https://substackcdn.com/image/fetch/$s_!3Vk7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 1272w, https://substackcdn.com/image/fetch/$s_!3Vk7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Vk7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png" width="1456" height="149" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:149,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3Vk7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 424w, https://substackcdn.com/image/fetch/$s_!3Vk7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 848w, https://substackcdn.com/image/fetch/$s_!3Vk7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 1272w, https://substackcdn.com/image/fetch/$s_!3Vk7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe008fab3-7385-428c-bf12-a73ae9b70d23_1600x164.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></blockquote><h4><strong>2. Refresh Metadata</strong></h4><p>Restart the <strong>docker compose</strong> process to ensure the <strong>catalog</strong> and <strong>manifest</strong> files are regenerated with the updated model description:</p><pre><code>docker compose down</code></pre><pre><code>docker compose up --build</code></pre><p>Then, reselect the updated <strong>catalog</strong> and <strong>manifest</strong> files in the interface.</p><h4><strong>3. Update the Prompt for Comparison</strong></h4><p>Modify the prompt to instruct the LLM to perform a structured validation:</p><blockquote><p><strong>Compare the actual behavior of the current model with its dbt description (documentation).<br> If needed, use the QuerySQLDatabaseTool with the PostgreSQL dialect to validate the implementation.<br> Return your findings in a table with two columns:</strong></p></blockquote><ul><li><p><strong>Description Item &#8211; a specific claim or element from the dbt model's description</strong></p></li><li><p><strong>Status &#8211; either Correct if the behavior matches the description, or Incorrect if it does not</strong></p></li></ul><blockquote><p><strong>The table must include only the items that can be explicitly verified as correct or incorrect.<br> Avoid listing any assumptions, inferred logic, or undocumented behaviors.</strong></p></blockquote><p>Make sure to check the <strong>"Connect to the Database"</strong> checkbox before running the model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M3VM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M3VM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 424w, https://substackcdn.com/image/fetch/$s_!M3VM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 848w, https://substackcdn.com/image/fetch/$s_!M3VM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 1272w, https://substackcdn.com/image/fetch/$s_!M3VM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M3VM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png" width="442" height="268.46941678520625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:854,&quot;width&quot;:1406,&quot;resizeWidth&quot;:442,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M3VM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 424w, https://substackcdn.com/image/fetch/$s_!M3VM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 848w, https://substackcdn.com/image/fetch/$s_!M3VM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 1272w, https://substackcdn.com/image/fetch/$s_!M3VM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9900a21-6cfc-4c14-b015-d2b02b6fc831_1406x854.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>4. Run the LLM</strong></h4><p>Execute the process.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pKW8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pKW8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 424w, https://substackcdn.com/image/fetch/$s_!pKW8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 848w, https://substackcdn.com/image/fetch/$s_!pKW8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 1272w, https://substackcdn.com/image/fetch/$s_!pKW8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pKW8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png" width="1406" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1406,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pKW8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 424w, https://substackcdn.com/image/fetch/$s_!pKW8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 848w, https://substackcdn.com/image/fetch/$s_!pKW8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 1272w, https://substackcdn.com/image/fetch/$s_!pKW8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff62e046b-dfcd-488f-8078-ed897f26cf71_1406x970.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As observed, the output table is highly accurate. The LLM correctly interpreted the dbt description, connected to the database, and validated each point:</p><ul><li><p>It verified that the table is <strong>not</strong> empty.</p></li><li><p>It confirmed the presence of four columns.</p></li><li><p>It validated the use of a SQL <strong>GROUP BY</strong> clause.</p></li></ul><p>This confirms that the LLM can reliably detect outdated or incorrect documentation by cross-referencing dbt metadata with actual model behavior&#8212;providing a valuable tool for maintaining accurate, trustworthy data documentation.</p><h3>How It Works Under the Hood</h3><p>Let&#8217;s break down how this functionality is implemented from a technical perspective.</p><p>The core logic resides in the following file within our repository:<br> <strong>fastapi/server/tr_dbt_to_english.py</strong></p><p>To enable database interaction, we utilize the <a href="https://python.langchain.com/docs/integrations/tools/sql_database/">QuerySQLDatabaseTool</a> from the <strong>langchain_community</strong> package.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-ycy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-ycy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 424w, https://substackcdn.com/image/fetch/$s_!-ycy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 848w, https://substackcdn.com/image/fetch/$s_!-ycy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 1272w, https://substackcdn.com/image/fetch/$s_!-ycy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-ycy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png" width="666" height="132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:132,&quot;width&quot;:666,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-ycy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 424w, https://substackcdn.com/image/fetch/$s_!-ycy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 848w, https://substackcdn.com/image/fetch/$s_!-ycy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 1272w, https://substackcdn.com/image/fetch/$s_!-ycy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9e4d7f1-5bfe-44b5-93f9-837ed843a9c3_666x132.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This tool is initialized with a <strong>SQLDatabase</strong> object, which can be constructed using the <strong>SQLDatabase.from_uri()</strong> method.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yXUo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yXUo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 424w, https://substackcdn.com/image/fetch/$s_!yXUo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 848w, https://substackcdn.com/image/fetch/$s_!yXUo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 1272w, https://substackcdn.com/image/fetch/$s_!yXUo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yXUo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png" width="914" height="158" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:914,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yXUo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 424w, https://substackcdn.com/image/fetch/$s_!yXUo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 848w, https://substackcdn.com/image/fetch/$s_!yXUo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 1272w, https://substackcdn.com/image/fetch/$s_!yXUo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04eed919-23ac-49d7-86f7-1d992867dcda_914x158.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>In addition to setting up the database connection, we define the LLM Chat instance&#8212;this serves as the "brain" behind the operation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aoi4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aoi4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 424w, https://substackcdn.com/image/fetch/$s_!aoi4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 848w, https://substackcdn.com/image/fetch/$s_!aoi4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 1272w, https://substackcdn.com/image/fetch/$s_!aoi4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aoi4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png" width="446" height="249.44268774703556" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1012,&quot;resizeWidth&quot;:446,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aoi4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 424w, https://substackcdn.com/image/fetch/$s_!aoi4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 848w, https://substackcdn.com/image/fetch/$s_!aoi4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 1272w, https://substackcdn.com/image/fetch/$s_!aoi4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41c16787-4c2f-46a2-a462-fc9a584b1460_1012x566.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Once the <strong>QuerySQLDatabaseTool</strong> is ready, we configure a <strong>ReAct agent</strong> (<a href="https://python.langchain.com/docs/tutorials/agents/">LangChain tutorial</a>). This agent integrates the LLM and the tools it can use (such as querying the database).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rsyQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rsyQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 424w, https://substackcdn.com/image/fetch/$s_!rsyQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 848w, https://substackcdn.com/image/fetch/$s_!rsyQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 1272w, https://substackcdn.com/image/fetch/$s_!rsyQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rsyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png" width="466" height="265.4718826405868" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:818,&quot;resizeWidth&quot;:466,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rsyQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 424w, https://substackcdn.com/image/fetch/$s_!rsyQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 848w, https://substackcdn.com/image/fetch/$s_!rsyQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 1272w, https://substackcdn.com/image/fetch/$s_!rsyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcc2e818-a2f6-4cc6-ae3a-3b97926cc718_818x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Finally, we use self.react_agent.stream to stream the model&#8217;s response, allowing it to dynamically interact with the database and return results in real time.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L_9T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L_9T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 424w, https://substackcdn.com/image/fetch/$s_!L_9T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 848w, https://substackcdn.com/image/fetch/$s_!L_9T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 1272w, https://substackcdn.com/image/fetch/$s_!L_9T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L_9T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png" width="506" height="78.5524193548387" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:154,&quot;width&quot;:992,&quot;resizeWidth&quot;:506,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L_9T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 424w, https://substackcdn.com/image/fetch/$s_!L_9T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 848w, https://substackcdn.com/image/fetch/$s_!L_9T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 1272w, https://substackcdn.com/image/fetch/$s_!L_9T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081a5ed5-9d36-4078-b5b8-51371e635b25_992x154.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3><strong>Conclusion: From Metadata to Meaningful Queries</strong></h3><p>What began as a way to help LLMs understand dbt metadata has now evolved into a practical, end-to-end system for transforming natural language into real, executable SQL&#8212;accurately and safely. By combining the structure of dbt, the flexibility of LangChain, and the power of live database connectivity, we've created a workflow that not only interprets intent but validates it against real data sources. Whether you're verifying outdated documentation, previewing schema with fictional data, or simply trying to bridge the gap between humans and databases, this integration shows what's possible when metadata, modeling, and AI work together. And best of all&#8212;it&#8217;s reproducible, extensible, and ready for your data team to explore.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.ponder.co/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[DBT to English]]></title><description><![CDATA[LLM-Powered Insights into Your DBT Project]]></description><link>https://newsletter.ponder.co/p/dbt-to-english</link><guid isPermaLink="false">https://newsletter.ponder.co/p/dbt-to-english</guid><dc:creator><![CDATA[Egor Tarasenko]]></dc:creator><pubDate>Tue, 29 Apr 2025 14:41:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ixHr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ixHr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ixHr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ixHr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ixHr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ixHr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ixHr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png" width="282" height="282" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:282,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ixHr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ixHr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ixHr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ixHr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabe35269-77e9-4dda-81ab-4cac745f0a36_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Introduction</h2><p>DBT is a powerful tool for transforming data and managing analytics engineering workflows. But let&#8217;s face it&#8212;while it&#8217;s great for developers, it can be tough for analysts, product managers, or even other engineers to understand exactly what&#8217;s happening inside a specific model. The SQL can get dense, the logic isn't always obvious, and while DBT Docs and DBT Cloud&#8217;s Explore are helpful, they fall short when it comes to things like query-level lineage or automatic explanations of what a model is actually doing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x3Em!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x3Em!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 424w, https://substackcdn.com/image/fetch/$s_!x3Em!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 848w, https://substackcdn.com/image/fetch/$s_!x3Em!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 1272w, https://substackcdn.com/image/fetch/$s_!x3Em!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x3Em!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png" width="1456" height="644" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:644,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x3Em!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 424w, https://substackcdn.com/image/fetch/$s_!x3Em!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 848w, https://substackcdn.com/image/fetch/$s_!x3Em!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 1272w, https://substackcdn.com/image/fetch/$s_!x3Em!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d0655e0-8bc4-4253-b4e0-7f5ee39425e5_1600x708.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That&#8217;s why we built<a href="https://github.com/hipposys-ltd/dbt-to-english"> DBT to English</a>&#8212;a tool that gives you LLM-powered insights into your DBT project. Whether you're using Bedrock or Anthropic, you can plug in your preferred LLM and get clean, contextual, human-friendly interpretations of your models, SQL logic, metadata, and lineage. Plus, it&#8217;s fully customizable: tweak the system prompt to get documentation that fits your team&#8217;s voice and style.</p><p>In this blog post, we&#8217;ll walk you through how to get started with the tool and show you how it can bring clarity and accessibility to even the most complex DBT projects.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Running Locally</h2><p>To get started, clone the repository: <strong>https://github.com/hipposys-ltd/dbt-to-english</strong></p><p>Then, copy the environment template file and create your local <strong>.env</strong> configuration:</p><pre><code>cp private.env-template private.env</code></pre><p>In your .<strong>env</strong> file, set the <strong>LLM_MODEL</strong> variable depending on the provider you're using:</p><ul><li><p>For <strong>Anthropic models</strong>, start the value with <strong>Anthropic:</strong> and provide your <strong>ANTHROPIC_API_KEY</strong>.</p></li><li><p>For <strong>Amazon Bedrock</strong>, start with <strong>Bedrock:</strong> and include your AWS credentials and connection settings.</p></li></ul><p>Once configured, build and start the app with Docker:</p><pre><code>docker compose up --build</code></pre><p>After it&#8217;s running, open your browser and go to <strong>http://localhost:8501/</strong> to access the Streamlit interface.</p><h2>DBT to English Translation</h2><p>When you open the UI, you'll see a form that asks for two files: <strong>catalog.json</strong> and <strong>manifest.json</strong>.<br> If you don&#8217;t have your own DBT project, you can use sample files from our repository:<br> <strong>DbtExampleProject/target/catalog.json</strong> and <strong>DbtExampleProject/target/manifest.json</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vKCM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vKCM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 424w, https://substackcdn.com/image/fetch/$s_!vKCM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 848w, https://substackcdn.com/image/fetch/$s_!vKCM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 1272w, https://substackcdn.com/image/fetch/$s_!vKCM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vKCM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png" width="418" height="247.81428571428572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:830,&quot;width&quot;:1400,&quot;resizeWidth&quot;:418,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vKCM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 424w, https://substackcdn.com/image/fetch/$s_!vKCM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 848w, https://substackcdn.com/image/fetch/$s_!vKCM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 1272w, https://substackcdn.com/image/fetch/$s_!vKCM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c75de80-b86e-40e9-b5c1-2e8fda8f1a61_1400x830.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Once you've selected the files, click on <strong>&#8220;Parse JSON Files.&#8221;<br></strong> This will reveal two additional fields:</p><ol><li><p>A field to select the nodes (models) you want to parse or generate documentation for.</p></li><li><p>A <strong>System Prompt</strong> field that defines the instruction sent to the LLM.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1o6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1o6G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 424w, https://substackcdn.com/image/fetch/$s_!1o6G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 848w, https://substackcdn.com/image/fetch/$s_!1o6G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 1272w, https://substackcdn.com/image/fetch/$s_!1o6G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1o6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png" width="448" height="239.36" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:1400,&quot;resizeWidth&quot;:448,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1o6G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 424w, https://substackcdn.com/image/fetch/$s_!1o6G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 848w, https://substackcdn.com/image/fetch/$s_!1o6G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 1272w, https://substackcdn.com/image/fetch/$s_!1o6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf5e8bb5-4c20-494e-aecb-23d944d51f2f_1400x748.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li></ol><p>Choose a few models and leave the System Prompt as-is for now, then click <strong>&#8220;Run LLM.&#8221;</strong></p><p>You&#8217;ll receive a detailed, plain-English explanation of your selected model.</p><ul><li><p>First, you'll see a natural language description&#8212;no SQL syntax or complex calculations.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1gim!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1gim!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 424w, https://substackcdn.com/image/fetch/$s_!1gim!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 848w, https://substackcdn.com/image/fetch/$s_!1gim!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 1272w, https://substackcdn.com/image/fetch/$s_!1gim!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1gim!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png" width="637" height="196.65140324963073" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:418,&quot;width&quot;:1354,&quot;resizeWidth&quot;:637,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1gim!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 424w, https://substackcdn.com/image/fetch/$s_!1gim!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 848w, https://substackcdn.com/image/fetch/$s_!1gim!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 1272w, https://substackcdn.com/image/fetch/$s_!1gim!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d65e836-05ab-4f7b-a281-516d08240e8c_1354x418.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p>Next, an <strong>interactive graph</strong> will be generated. Unlike dbt Docs or dbt Cloud, this graph includes not just model-level lineage but also internal relationships like CTEs and calculations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Su5l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Su5l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 424w, https://substackcdn.com/image/fetch/$s_!Su5l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 848w, https://substackcdn.com/image/fetch/$s_!Su5l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 1272w, https://substackcdn.com/image/fetch/$s_!Su5l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Su5l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png" width="547" height="323.19054652880357" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1354,&quot;resizeWidth&quot;:547,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Su5l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 424w, https://substackcdn.com/image/fetch/$s_!Su5l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 848w, https://substackcdn.com/image/fetch/$s_!Su5l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 1272w, https://substackcdn.com/image/fetch/$s_!Su5l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff08fb0ad-3cff-4a78-92c9-ce7e1edb851e_1354x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Following that, <strong>SQL Logic &amp; Calculations </strong>and <strong>Columns Table</strong> will show how each column was derived, including its source tables.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BLEL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BLEL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 424w, https://substackcdn.com/image/fetch/$s_!BLEL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 848w, https://substackcdn.com/image/fetch/$s_!BLEL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 1272w, https://substackcdn.com/image/fetch/$s_!BLEL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BLEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png" width="1354" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:608,&quot;width&quot;:1354,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BLEL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 424w, https://substackcdn.com/image/fetch/$s_!BLEL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 848w, https://substackcdn.com/image/fetch/$s_!BLEL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 1272w, https://substackcdn.com/image/fetch/$s_!BLEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a46a348-fb8f-4404-bd1f-df9e0e0923e4_1354x608.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wG0F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wG0F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 424w, https://substackcdn.com/image/fetch/$s_!wG0F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 848w, https://substackcdn.com/image/fetch/$s_!wG0F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!wG0F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wG0F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png" width="628" height="465.8241758241758" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1456,&quot;resizeWidth&quot;:628,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wG0F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 424w, https://substackcdn.com/image/fetch/$s_!wG0F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 848w, https://substackcdn.com/image/fetch/$s_!wG0F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!wG0F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef328b7a-6803-4759-b217-d099da05e82b_1488x1104.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Finally, you'll see a <strong>Dependencies Table</strong> with brief explanations for each dependency.</p></li></ul><p>Pretty cool, right?</p><div><hr></div><h3><strong>Want to change the output?</strong></h3><p>Perfect! That&#8217;s exactly what the <strong>System Prompt</strong> is for. Let&#8217;s go back to it and take a closer look.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FUwp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FUwp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 424w, https://substackcdn.com/image/fetch/$s_!FUwp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 848w, https://substackcdn.com/image/fetch/$s_!FUwp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 1272w, https://substackcdn.com/image/fetch/$s_!FUwp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FUwp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png" width="475" height="209.28571428571428" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:586,&quot;width&quot;:1330,&quot;resizeWidth&quot;:475,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FUwp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 424w, https://substackcdn.com/image/fetch/$s_!FUwp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 848w, https://substackcdn.com/image/fetch/$s_!FUwp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 1272w, https://substackcdn.com/image/fetch/$s_!FUwp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F019bb837-565a-4cfa-bfde-882469e3243d_1330x586.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The response you received was directly shaped by the System Prompt. Feel free to experiment&#8212;change the structure, add your own instructions or formatting, rearrange the output, etc.</p><blockquote><p><strong>Important:</strong> If you modify the diagram-related instructions, please keep the example section as-is.<br> Our UI relies on that example to recognize the diagram portion in the LLM response and render it as an interactive graph.</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-syq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-syq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 424w, https://substackcdn.com/image/fetch/$s_!-syq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 848w, https://substackcdn.com/image/fetch/$s_!-syq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 1272w, https://substackcdn.com/image/fetch/$s_!-syq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-syq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png" width="460" height="221.35338345864662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1330,&quot;resizeWidth&quot;:460,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-syq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 424w, https://substackcdn.com/image/fetch/$s_!-syq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 848w, https://substackcdn.com/image/fetch/$s_!-syq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 1272w, https://substackcdn.com/image/fetch/$s_!-syq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f31ff4e-56c8-4950-829e-1b67bf183535_1330x640.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Conclusion</h2><p>"DBT to English" is our way of making DBT projects more accessible, understandable, and human-friendly&#8212;no matter your technical background. By leveraging the power of large language models, we&#8217;ve opened the door for teams to explore data models, understand complex SQL logic, and visualize lineage at a much more granular level&#8212;all through a clean, conversational interface.</p><p>But this is just the beginning.</p><p>We enthusiastically invite the community to contribute to this open-source initiative&#8212;whether you're interested in adding new features, supporting more LLM providers, improving prompts, or enhancing the UI. Your feedback and contributions will help shape the future of how we understand and interact with modern data stacks.</p><p>Visit our GitHub repository at<a href="https://github.com/hipposys-ltd/dbt-to-english"> </a><strong><a href="https://github.com/hipposys-ltd/dbt-to-english">https://github.com/hipposys-ltd/dbt-to-english</a></strong> to join the project, submit pull requests, or share your ideas. Let&#8217;s make DBT more approachable!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.ponder.co/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Hipposys - Data &amp; AI Engineering! Subscribe for free to receive new posts and learn more about our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>