<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Structured Outputs on AIBussin — AI applications, systems and books</title><link>https://aibussin.com/tags/structured-outputs/</link><description>Recent content in Structured Outputs on AIBussin — AI applications, systems and books</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 28 Aug 2026 10:10:00 +0100</lastBuildDate><atom:link href="https://aibussin.com/tags/structured-outputs/index.xml" rel="self" type="application/rss+xml"/><item><title>The Action Boundary</title><link>https://aibussin.com/books/agents-from-first-principles/02-chapter/</link><pubDate>Sat, 08 Aug 2026 15:46:00 +0100</pubDate><guid>https://aibussin.com/books/agents-from-first-principles/02-chapter/</guid><description>&lt;p&gt;The previous chapter ended with a division of responsibility:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;The model proposes. The runtime decides what may execute. The environment supplies observations about what happened.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;This chapter takes the first clause seriously. What does it actually mean for a model to &lt;strong&gt;propose an action&lt;/strong&gt;?&lt;/p&gt;&#10;&lt;p&gt;Suppose the model emits the sentence &lt;em&gt;&amp;ldquo;Search the documentation for the latest PyTorch optimizer API.&amp;rdquo;&lt;/em&gt; A human reads that and understands the intention immediately. A runtime cannot act on it at all, because it needs answers to six questions the sentence does not contain: which action, which arguments, whether those arguments are well formed, whether their values are meaningful, whether this action is permitted in this run, and whether its execution preconditions currently hold.&lt;/p&gt;</description></item><item><title>Define the Contract</title><link>https://aibussin.com/books/dspy-from-first-principles/03-chapter/</link><pubDate>Fri, 28 Aug 2026 10:10:00 +0100</pubDate><guid>https://aibussin.com/books/dspy-from-first-principles/03-chapter/</guid><description>&lt;p&gt;Chapter 2 built a boundary and then exposed a weakness in it on purpose. We designed the most natural output field available — &lt;code&gt;rewritten_text&lt;/code&gt;, a replacement sentence — but failed to represent &lt;em&gt;&amp;ldquo;no edit needed&amp;rdquo;&lt;/em&gt; as an explicit decision.&lt;/p&gt;&#10;&lt;p&gt;The model can technically return the original sentence unchanged. What the contract cannot tell us is whether that identity output means deliberate restraint or an attempted rewrite that happened to reproduce the input. That distinction matters on six of the forty-four later fixture cases — about &lt;code&gt;13.6%&lt;/code&gt; of the corpus. Having a signature did not prevent the mistake.&lt;/p&gt;</description></item><item><title>AI Agent Returning Invalid Tool Calls? How to Validate LLM Actions</title><link>https://aibussin.com/post/agents-from-first-principles-01/</link><pubDate>Sat, 08 Aug 2026 15:46:00 +0100</pubDate><guid>https://aibussin.com/post/agents-from-first-principles-01/</guid><description>&lt;p&gt;If your agent sometimes invents a tool name, omits a required argument, returns malformed JSON, or produces an action that looks plausible but cannot actually be executed, the problem is usually not &amp;ldquo;the agent is dumb.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The problem is that &lt;strong&gt;raw language-model output has been allowed to cross directly into execution&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;That boundary is too weak.&lt;/p&gt;&#10;&lt;p&gt;The simplest useful agent architecture is not:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;prompt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;model&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;execute whatever came back&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is:&lt;/p&gt;</description></item></channel></rss>